#! /bin/sh load_lirc_modules() { MODULES_MISSING=false for mod in $*; do modprobe $mod 2> /dev/null || MODULES_MISSING=true done if $MODULES_MISSING; then echo "Unable to load LIRC kernel modules. Verify your" echo "selected kernel modules in /etc/lirc/hardware.conf" exit 0 fi } build_remote_args() { REMOTE_ARGS="$*" #For remote only detection support, we need #both REMOTE_DEVICE and TRANSMITTER_DEVICE undefined if [ -z "$REMOTE_DEVICE" ] && [ -z "$TRANSMITTER_DEVICE" ] && [ -c $dev ]; then REMOTE_DEVICE="$dev" fi #If we have a REMOTE_DEVICE or REMOTE_DRIVER defined (either because no devices #were defined, OR if we explicitly did), then populate REMOTE_ARGS if [ ! -z "$REMOTE_DEVICE" ] || [ ! -z "$REMOTE_DRIVER" ]; then if [ -n "$REMOTE_DEVICE" ] && [ "$REMOTE_DEVICE" != "none" ]; then REMOTE_ARGS="--device=$REMOTE_DEVICE $REMOTE_ARGS" fi if [ -n "$REMOTE_DRIVER" ] && [ "$REMOTE_DRIVER" != "none" ]; then REMOTE_ARGS="--driver=$REMOTE_DRIVER $REMOTE_ARGS" fi #Now, if we ALSO have a transmitter defined, add some args #To make the first lircd listen up if [ ! -z "$TRANSMITTER_DEVICE" ] || [ ! -z "$TRANSMITTER_DRIVER" ]; then REMOTE_ARGS="$REMOTE_ARGS --listen" fi REMOTE_ARGS="--output=$REMOTE_SOCKET.$$ $REMOTE_ARGS" fi echo $REMOTE_ARGS } in_kernel_support() { if [ -d /sys/class/rc ]; then for file in `find /sys/class/rc/*/ -name protocols`; do if [ "$1" = "disable" ]; then echo "lirc" > $file else echo "none" > $file for protocol in `cat $file`; do echo "+${protocol}" > $file done fi done fi } test -f /usr/sbin/lircd || exit 0 test -f /usr/sbin/lircmd || exit 0 START_LIRCMD=true START_LIRCD=true START_IREXEC=true . /etc/init.d/rc.functions if [ -f /etc/lirc/hardware.conf ];then . /etc/lirc/hardware.conf fi if [ ! -f /etc/lirc/lircd.conf ] || grep -q "^#UNCONFIGURED" /etc/lirc/lircd.conf; then if [ "$1" = "start" ]; then echo "No valid /etc/lirc/lircd.conf has been found." echo "Remote control support has been disabled." echo "Reconfigure LIRC or manually replace /etc/lirc/lircd.conf to enable." fi START_LIRCD=false START_LIRCMD=false START_IREXEC=false fi if [ ! -f /etc/lirc/lircmd.conf ] || grep -q "^#UNCONFIGURED" /etc/lirc/lircmd.conf; then START_LIRCMD=false fi if [ ! -f /etc/lirc/lircrc ] || grep -q "^#UNCONFIGURED" /etc/lirc/lircrc; then START_IREXEC=false fi #We need default socket locations OLD_SOCKET="/dev/lircd" if [ -z "$REMOTE_SOCKET" ]; then REMOTE_SOCKET="/var/run/lirc/lircd" fi if [ -z "$TRANSMITTER_SOCKET" ]; then TRANSMITTER_SOCKET="/var/run/lirc/lircd" #Now, if we ALSO have a remote defined, #change the default transmitter socket if [ ! -z "$REMOTE_DEVICE" ] || [ ! -z "$REMOTE_DRIVER" ]; then TRANSMITTER_SOCKET="${TRANSMITTER_SOCKET}1" fi fi case "$1" in start) if [ "$LOAD_MODULES" = "true" ] && [ "$START_LIRCD" = "true" ]; then load_lirc_modules $2 $REMOTE_MODULES $TRANSMITTER_MODULES $MODULES in_kernel_support "disable" fi if [ "$START_LIRCD" = "true" ]; then echo "Starting remote control daemon(s) : LIRC " REMOTE_LIRCD_ARGS=`build_remote_args $REMOTE_LIRCD_ARGS` TRANSMITTER_LIRCD_ARGS=`build_transmitter_args $TRANSMITTER_LIRCD_ARGS` #if we have a remote defined, it is primary process if [ ! -z "$REMOTE_LIRCD_ARGS" ]; then while [ ! -e /var/run/lirc/lircd.pid ]; do sleep 1; done exec /usr/bin/python /usr/bin/lircd2uinput & start-stop-daemon --start --quiet --oknodo --exec /usr/sbin/lircd -- $REMOTE_LIRCD_ARGS < /dev/null #now if we additionally have a transmitter defined, it is secondary process if [ ! -z "$TRANSMITTER_LIRCD_ARGS" ]; then /usr/sbin/lircd $TRANSMITTER_LIRCD_ARGS < /dev/null if [ -S "$TRANSMITTER_SOCKET" ]; then rm -f ${OLD_SOCKET}1 && ln -s $TRANSMITTER_SOCKET ${OLD_SOCKET}1 fi fi elif [ ! -z "$TRANSMITTER_LIRCD_ARGS" ]; then start-stop-daemon --start --quiet --oknodo --exec /usr/sbin/lircd -- $TRANSMITTER_LIRCD_ARGS < /dev/null if [ -S "$TRANSMITTER_SOCKET" -a "$OLD_SOCKET" != "$TRANSMITTER_SOCKET" ]; then rm -f $OLD_SOCKET && ln -s $TRANSMITTER_SOCKET $OLD_SOCKET fi fi fi if [ "$START_LIRCMD" = "true" ]; then echo "Starting remote control mouse daemon : LIRCMD " start-stop-daemon --start --quiet --oknodo --exec /usr/sbin/lircmd < /dev/null fi check_status if [ "$START_IREXEC" = "true" ]; then echo "Starting execution daemon: irexec" start-stop-daemon --start --quiet --oknodo --exec /usr/bin/irexec -- -d /etc/lirc/lircrc < /dev/null fi check_status ;; stop) in_kernel_support "enable" if [ "$START_IREXEC" = "true" ]; then echo "Stopping execution daemon: irexec" start-stop-daemon --stop --quiet --exec /usr/bin/irexec fi check_status if [ "$START_LIRCMD" = "true" ]; then echo "Stopping remote control mouse daemon: LIRCMD" start-stop-daemon --stop --quiet --exec /usr/sbin/lircmd fi check_status if [ "$START_LIRCD" = "true" ]; then echo "Stopping remote control daemon(s): LIRC" start-stop-daemon --stop --quiet --exec /usr/sbin/lircd [ -h "$OLD_SOCKET" ] && rm -f $OLD_SOCKET [ -h "${OLD_SOCKET}1" ] && rm -f ${OLD_SOCKET}1 fi check_status ;; reload|force-reload) if [ "$START_IREXEC" = "true" ]; then start-stop-daemon --stop --quiet --signal 1 --exec /usr/bin/irexec fi check_status if [ "$START_LIRCD" = "true" ]; then start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/lircd fi check_status if [ "$START_LIRCMD" = "true" ]; then start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/lircmd fi check_status ;; restart) $0 stop #passes parameter $2 which is possibly our udev paramater $0 start $2 ;; init) resume=1 halt=1 after=eventlircd ;; *) echo "Usage $0 {start|stop|reload|restart|force-reload}" >&2 exit 1 esac