Różne małe ale czasami przydatne skrypty
Ostatnia zmiana: 2013-11-26 18:43

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

A w tym pliku:


    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

Zakładając że przycisk nazywa się 'wps'. Patrz poradnik o przyciskach.

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

o następującej zawartości


    #!/bin/sh
    UP=$(uci get -P /var/state/ network.wan.up)
    if [ "x$UP" = "x1" ]; then
        ifdown wan
    else
        ifup wan
    fi

A następnie jego wywołanie dodajemy do przycisku - patrz poradnik o przyciskach. Jeżeli używasz moich obrazów to w /etc/config/system wystarczy wykonać następujące polecenia:


    # 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 radiowej

mac80211



    # 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

o następującej zawartości


    #!/bin/sh
    if ! ping -q -c 5 -W 10 google.com > /dev/null; then
            (ifup wan) &
    fi

Skrypt pinguje google - jeżeli nie dostanie odpowiedzi przez 5s to wznawia połączenie na interfejsie wan.
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

Od tej pory co 10 minut nastąpi wywołanie skryptu.

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"
            ###############################################
                tu wpisz polecenie które ma się uruchomić
            ###############################################
            ;;
        remove)
            logger "Odlaczono /dev/$DEVICENAME"
            ;;
    esac

W zmiennych mamy informacje o zamontowanej partycji w danym katalogu; skrypt należy uzupełnić o własny kod który robi to co chcemy. Przykład - po włożeniu nośnika ma się na nim uruchomić minidlna (dane są ustawiane dynamicznie bez zapisu konfiguracji przez uci):


    #!/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
            kill -9 minidlnad 1>/dev/null 2>&1
            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

Uruchomienie procesu po zamontowaniu nośnika

(przy wykorzystanie block-mount): http://eko.one.pl/?p=openwrt-hdd#uruchamianieserwisuprzypodczeniudysku