From b6a96a4dd3ca224219ab1ce36ceea5d334400a0f Mon Sep 17 00:00:00 2001 From: Giacomo Catenazzi Date: Thu, 13 Aug 2009 08:20:02 +0200 Subject: [PATCH] Import Debian changes 1.9.5.3-5 g15daemon (1.9.5.3-5) unstable; urgency=low * Handle keyboard device with udev, so detecting detachement and attachment of keyboarda (Closes: #489978). * init.d LSB header: try to start before xorg, to be able to have full access to all extra keys. * Recent libg15 corrected strange behaviour in new G15 keyboard (Closes: #494180) --- debian/changelog | 11 +++++ debian/g15daemon.init | 103 ++++++++++++++++++++++++++++-------------- debian/g15daemon.udev | 21 +++++++++ 3 files changed, 100 insertions(+), 35 deletions(-) create mode 100644 debian/g15daemon.udev diff --git a/debian/changelog b/debian/changelog index 63a80cd..c96cd77 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,14 @@ +g15daemon (1.9.5.3-5) unstable; urgency=low + + * Handle keyboard device with udev, so detecting detachement + and attachment of keyboarda (Closes: #489978). + * init.d LSB header: try to start before xorg, to be able + to have full access to all extra keys. + * Recent libg15 corrected strange behaviour in new G15 keyboard + (Closes: #494180) + + -- Giacomo Catenazzi Thu, 13 Aug 2009 08:20:02 +0200 + g15daemon (1.9.5.3-4) unstable; urgency=low * Try to load uinput module, in order to have Gx key working diff --git a/debian/g15daemon.init b/debian/g15daemon.init index aacab04..bc323fa 100644 --- a/debian/g15daemon.init +++ b/debian/g15daemon.init @@ -6,6 +6,7 @@ # Required-Stop: $local_fs # Should-Start: $remote_fs # Should-Stop: $remote_fs +# X-Start-Before: xdm kdm gdm ldm sdm # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: load deamon for Logitech G15 keyboard lcd display @@ -18,7 +19,7 @@ DAEMON=/usr/sbin/g15daemon NAME=g15daemon DESC=g15daemon -test -x $DAEMON || exit 0 +[ -x "$DAEMON" ] || exit 0 # Include g15daemon defaults if available if [ -f /etc/default/g15daemon ] ; then @@ -32,39 +33,60 @@ fi set -e -load_uinput () { - DEVICE=/dev/input/uinput - DEV=".none." - if [ ! -e "$DEVICE" ] ; then - modprobe -q uinput || true - for i in `seq 80`; do - if [ -e "$DEVICE" ]; then - DEV="$DEVICE" - break - fi - echo -n "." - sleep 0.1 +wait_for_file() { + local file=$1 + local timeout=$2 + [ "$timeout" ] || timeout=120 + + local count=$(($timeout * 10)) + while [ $count != 0 ]; do + [ -e "$file" ] && return 0 + sleep 0.1 + count=$(($count - 1)) done - if [ "$DEV" = ".none." ]; then - echo -n "Warning: uinput ($DEVICE) doesn't exist. The G-keys are unsupported..." - fi + return 1 +} + +load_uinput() { + if [ ! -e /dev/input/uinput ] ; then + modprobe -q uinput || true + wait_for_file /dev/input/uinput 3 || return 1 fi } +wait_usr_mount() { + if [ ! -e "$DAEMON" ] ; then + wait_for_file "$DAEMON" 7 || return 1 + fi +} + +is_running() { + start-stop-daemon --stop --test --quiet --pidfile \ + /var/run/$NAME.pid --exec $DAEMON +} + +do_start() { + start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ + --exec $DAEMON -- $DAEMON_OPTS +} + +do_stop() { + $DAEMON -k + start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ + --oknodo --retry 5 --exec $DAEMON +} + case "$1" in start) echo -n "Starting $DESC: " - load_uinput - start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ - --exec $DAEMON -- $DAEMON_OPTS + load_uinput || echo -n ".../dev/input/uinput not found ..." + do_start echo "$NAME." ;; stop) echo -n "Stopping $DESC: " - $DAEMON -k - start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ - --oknodo --retry 5 --exec $DAEMON + do_stop echo "$NAME." ;; #reload) @@ -78,7 +100,7 @@ case "$1" in # echo "Reloading $DESC configuration files." # start-stop-daemon --stop --signal 1 --quiet --pidfile \ # /var/run/$NAME.pid --exec $DAEMON - #;; + #;; force-reload) # # If the "reload" option is implemented, move the "force-reload" @@ -86,24 +108,35 @@ case "$1" in # just the same as "restart" except that it does nothing if the # daemon isn't already running. # check wether $DAEMON is running. If so, restart - start-stop-daemon --stop --test --quiet --pidfile \ - /var/run/$NAME.pid --exec $DAEMON \ - && $0 restart \ - || exit 0 - ;; + is_running && $0 restart || exit 0 + ;; restart) echo -n "Restarting $DESC: " - start-stop-daemon --stop --quiet --pidfile \ - /var/run/$NAME.pid --exec $DAEMON - sleep 1 - start-stop-daemon --start --quiet --pidfile \ - /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS + do_stop + # the device is slow to shut-down + sleep 0.5 + do_start echo "$NAME." ;; + udev) + if [ "x$ACTION" = "xadd" ] ; then + load_uinput || true + wait_usr_mount || true + # it seems udev will not release a device if userspace is still + # connected + is_running && ( do_stop; sleep 0.5 ) + do_start + elif [ "x$ACTION" = "xremove" ] ; then + do_stop + else + echo "unknow udev action '$ACTION'" + exit 1 + + fi + ;; *) N=/etc/init.d/$NAME - # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 - echo "Usage: $N {start|stop|restart|force-reload}" >&2 + echo "Usage: $N {start|stop|restart|force-reload|udev}" >&2 exit 1 ;; esac diff --git a/debian/g15daemon.udev b/debian/g15daemon.udev new file mode 100644 index 0000000..81a564a --- /dev/null +++ b/debian/g15daemon.udev @@ -0,0 +1,21 @@ +# udev rule to start g15daemon when logitech g15 keyboards are attached +# +# Recognized devices from libg15-1.2.7/libg15.c +# + +# Logitech g11 -- extra keys, no LCD +SYSFS{idVendor}=="046d", SYSFS{idProduct}=="c225", RUN+="/etc/init.d/g15daemon udev" + +# Logitech G15 (blue) -- extra keys and LCD +SYSFS{idVendor}=="046d", SYSFS{idProduct}=="c222", RUN+="/etc/init.d/g15daemon udev" + +# Logitech G15 v2 (orange) -- extra keys and LCD +SYSFS{idVendor}=="046d", SYSFS{idProduct}=="c227", RUN+="/etc/init.d/g15daemon udev" + +# Logitech Z10 -- extra keys and LCD +SYSFS{idVendor}=="046d", SYSFS{idProduct}=="0a07", RUN+="/etc/init.d/g15daemon udev" + +# Logitech G15 Gamepanel -- extra keys and LCD +SYSFS{idVendor}=="046d", SYSFS{idProduct}=="c251", RUN+="/etc/init.d/g15daemon udev" + +