Задача: нужно перезагружать Yota модем выступающего для организации клиентского Wifi интернета.

Дело в том, что буквально через некоторое время, Организуемый посредством Yota-устройства (Интернет-центр 990-730-0016R (Gemtek),Идентификационный номер модели: WLTFGR-102, Версия устройства: V01) начал отваливаться и только опытным путем (обновление прошивки не исправляет ситуацию) было установлена что только банальный физический либо программный выкл/вкл помогает лишь на время, но как системный администратор я хочу хоть немного разгрузить себя от рутины, поэтому решил пойти другим путем, посредством консоли моей рабочей системы Ubuntu 12.04.5 Desktop amd64 родился скрипт который просто в определенные координаты открытого окна настроек щелкает дабы пройтись по шагам перезагрузки через Webинтерфейс устройства. В итоге я получил рабочий скрипт. Навыки разработки которого пригодятся мне в будущем.

Функциональный интерфейс Yota-модема

 

На заметку: следует отключить восстановление сессии Firefox в случае быстрого закрытия основного окна, т. е. Восстановление после краха:

было:

Изменение поведения окна браузера 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 устройство.

Перезагрузка Yota-модема инициализирована

В моем случаем это координаты:

aollo@system:~$ xdotool mousemove 700 390;

aollo@system:~$ xdotool click 1

После нажатия программируемым способом на подтверждение от перезагрузке устройство будет перезагружено:

Yota-модем отправлен в перезагрузку

Отлично с действиями и как их адаптировать под свои задачи я показал.

Если допустим Вам по каким либо образом не понадобится больше использовать vncserver, то убить сессию 2 можно так:

aollo@system:~$ vncserver -kill :2

а запустить:

aollo@system:~$ vncserver :2

Из всего описанного в этой заметке можно также выделить, что можно создать специального пользователя в задачи которого будет заложено создание vnc сеанса и работа со скриптом по перезагрузке устройства таким радикальным способом.

Всеми шагами выше я решил поставленную перед собой задачу, хотя если признаться, что в свободное время решил пострадать развратом, а в моем случае любая практика в решении поставленных самому себе задач по большей части идет только на пользу. Это же наработки так, сказать на будущее. Шаги рассмотренные в этой заметки не универсальны, так что заметка будет пополнятся по мере нахождения нового способа решения. А пока я прощаюсь, до встречи, с уважением автор блога — ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru