feat: more robust toggle wheel script

This commit is contained in:
Krzysztof Rudnicki 2025-10-24 23:20:12 +02:00
parent 0d5ea0a9d4
commit 60b7ccbf0f

View File

@ -1,8 +1,10 @@
#!/bin/bash #!/bin/bash
# Replace these with your device's vendor and product IDs # Replace these with your device's vendor and product IDs
VENDOR_ID="c24f" # Note: lsusb prints as VENDOR:PRODUCT (e.g., 046d:c24f for Logitech G29)
PRODUCT_ID="046d" # sysfs expects idVendor=046d and idProduct=c24f
VENDOR_ID="046d"
PRODUCT_ID="c24f"
ACTION=$1 ACTION=$1
@ -20,12 +22,13 @@ fi
DEVICE_PATH="" DEVICE_PATH=""
# Find the device path in sysfs # Find the device path in sysfs (robust scan)
for sysdevpath in $(find /sys/bus/usb/devices/ -name idVendor); do for d in /sys/bus/usb/devices/*; do
if [[ $(cat "$sysdevpath") == "$VENDOR_ID" ]]; then if [[ -f "$d/idVendor" && -f "$d/idProduct" ]]; then
parentdir="$(dirname "$sysdevpath")" v=$(cat "$d/idVendor")
if [[ $(cat "$parentdir/idProduct") == "$PRODUCT_ID" ]]; then p=$(cat "$d/idProduct")
DEVICE_PATH="$parentdir" if [[ "$v" == "$VENDOR_ID" && "$p" == "$PRODUCT_ID" ]]; then
DEVICE_PATH="$d"
break break
fi fi
fi fi
@ -33,15 +36,22 @@ done
# Check if device was found # Check if device was found
if [ -z "$DEVICE_PATH" ]; then if [ -z "$DEVICE_PATH" ]; then
echo "Device with Vendor ID $VENDOR_ID and Product ID $PRODUCT_ID not found." echo "Device with Vendor ID $VENDOR_ID and Product ID $PRODUCT_ID not found in /sys/bus/usb/devices."
echo "Tip: Run 'lsusb | grep ${VENDOR_ID}:${PRODUCT_ID}' to verify it's connected."
exit 1 exit 1
fi fi
# Enable or disable the device # Enable or disable the device
if [ ! -e "$DEVICE_PATH/authorized" ]; then
echo "The 'authorized' attribute is not present at $DEVICE_PATH."
echo "This device may not support toggling via 'authorized'."
exit 1
fi
if [ "$ACTION" == "off" ]; then if [ "$ACTION" == "off" ]; then
echo '0' > "$DEVICE_PATH/authorized" echo '0' > "$DEVICE_PATH/authorized"
echo "Device turned off." echo "Device at $(basename "$DEVICE_PATH") turned off."
elif [ "$ACTION" == "on" ]; then elif [ "$ACTION" == "on" ]; then
echo '1' > "$DEVICE_PATH/authorized" echo '1' > "$DEVICE_PATH/authorized"
echo "Device turned on." echo "Device at $(basename "$DEVICE_PATH") turned on."
fi fi