Устанавливаем модуль ядра для работы с кнопками, создаём папку для скриптов кнопок и создаём основной скрипт обработки нажатий кнопки.
opkg update && opkg install kmod-button-hotplug
mkdir -p /etc/hotplug.d/button
cat << "EOF" > /etc/hotplug.d/button/00-button
source /lib/functions.sh
do_button () {
local button
local action
local handler
local min
local max
config_get button "${1}" button
config_get action "${1}" action
config_get handler "${1}" handler
config_get min "${1}" min
config_get max "${1}" max
[ "${ACTION}" = "${action}" -a "${BUTTON}" = "${button}" -a -n "${handler}" ] && {
[ -z "${min}" -o -z "${max}" ] && eval ${handler}
[ -n "${min}" -a -n "${max}" ] && {
[ "${min}" -le "${SEEN}" -a "${max}" -ge "${SEEN}" ] && eval ${handler}
}
}
}
config_load system
config_foreach do_button button
EOF
chmod 755 /etc/hotplug.d/button/00-button
Он проверяет, если сервис работает, то выключает его, если сервис выключен - то включает его.
cat << "EOF" > /etc/toggle_service.sh
SERVICE_NAME="clash"
check_service_status() {
/etc/init.d/$SERVICE_NAME status | grep -q "running"
}
if check_service_status; then
echo "$SERVICE_NAME is running. Stopping it..."
/etc/init.d/$SERVICE_NAME stop
/etc/init.d/$SERVICE_NAME disable
else
echo "$SERVICE_NAME is not running. Starting it..."
/etc/init.d/$SERVICE_NAME enable
/etc/init.d/$SERVICE_NAME start
fi
EOF
chmod 755 /etc/toggle_service.sh
uci add system button
uci set system.@button[-1].button="BTN_9"
uci set system.@button[-1].action="pressed"
uci set system.@button[-1].handler="/etc/toggle_service.sh"
uci commit system
В handler задаётся любая команда или скрипт, который должен исполниться, если action="pressed"
- кнопка нажата (утоплена).
action="released"
- кнопку отпустили.
В фирменной оболочке gl.inet меню переключателей лежит в /etc/gl-switch.d/
nano /etc/gl-switch.d/clash.sh
Сам скрипт:
#!/bin/sh
action=$1
if [ "$action" = "on" ];then
service clash enable && service clash start
fi
if [ "$action" = "off" ];then
service clash stop && service clash disable
fi
sleep 5
Выдаём права на исполнение:
chmod 755 /etc/gl-switch.d/clash.sh
Переключатель работает как одна BTN_0
кнопка в состоянии pressed
(положение влево с точкой) и released
(положение вправо)