diff options
| -rw-r--r-- | jsfav/etc/udev/rules.d/72-favorite-joystick.rules | 2 | ||||
| -rwxr-xr-x | jsfav/usr/local/bin/jsfav | 42 | ||||
| -rwxr-xr-x | stow | 2 |
3 files changed, 46 insertions, 0 deletions
diff --git a/jsfav/etc/udev/rules.d/72-favorite-joystick.rules b/jsfav/etc/udev/rules.d/72-favorite-joystick.rules new file mode 100644 index 0000000..582200f --- /dev/null +++ b/jsfav/etc/udev/rules.d/72-favorite-joystick.rules @@ -0,0 +1,2 @@ +# js0: Microsoft Xbox 360 over 2.4G (Wireless Gaming Receiver for Windows) +ACTION=="add", KERNEL=="js?", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0719", RUN+="/usr/local/bin/jsfav 045e 0719" diff --git a/jsfav/usr/local/bin/jsfav b/jsfav/usr/local/bin/jsfav new file mode 100755 index 0000000..61c30a2 --- /dev/null +++ b/jsfav/usr/local/bin/jsfav @@ -0,0 +1,42 @@ +#!/usr/bin/env sh + +cd /sys/bus/usb/devices +if [ -z "$1" -a -z "$2" ]; then + echo "[ERROR] Missing args (1) vendor_id or (2) product_id" + exit 1 +fi + +# Disable all controllers but favorite +all="$(udevadm info -q path /dev/input/js* | grep -Po 'usb\d+/\d+-\d+')" +fav="" +for i in $all; do + if [ ! "$(cat $i/idVendor)" = "$1" -a ! "$(cat $i/idProduct)" = "$2" ]; then + echo "[DISABLE] $(cat $i/product)" >&2 + echo "0" > "$i/authorized" + else + echo "[PASS] $(cat $i/product)" >&2 + fav="$i" + fi +done + +# Reset favorite controller to port #0 +js0="$(udevadm info -q path /dev/input/js0 2>/dev/null | grep -Po 'usb\d+/\d+-\d+')" +if [ -z $fav ]; then + echo "[ERROR] Favorite controller $1:$2 not connected" +elif [ -z $js0 ]; then + echo "[RESET] $(cat $fav/product)" >&2 + echo "0" > "$fav/authorized" + sleep 1 + echo "1" > "$fav/authorized" +fi + +# Enable all controllers +for i in $all; do + if [ ! "$i" = "$fav" ]; then + sleep 1 + echo "[ENABLE] $(cat $i/product)" >&2 + echo "1" > "$i/authorized" + else + echo "[PASS] $(cat $i/product)" >&2 + fi +done @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +exec sudo stow -v -t / --no-folding "$@" |
