rfkilld

An rfkill daemon, which runs scripts according to rfkill events.
git clone git://r-36.net/rfkilld
Log | Files | Refs | LICENSE

commit 3e475d9f0d2322e6a31dd70f4c1416e79a41aa76
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sat, 26 Feb 2011 17:59:27 +0100

Initial commit of rfkilld.

Diffstat:
LICENSE | 21+++++++++++++++++++++
Makefile | 29+++++++++++++++++++++++++++++
README.md | 0
bin/rfkilld | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
config.mk | 9+++++++++
5 files changed, 155 insertions(+), 0 deletions(-)

diff --git a/LICENSE b/LICENSE @@ -0,0 +1,21 @@ +MIT/X Consortium License + +© 2011 Christoph Lohmann <20h@r-36.net> + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/Makefile b/Makefile @@ -0,0 +1,29 @@ +# rfkilld - rfkill daemon +# See LICENSE file for copyright and license details. + +include config.mk + +dist: + @echo creating dist tarball + @mkdir -p rfkilld-${VERSION} + @cp -R LICENSE README.md Makefile config.mk \ + bin etc rfkilld-${VERSION} + @tar -cf rfkilld-${VERSION}.tar rfkilld-${VERSION} + @gzip rfkilld-${VERSION}.tar + @rm -rf rfkilld-${VERSION} + +install: + @echo installing rfkilld script to ${DESTDIR}${PREFIX}/bin + @cp bin/rfkilld ${DESTDIR}${PREFIX}/bin + @chmod 755 ${DESTDIR}${PREFIX}/bin/rfkilld + @echo installing etc files into ${DESTDIR}/etc/rfkilld + @mkdir -p ${DESTDIR}/etc/rfkilld + @cp -R etc/rfkilld ${DESTDIR}/etc/rfkilld + +uninstall: + @echo removing rfkilld script from ${DESTDIR}${PREFIX}/bin + @rm -f ${DESTDIR}${PREFIX}/bin/rfkilld + @echo removing etc files from ${DESTDIR}/etc/rfkilld + @rm -rf ${DESTDIR}/etc/rfkilld + +.PHONY: dist install uninstall diff --git a/README.md b/README.md diff --git a/bin/rfkilld b/bin/rfkilld @@ -0,0 +1,96 @@ +#!/bin/sh + +usage() { + echo "usage: `basename $1` [-hbl] [-p pidfile] [-e etcdir] [-b]" +} + +UDEVMONITORCMD="/usr/bin/nlmon -p -k" +ETCDIR="/etc/rfkilld" +PIDFILE="/var/run/rfkilld.pid" +dobackground=0 +dodebug=0 +dolog=0 + +while getopts "ldp:e:" opt; +do + case $opt in + d) + dodebug=1 + ;; + p) + PIDFILE="$OPTARG" + ;; + e) + ETCDIR="$OPTARG" + ;; + l) + dolog=1 + ;; + *) + usage $0 + exit 1 + ;; + esac +done +shift $(($OPTIND - 1)) + +debugcmd="" +if [ $dodebug -eq 1 ]; +then + debugcmd="-d" + set -x +fi + +echo $$ > $PIDFILE 2>&1 >/dev/null +trap "[ -e $PIDFILE ] && rm $PIDFILE; exit 0;" 2 3 6 9 15 + +name= +type= +state= + +$UDEVMONITORCMD | \ +while read status +do + [[ "$status" =~ ^RFKILL_NAME=(.*)$ ]] \ + && name="${BASH_REMATCH[1]}" + [[ "$status" =~ ^RFKILL_TYPE=(.*)$ ]] \ + && type="${BASH_REMATCH[1]}" + [[ "$status" =~ ^RFKILL_STATE=(.*)$ ]] \ + && state="${BASH_REMATCH[1]}" + + if [ "$status" == "" ]; + then + if [ "$name" == "" ] || [ "$type" == "" ] \ + || [ "$state" == "" ]; + then + continue + fi + + [ $dodebug -eq 1 ] \ + && logger -t rfkilld "req $name $type $state" + + if [ -x $ETCDIR/$name.sh ]; + then + $ETCDIR/$name.sh $state 2>&1 >/dev/null & + + [ $dolog -eq 1 ] \ + && logger -t rfkilld "ran $name.sh $state" + fi + + if [ -x $ETCDIR/$type.sh ]; + then + $ETCDIR/$type.sh $state $name 2>&1 >/dev/null & + + [ $dolog -eq 1 ] \ + && logger -t rfkilld \ + "ran $type.sh $state $name" + fi + + name= + type= + state= + fi +done + +exit 0 + diff --git a/config.mk b/config.mk @@ -0,0 +1,9 @@ +# rfkilld version +VERSION = 0.2 + +# Customize below to fit your system + +# paths +PREFIX = /usr +MANPREFIX = ${PREFIX}/share/man +