diff options
author | Lucas N. Ferreira <lnf07@c3sl.ufpr.br> | 2010-07-12 18:30:56 -0300 |
---|---|---|
committer | Lucas N. Ferreira <lnf07@c3sl.ufpr.br> | 2010-07-12 18:30:56 -0300 |
commit | fba9e70efa790e70d3c37dacf50e4fe3c0240f02 (patch) | |
tree | 25e024d625e777c7c58d74df2367dbba1050a172 | |
parent | b3c22805c3a4058bc44d5ff9d781d2fa3db49a13 (diff) | |
parent | 2cf2b4363c84d5ab5e2b57ee1698f4df459594e1 (diff) |
Merge branch 'master' of ssh+git://lucasferreira@people.freedesktop.org/~lucasferreira/usbseat
Conflicts:
README
-rw-r--r-- | README | 4 | ||||
-rwxr-xr-x | install.sh | 8 | ||||
-rwxr-xr-x | src/seat-id | 55 | ||||
-rw-r--r-- | udev/50-usbseat.rules | 22 |
4 files changed, 89 insertions, 0 deletions
@@ -1 +1,5 @@ +<<<<<<< HEAD:README Lucas Ferreira GSOC 2010 Project +======= +Lucas Ferreira GSOC 2010 project +>>>>>>> 2cf2b4363c84d5ab5e2b57ee1698f4df459594e1:README diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..15d949e --- /dev/null +++ b/install.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# Lucas Ferreira + +SRC_DIR=/usr/sbin/ +UDEV_DIR=/lib/udev/rules.d/ + +mv src/seat-id $SRC_DIR +mv udev/50-usbseat.rules $UDEV_DIR diff --git a/src/seat-id b/src/seat-id new file mode 100755 index 0000000..6cfad67 --- /dev/null +++ b/src/seat-id @@ -0,0 +1,55 @@ +#!/bin/bash +#Lucas Ferreira + +SEAT_PATH="/dev/usbseat/" + +mkdir -p $SEAT_PATH + +SEAT_NAME= +DEV_BUS=$(cut -d'.' -f1 <<< $1) +SEAT_AMOUNT=$(ls $SEAT_PATH | wc -l) + +if [ $SEAT_AMOUNT == 0 ]; then + + SEAT_NAME="seat1" + echo $DEV_BUS > $SEAT_PATH/.${SEAT_NAME}_bus +else + + for SEAT in $(ls ${SEAT_PATH}); do + + # If the new device comes from one already existant Dock Station, + # atribute it this same Dock. + if [ "$DEV_BUS" == "$(cat $SEAT_PATH/.${SEAT}_bus)" ]; then + + SEAT_NAME="$SEAT" + echo $SEAT_NAME + + exit + fi + done + + # If the new device comes from one still not existant Dock Station, + # create a new one + if [ "$SEAT_NAME" == "" ] && [ "$SEAT" == "seat${SEAT_AMOUNT}" ]; then + + SEAT_NAME="seat$((SEAT_AMOUNT + 1))" + echo $DEV_BUS > $SEAT_PATH/.${SEAT_NAME}_bus + else + + if [ "$SEAT_NAME" == "" ] && [ "$SEAT" > "seat${SEAT_AMOUNT}" ]; then + + SEAT_NUMBER=${SEAT#seat} + SEAT_NAME="seat$((SEAT_NUMBER - 1))" + + while [ -d "$SEAT_PATH/$SEAT_NAME" ]; do + + SEAT_NUMBER=$((SEAT_NUMBER - 1)) + SEAT_NAME="seat${SEAT_NUMBER}" + done + + echo $DEV_BUS > $SEAT_PATH/.${SEAT_NAME}_bus + fi + fi +fi + +echo $SEAT_NAME diff --git a/udev/50-usbseat.rules b/udev/50-usbseat.rules new file mode 100644 index 0000000..39cd796 --- /dev/null +++ b/udev/50-usbseat.rules @@ -0,0 +1,22 @@ +# Set all DisplayLink devices to configuration 1 +# See http://libdlo.freedesktop.org/wiki/DeviceQuirks for more info +ATTR{idVendor}=="17e9", ATTR{bConfigurationValue}=="2", RUN="/bin/echo 1 > /sys/%b/bConfigurationValue" + +# aliases for display, kbd, mouse attached to specific hubs +KERNEL=="fb*",SUBSYSTEMS=="usb", PROGRAM="/usr/sbin/seat-id %b", SYMLINK+="usbseat/%c/display",RUN+="usbseat.sh %c" + +KERNEL=="mouse*", SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceProtocol}=="02", \ +PROGRAM="/usr/sbin/seat-id %b", SYMLINK+="usbseat/%c/mouse", RUN+="usbseat.sh %c" + +KERNEL=="event*", SUBSYSTEM=="input", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceProtocol}=="01", \ +PROGRAM="/usr/sbin/seat-id %b", SYMLINK+="usbseat/%c/keyboard", RUN+="usbseat.sh %c" + +KERNEL=="control*", SUBSYSTEM=="sound", SUBSYSTEMS=="usb", PROGRAM="/usr/sbin/seat-id %b", SYMLINK+="usbseat/%c/sound" + +# Handle when keyboard and mouse are one more hub downstream. Relying on pnp order to have already +# set up mouse, keyboard on upstream hub if we're daisy-chaining +KERNEL=="event*", SUBSYSTEM=="input", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceProtocol}=="01", \ +PROGRAM="/usr/sbin/seat-id %b",SYMLINK+="usbseat/%c/keyboard",RUN+="usbseat.sh %c" + +KERNEL=="mouse*", SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceProtocol}=="02", \ +PROGRAM="/usr/sbin/seat-id %b",SYMLINK+="usbseat/%c/mouse",RUN+="usbseat.sh %c" |