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)
145 lines
3.2 KiB
Bash
145 lines
3.2 KiB
Bash
#! /bin/sh
|
|
|
|
### BEGIN INIT INFO
|
|
# Provides: g15daemon
|
|
# Required-Start: $local_fs
|
|
# 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
|
|
# Description: load deamon for Logitech G15 keyboard lcd display
|
|
### END INIT INFO
|
|
|
|
|
|
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
|
DAEMON=/usr/sbin/g15daemon
|
|
NAME=g15daemon
|
|
DESC=g15daemon
|
|
|
|
[ -x "$DAEMON" ] || exit 0
|
|
|
|
# Include g15daemon defaults if available
|
|
if [ -f /etc/default/g15daemon ] ; then
|
|
. /etc/default/g15daemon
|
|
fi
|
|
|
|
if [ "$SWITCH_KEY" = "MR" ]; then
|
|
DAEMON_OPTS="-s $DAEMON_OPTS"
|
|
fi
|
|
|
|
set -e
|
|
|
|
|
|
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
|
|
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 || echo -n ".../dev/input/uinput not found ..."
|
|
do_start
|
|
echo "$NAME."
|
|
;;
|
|
stop)
|
|
echo -n "Stopping $DESC: "
|
|
do_stop
|
|
echo "$NAME."
|
|
;;
|
|
#reload)
|
|
#
|
|
# If the daemon can reload its config files on the fly
|
|
# for example by sending it SIGHUP, do it here.
|
|
#
|
|
# If the daemon responds to changes in its config file
|
|
# directly anyway, make this a do-nothing entry.
|
|
#
|
|
# 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"
|
|
# option to the "reload" entry above. If not, "force-reload" is
|
|
# 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
|
|
is_running && $0 restart || exit 0
|
|
;;
|
|
restart)
|
|
echo -n "Restarting $DESC: "
|
|
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|force-reload|udev}" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|