summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas N. Ferreira <lnf07@c3sl.ufpr.br>2010-07-12 18:30:56 -0300
committerLucas N. Ferreira <lnf07@c3sl.ufpr.br>2010-07-12 18:30:56 -0300
commitfba9e70efa790e70d3c37dacf50e4fe3c0240f02 (patch)
tree25e024d625e777c7c58d74df2367dbba1050a172
parentb3c22805c3a4058bc44d5ff9d781d2fa3db49a13 (diff)
parent2cf2b4363c84d5ab5e2b57ee1698f4df459594e1 (diff)
Merge branch 'master' of ssh+git://lucasferreira@people.freedesktop.org/~lucasferreira/usbseat
Conflicts: README
-rw-r--r--README4
-rwxr-xr-xinstall.sh8
-rwxr-xr-xsrc/seat-id55
-rw-r--r--udev/50-usbseat.rules22
4 files changed, 89 insertions, 0 deletions
diff --git a/README b/README
index 8677c39..9890162 100644
--- a/README
+++ b/README
@@ -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"