~upstart-devel/upstart/upstart-jobs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#! /bin/sh

### BEGIN INIT INFO
# Provides:          g15daemon
# Required-Start:    $syslog $local_fs
# Required-Stop:     $syslog $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

if [ "$G15DEBUG" = "on" ]; then

log() {
    logger -p daemon.debug -t g15 -- "$*"
}
else

log() {
    true
}

fi




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 1
	do_start
	echo "$NAME."
	;;
  udev)
	log "calling g15 udev; action: $ACTION, product $PRODUCT"
	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 1 )
	    do_start
	elif [ "x$ACTION" = "xremove" ] ; then
	    do_stop
	else
	    echo "unknow udev action '$ACTION'"
	    exit 1

	fi
	;;
  shared-udev)
        # some devices share usb also for audio, which causes some spourios
        # udev messages.
        log "calling g15 shared-dev; action: $ACTION, product $PRODUCT"
        if [ "x$ACTION" = "xadd" ] ; then
            load_uinput || true
            wait_usr_mount || true
            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