1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun### BEGIN INIT INFO 3*4882a593Smuzhiyun# Provides: triggerhappy 4*4882a593Smuzhiyun# Required-Start: $local_fs $remote_fs 5*4882a593Smuzhiyun# Required-Stop: $remote_fs 6*4882a593Smuzhiyun# Default-Start: 2 3 4 5 7*4882a593Smuzhiyun# Default-Stop: 0 1 6 8*4882a593Smuzhiyun# Short-Description: triggerhappy hotkey daemon 9*4882a593Smuzhiyun# Description: triggerhappy hotkey daemon 10*4882a593Smuzhiyun### END INIT INFO 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun# Author: Stefan Tomanek <stefan.tomanek+th@wertarbyte.de> 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunPATH=/sbin:/usr/sbin:/bin:/usr/bin 15*4882a593SmuzhiyunDESC="input event daemon" 16*4882a593SmuzhiyunNAME=thd 17*4882a593SmuzhiyunPNAME=triggerhappy 18*4882a593SmuzhiyunDAEMON=/usr/sbin/thd 19*4882a593SmuzhiyunPIDFILE=/var/run/$NAME.pid 20*4882a593SmuzhiyunDAEMON_ARGS="--daemon --triggers /etc/triggerhappy/triggers.d/ --socket /var/run/thd.socket --pidfile $PIDFILE --user root /dev/input/event*" 21*4882a593SmuzhiyunDAEMON_OPTS="--user root" 22*4882a593SmuzhiyunSCRIPTNAME=/etc/init.d/$PNAME 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun# Exit if the package is not installed 25*4882a593Smuzhiyun# [ -x $DAEMON ] || exit 0 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun# Read configuration variable file if it is present 28*4882a593Smuzhiyun[ -r /etc/default/$PNAME ] && . /etc/default/$PNAME 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun# Load the VERBOSE setting and other rcS variables 31*4882a593Smuzhiyun. /lib/init/vars.sh 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun# Define LSB log_* functions. 34*4882a593Smuzhiyun# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. 35*4882a593Smuzhiyun. /lib/lsb/init-functions 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun# 38*4882a593Smuzhiyun# Function that starts the daemon/service 39*4882a593Smuzhiyun# 40*4882a593Smuzhiyundo_start() 41*4882a593Smuzhiyun{ 42*4882a593Smuzhiyun # Return 43*4882a593Smuzhiyun # 0 if daemon has been started 44*4882a593Smuzhiyun # 1 if daemon was already running 45*4882a593Smuzhiyun # 2 if daemon could not be started 46*4882a593Smuzhiyun start-stop-daemon --start --quiet --pidfile $PIDFILE --exec /usr/sbin/thd --test > /dev/null \ 47*4882a593Smuzhiyun || return 1 48*4882a593Smuzhiyun start-stop-daemon --start --quiet --pidfile $PIDFILE --exec /usr/sbin/thd -- \ 49*4882a593Smuzhiyun $DAEMON_ARGS $DAEMON_OPTS \ 50*4882a593Smuzhiyun || return 2 51*4882a593Smuzhiyun} 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun# 54*4882a593Smuzhiyun# Function that stops the daemon/service 55*4882a593Smuzhiyun# 56*4882a593Smuzhiyundo_stop() 57*4882a593Smuzhiyun{ 58*4882a593Smuzhiyun # Return 59*4882a593Smuzhiyun # 0 if daemon has been stopped 60*4882a593Smuzhiyun # 1 if daemon was already stopped 61*4882a593Smuzhiyun # 2 if daemon could not be stopped 62*4882a593Smuzhiyun # other if a failure occurred 63*4882a593Smuzhiyun start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME 64*4882a593Smuzhiyun RETVAL="$?" 65*4882a593Smuzhiyun [ "$RETVAL" = 2 ] && return 2 66*4882a593Smuzhiyun # Many daemons don't delete their pidfiles when they exit. 67*4882a593Smuzhiyun rm -f $PIDFILE 68*4882a593Smuzhiyun return "$RETVAL" 69*4882a593Smuzhiyun} 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun# 72*4882a593Smuzhiyun# Function that sends a SIGHUP to the daemon/service 73*4882a593Smuzhiyun# 74*4882a593Smuzhiyundo_reload() { 75*4882a593Smuzhiyun # 76*4882a593Smuzhiyun # If the daemon can reload its configuration without 77*4882a593Smuzhiyun # restarting (for example, when it is sent a SIGHUP), 78*4882a593Smuzhiyun # then implement that here. 79*4882a593Smuzhiyun # 80*4882a593Smuzhiyun start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME 81*4882a593Smuzhiyun return 0 82*4882a593Smuzhiyun} 83*4882a593Smuzhiyun 84*4882a593Smuzhiyuncase "$1" in 85*4882a593Smuzhiyun start) 86*4882a593Smuzhiyun [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" 87*4882a593Smuzhiyun do_start 88*4882a593Smuzhiyun case "$?" in 89*4882a593Smuzhiyun 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 90*4882a593Smuzhiyun 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 91*4882a593Smuzhiyun esac 92*4882a593Smuzhiyun ;; 93*4882a593Smuzhiyun stop) 94*4882a593Smuzhiyun [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" 95*4882a593Smuzhiyun do_stop 96*4882a593Smuzhiyun case "$?" in 97*4882a593Smuzhiyun 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 98*4882a593Smuzhiyun 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 99*4882a593Smuzhiyun esac 100*4882a593Smuzhiyun ;; 101*4882a593Smuzhiyun status) 102*4882a593Smuzhiyun status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? 103*4882a593Smuzhiyun ;; 104*4882a593Smuzhiyun reload|force-reload) 105*4882a593Smuzhiyun log_daemon_msg "Reloading $DESC" "$NAME" 106*4882a593Smuzhiyun do_reload 107*4882a593Smuzhiyun log_end_msg $? 108*4882a593Smuzhiyun ;; 109*4882a593Smuzhiyun restart) 110*4882a593Smuzhiyun log_daemon_msg "Restarting $DESC" "$NAME" 111*4882a593Smuzhiyun do_stop 112*4882a593Smuzhiyun case "$?" in 113*4882a593Smuzhiyun 0|1) 114*4882a593Smuzhiyun do_start 115*4882a593Smuzhiyun case "$?" in 116*4882a593Smuzhiyun 0) log_end_msg 0 ;; 117*4882a593Smuzhiyun 1) log_end_msg 1 ;; # Old process is still running 118*4882a593Smuzhiyun *) log_end_msg 1 ;; # Failed to start 119*4882a593Smuzhiyun esac 120*4882a593Smuzhiyun ;; 121*4882a593Smuzhiyun *) 122*4882a593Smuzhiyun # Failed to stop 123*4882a593Smuzhiyun log_end_msg 1 124*4882a593Smuzhiyun ;; 125*4882a593Smuzhiyun esac 126*4882a593Smuzhiyun ;; 127*4882a593Smuzhiyun *) 128*4882a593Smuzhiyun echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2 129*4882a593Smuzhiyun exit 3 130*4882a593Smuzhiyun ;; 131*4882a593Smuzhiyunesac 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun: 134