9112 (9112) wrote in ru_shell,
9112
9112
ru_shell

обработчик кнопки вкл/выкл wifi

столкнулся с задачей подвязать на имеющемся asus eeepc s101h кнопку включения выключения wifi. в первую очередь была цель эргономики - приходя домой с работы и из дома на работу, каждый раз не рестартить wlan0 дабы изменить точку доступа. найденные примеры в интернете мне не особо понравились а некоторые попросту отказывались рабоать, и поэтому вчера вечером решил все-таки сам написать простенький скрипт. он вызывается acpid при появлении события на указанного в default.sh. скрипт полностью логирует все действия. для своей работы использует дополнительный файл, местом хранения которого было выбрано /var/run/
скрипт полностью комментирован, по сему под себя переделать будет элементарно. так же желающие смог легко выкинуть ненужные логи.

#!/bin/sh
#скрипт выполняет действия по нажатию кнопки вкл/выкл wifi адаптера, а так же ведет логи в /var/log/wifi.log.
#скрипт использует файл /var/run/wifi.pid
/etc/acpi/default.sh нужно указать, что по событию выполняем /etc/init.d/wifi toggle. тоесть данный скрипт, который в /etc/init.d/ и положите, назвав его wifi.
wifi_on() {
/etc/init.d/net.wlan0 start
}
wifi_off() {
/etc/init.d/net.wlan0 stop
}
case $1 in
start)
wifi_on
;;
stop)
wifi_off
;;
toggle)
sleep 2;
echo `date +%d/%m/%Y" "%H:%M:%S`" status pid: "`cat /var/run/wifi.pid`";">> /var/log/wifi.log;
STAT=`cat /var/run/wifi.pid`
#проверяем статус wifi
if [ "$STAT" = "1" ];
#если wifi включен. выключаем его. все сопровождаем логами.
then
{
echo `date +%d/%m/%Y" "%H:%M:%S`" wifi switching_off (status pid: "`cat /var/run/wifi.pid`");">> /var/log/wifi.log;
wifi_off;
echo "0" > /var/run/wifi.pid
echo `date +%d/%m/%Y" "%H:%M:%S`" wifi is off (status pid: "`cat /var/run/wifi.pid`");">> /var/log/wifi.log;
}
#если выключен. проверяем состояние адаптера. если он выключен(состояние не равно 1), говорим что делать так не хорошо. изменений не производим.
else
{
sleep 3;
if [ `cat /sys/class/rfkill/rfkill0/state` != "1" ];
then
{
echo `date +%d/%m/%Y" "%H:%M:%S`" wifi hardware is down - wifi is not swinching_on (status pid: "`cat /var/run/wifi.pid`");">> /var/log/wifi.log;
echo `date +%d/%m/%Y" "%H:%M:%S`" wifi is off (status pid: "`cat /var/run/wifi.pid`");">> /var/log/wifi.log;
}
коли адаптер включен, включаем wifi в системе.
else
{
echo `date +%d/%m/%Y" "%H:%M:%S`" wifi switching_on (status pid: "`cat /var/run/wifi.pid`");">> /var/log/wifi.log;
wifi_on;
echo "1" > /var/run/wifi.pid
sleep 3;
#проверяем, если при включении wifi в системе, произошел сбой - ругаемся об этом в лог, и пишем в pid что все-таки wifi is off =) если без сбоев - говорим, что все хорошо.
if [ `cat /sys/class/rfkill/rfkill0/state` != "1" ];
then
{
echo `date +%d/%m/%Y" "%H:%M:%S`" wifi switching_on ERROR! please look other logs! (status pid: "`cat /var/run/wifi.pid`");">> /var/log/wifi.log;
echo "0" > /var/run/wifi.pid;
echo `date +%d/%m/%Y" "%H:%M:%S`" wifi is off (status pid: "`cat /var/run/wifi.pid`");">> /var/log/wifi.log;
}
else
echo `date +%d/%m/%Y" "%H:%M:%S`" wifi is on (status pid: "`cat /var/run/wifi.pid`");">> /var/log/wifi.log;
fi
}
fi
}
fi
;;
esac
#сразу оговорюсь - в скрипте допущена возможность такой ситуации, что вы включили адаптер, wifi, но точку он не нашел, и через некоторое время статус адаптера вывалится в "0", или если адаптер включен, а wifi оказался выключен, и скрипт при последующем запуске будет думать что у нас все плохо, адаптер выключен, а мы нагло пытаемся включить wifi(ибо статус у адаптера будет значится "0"). все не так :) поскольку сей скрипт завязан на кнопку вкл/выкл адаптера, статусы вместе с этим будут меняться на нужные нам, и вышеописанной ситуации у вас не возникнет :) ну или по крайней мере не должно возникнуть :D


с радостью приму интересные мысли для поправки/доработки сего мелкого но полезного изделия =)
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 5 comments