OpenWrt - Przydatne skrypty
Różne małe ale czasami przydatne skryptyOstatnia zmiana: 2013-03-18 11:20
1. Włącz/wyłącz wifi pod przyciskiem
2. Wyłączenie wifi w nocy
3. Włączenie/wyłączenie połączenia z internetem przez przycisk
4. Lista połączonych klientów do AP
4.1. mac80211
4.2. Atheros (madwifi)
4.3. Broadcom (brcm)
5. Restart połączenia w przypadku braku internetu
6. Skrypt uruchamiany przy starcie systemu
7. Skrypt pokazujący status połączenia
8. Blokowanie użytkowników nie płacących
9. Uruchomienie polecenia z opóźnieniem
10. Uruchomienie procesu po zamontowaniu nośnika
Włącz/wyłącz wifi pod przyciskiem
# mkdir -p /etc/hotplug.d/button
# touch /etc/hotplug.d/button/01-wifitoggle
# chmod 755 /etc/hotplug.d/button/01-wifitoggle
if [ "$BUTTON" = "wps" ] ; then
if [ "$ACTION" = "pressed" ] ; then
SW=`uci -q get wireless.@wifi-device[0].disabled`
if [ $SW == '1' ]; then
uci set wireless.@wifi-device[0].disabled=0
else
uci set wireless.@wifi-device[0].disabled=1
fi
wifi
fi
fi
Wyłączenie wifi w nocy
Do tego celu można użyć crona. Wyłączamy np. o 23.00 a włączamy o 7 rano (do wykonania są poniższe polecenia):
# echo "0 23 * * * uci set wireless.@wifi-device[0].disabled=1; wifi" >> /etc/crontabs/root
# echo "0 7 * * * uci set wireless.@wifi-device[0].disabled=0; wifi" >> /etc/crontabs/root
# /etc/init.d/cron restart
Włączenie/wyłączenie połączenia z internetem przez przycisk
Tworzymy skrypt o nazwie polacz.sh
# touch /bin/polacz.sh
# chmod 755 /bin/polacz.sh
#!/bin/sh
UP=$(uci get -P /var/state/ network.wan.up)
if [ "x$UP" = "x1" ]; then
ifdown wan
else
ifup wan
fi
# uci add system button
# uci set system.@button[-1].button=wps
# uci set system.@button[-1].action=pressed
# uci set system.@button[-1].handler='/bin/polacz.sh'
# uci commit system
Lista połączonych klientów do AP
Polecenie zależy od używanego sterownika do karty radiowejmac80211
# iw dev wlan0 station dump
Atheros (madwifi)
# wlanconfig ath0 list sta
Broadcom (brcm)
# wl assoclist
Restart połączenia w przypadku braku internetu
Tworzymy skrypt o nazwie tester.sh
# touch /bin/tester.sh
# chmod 755 /bin/tester.sh
#!/bin/sh
if ! ping -q -c 5 -W 10 google.com > /dev/null; then
(ifup wan) &
fi
Następnie można dodać wywołanie tego skryptu do crona i uruchamiamy go:
# /etc/init.d/cron stop
# echo "*/10 * * * * /bin/tester.sh" >> /etc/crontabs/root
# /etc/init.d/cron enable
# /etc/init.d/cron start
Skrypt uruchamiany przy starcie systemu
Wystarczy dodać skrypty do /etc/rc.local, który wykonuje się po starcie systemu. Ostatnie polecenie w tym pliku musi być exit 0, wszystko po nim nie zostanie wykonane.Skrypt pokazujący status połączenia
Przeniesiony do osobnego dokumentu.Blokowanie użytkowników nie płacących
Przeniesiony do osobnego dokumentu.Uruchomienie polecenia z opóźnieniem
Jeżeli interesuje nas uruchomienie polecenia np. z opóźnieniem 20s po starcie systemu, wystarczy do pliku /etc/rc.local dodać jako pierwszą linię (w przykładzie uruchomienie transmission):
(sleep 20; /etc/init.d/transmission start) &
Uruchomienie procesu po zamontowaniu nośnika
Wkładamy pendrive i po jego zamontowaniu ma się uruchomić jakiś proces, np. transmission lub minidlna.Tworzymy skrypt o nazwie np. 99-mount w katalogu /etc/hotplug.d/block o następującej zawartości:
#!/bin/sh
case $ACTION in
add)
grep -q /dev/$DEVICENAME /proc/mounts || exit 0
DIR=$(awk '/^\/dev\/'$DEVICENAME'/ {print $2}' /proc/mounts)
logger "/dev/$DEVICENAME zmontowano w $DIR"
;;
remove)
logger "Odlaczono /dev/$DEVICENAME"
;;
esac
#!/bin/sh
case $ACTION in
add)
grep -q /dev/$DEVICENAME /proc/mounts || exit 0
DIR=$(awk '/^\/dev\/'$DEVICENAME'/ {print $2}' /proc/mounts)
/etc/init.d/minidlna stop
uci set minidlna.@minidlna[0].enabled=1
uci add_list minidlna.@minidlna[0].media_dir="$DIR"
uci set minidlna.@minidlna[0].db_dir="$DIR/_minidlna"
uci set minidlna.@minidlna[0].log_dir="$DIR/_minidlna"
/etc/init.d/minidlna start
uci revert minidlna
;;
remove)
/etc/init.d/minidlna stop
;;
esac