Задача: нужно перезагружать Yota модем выступающего для организации клиентского Wifi интернета.
Дело в том, что буквально через некоторое время, Организуемый посредством Yota-устройства (Интернет-центр 990-730-0016R (Gemtek),Идентификационный номер модели: WLTFGR-102, Версия устройства: V01) начал отваливаться и только опытным путем (обновление прошивки не исправляет ситуацию) было установлена что только банальный физический либо программный выкл/вкл помогает лишь на время, но как системный администратор я хочу хоть немного разгрузить себя от рутины, поэтому решил пойти другим путем, посредством консоли моей рабочей системы Ubuntu 12.04.5 Desktop amd64 родился скрипт который просто в определенные координаты открытого окна настроек щелкает дабы пройтись по шагам перезагрузки через Web–интерфейс устройства. В итоге я получил рабочий скрипт. Навыки разработки которого пригодятся мне в будущем.
На заметку: следует отключить восстановление сессии Firefox в случае быстрого закрытия основного окна, т. е. Восстановление после краха:
было:
изменил на:
browser.sessionstore.resume_from_crash;false
В ходе изучения вопроса как реализовать задумку данной проблемы родился следующий скрипт:
aollo@system:~$ sudo apt-get install xdotool wmctrl -y
#!/bin/bash
firefox –new-window http://192.168.50.1
xdotool mousemove 1308 198
xdotool click 1
sleep 5
xdotool mousemove 708 453
xdotool key F5
sleep 5
xdotool click 1
Скрипт работает, но минус мне нужно было опытным путем вычленить координаты.
Узнать координаты текущего окна с курсором:
aollo@system:~$ xdotool getmouselocation
findclient: 69206198
x:833 y:553 screen:0 window:69206198
Либо так:
aollo@system:~$ eval $(xdotool getmouselocation --shell)
findclient: 29360133
aollo@system:~$ echo $X,$Y
1500,84
Ниже скрипт который обходит возможность использования координат:
#!/bin/bash
firefox --new-window http://192.168.50.1
sleep 3
wmctrl -r "Интерфейс конфигурации устройства" -e 0,1,1,950,600
xdotool mousemove 898 195
xdotool click 1
sleep 2
xdotool mousemove 707 453
sleep 2
xdotool click 1
sleep 2
xdotool key F5
Через команду в отдельной вкладке консоли опытным путем вычислял координаты необходимых мне элементов на странице: (после запуска этой команды у меня есть 5 секунд чтобы навести на нужную точку координаты которой я хочу получить.
aollo@system:~$ xdotool sleep 5 getmouselocation
findclient: 50897270
x:898 y:195 screen:0 window:50897270
aollo@system:~$ apt-cache search wmctrl
wmctrl – control an EWMH/NetWM compatible X Window Manager
Обнаружил ошибку при работе скрипта, если раньше не было свернуто окно Firefox то изначально оно запускается в полном режиме и соответственно координаты кликов не действительны.
Ниже новый скрипт и тоже работающий:
#!/bin/bash
# открываю новое окно с Web-адресом Yota модема
firefox --new-window http://192.168.50.1
sleep 1;
# Делаю активным открытой окно
wmctrl -a "Интерфейс конфигурации устройства - Mozilla Firefox"
sleep 1;
# Сворачиваю активное окно из полноэкранного режима
xdotool mousemove 54 51
sleep 1;
xdotool click 1
# Снова делаю активным открытое окно
wmctrl -a "Интерфейс конфигурации устройства - Mozilla Firefox"
sleep 1;
# Активное окно пристраиваю в левый верхний угол как точка отчета
wmctrl -r "Интерфейс конфигурации устройства - Mozilla Firefox" -e 0,1,1,950,600
sleep 1;
# Нажимаю на элемент меню "перезагрузка"
xdotool mousemove 898 195;
xdotool click 1;
sleep 1;
# Подтверждаю, что намерен перезагружать устройство
xdotool mousemove 707 453;
sleep 2;
xdotool click 1;
xdotool key F5 ;
# Ожидаю 60 секунд покуда устройство перезагружается
sleep 60;
# обновляю Web-страницу
xdotool key F5;
sleep 5;
# Закрываю Web-интерфейс управления Yota-устройством.
wmctrl -c "Интерфейс конфигурации устройства - Mozilla Firefox"
Как бывает с написанными скриптами они претерпеваю множеством последующих усовершенствований и устранением недоработок первого релиза, ниже как раз идет разбор (как я себе на тот момент это видел) проблем и пути их решения.
Новая задача:
Поднимаем VNC сервер на системе и до устанавливаю в систему утилиты посредством которых я буду эмулировать действия мыши при работе с Web-страницей:
aollo@system:~$ sudo apt-get install vnc4server -y
aollo@system:~$ cd /usr/bin/X11
aollo@system:/usr/bin/X11$ ./vncserver
You will require a password to access your desktops.
Password: 712mbddr@
Verify: 712mbddr@
Password too long – only the first 8 characters will be used
New ‘system:1 (aollo)’ desktop is system:1
Creating default startup script /home/aollo/.vnc/xstartup
Starting applications specified in /home/aollo/.vnc/xstartup
Log file is /home/aollo/.vnc/system:1.log
aollo@system:/usr/bin/X11$ cd ~/
aollo@system:~$ nano .vnc/xstartup
#!/bin/sh
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
# ниже путь до скрипта действия которого значатся как инициализация перезагрузки
/etc/yota
Сохраняем внесенные изменения.
Теперь создаем скрипт перезагрузки:
aollo@system:~$ sudo touch /etc/yota
aollo@system:~$ sudo chown aollo /etc/yota
aollo@system:~$ sudo chmod +x /etc/yota
aollo@system:~$ nano /etc/yota
# временные промежутки sleep выставляются опытным путем.
#!/bin/bash
export DISPLAY=:2
firefox -new-window http://192.168.50.1 -width 1024 -height 768;
sleep 3;
# Делаю активным открытой окно
wmctrl -a "Интерфейс конфигурации устройства - Mozilla Firefox";
sleep 3;
#Переходим на Дополнительно
xdotool mousemove 800 130
sleep 3;
# Нажимаю на элемент меню "перезагрузка"
sleep 2;
xdotool mousemove 900 130;
sleep 1;
# Подтверждаю, что намерен перезагружать устройство
xdotool mousemove 700 390;
sleep 1;
xdotool click 1;
xdotool key F5 ;
# Ожидаю 60 секунд покуда устройство перезагружается
sleep 60;
# обновляю Web-страницу
xdotool key F5;
sleep 5;
# Закрываю Web-интерфейс управления Yota-устройством.
wmctrl -c "Интерфейс конфигурации устройства - Mozilla Firefox";
Сохраняю внесенные изменения.
Теперь создаю обработчик для данного скрипта чтобы он запускал скрипт по кругу минут так эдак 30 к примеру:
#!/bin/bash
while [1 = 1]
do
export DISPLAY=:2
firefox -new-window http://192.168.50.1 -width 1024 -height 768;
sleep 3;
# Делаю активным открытой окно
wmctrl -a "Интерфейс конфигурации устройства - Mozilla Firefox";
sleep 3;
#Переходим на Дополнительно
xdotool mousemove 800 130
sleep 3;
# Нажимаю на элемент меню "перезагрузка"
sleep 2;
xdotool mousemove 900 130;
sleep 1;
# Подтверждаю, что намерен перезагружать устройство
xdotool mousemove 700 390;
sleep 1;
xdotool click 1;
xdotool key F5 ;
# Ожидаю 60 секунд покуда устройство перезагружается
sleep 60;
# обновляю Web-страницу
xdotool key F5;
# Ждем 30 минут, закрываем текущее окно и после скрипт запускается заново
sleep 1800;
# Закрываю Web-интерфейс управления Yota-устройством.
wmctrl -c "Интерфейс конфигурации устройства - Mozilla Firefox";
done
после чего запускаю клиент remmina и настраиваю подключение по VNC на этот порт, этим я добиваюсь что вижу поднятый сеанс в котором начал работать скрипт /etc/yota, чтобы выявить точные координаты местоположения элемента «ПЕРЕЗАГРУЗКА»
рядом открываю в еще один Terminal нажатием клавиш Ctrl + Alt + T и произвожу действия по активации посылаемых команд во второй терминал на котором у меня запущен vnc сервер: (делается это так)
aollo@system:~$ DISPLAY=:2
aollo@system:~$ export DISPLAY=:2
а дальше используя команду определяю опытным путем координаты где находит ajax функция по инициализации перезагрузки
aollo@system:~$ xdotool mousemove 900 130;
далее нажимаю на вычисленную координату
aollo@system:~$ xdotool click 1
после мне точно таким же образом нужно выяснить координату подтверждения, что я действительно хочу перезагрузить Yota устройство.
В моем случаем это координаты:
aollo@system:~$ xdotool mousemove 700 390;
aollo@system:~$ xdotool click 1
После нажатия программируемым способом на подтверждение от перезагрузке устройство будет перезагружено:
Отлично с действиями и как их адаптировать под свои задачи я показал.
Если допустим Вам по каким либо образом не понадобится больше использовать vncserver, то убить сессию 2 можно так:
aollo@system:~$ vncserver -kill :2
а запустить:
aollo@system:~$ vncserver :2
Из всего описанного в этой заметке можно также выделить, что можно создать специального пользователя в задачи которого будет заложено создание vnc сеанса и работа со скриптом по перезагрузке устройства таким радикальным способом.
Всеми шагами выше я решил поставленную перед собой задачу, хотя если признаться, что в свободное время решил пострадать развратом, а в моем случае любая практика в решении поставленных самому себе задач по большей части идет только на пользу. Это же наработки так, сказать на будущее. Шаги рассмотренные в этой заметки не универсальны, так что заметка будет пополнятся по мере нахождения нового способа решения. А пока я прощаюсь, до встречи, с уважением автор блога — ekzorchik.