Завдання: потрібно перезавантажувати Yota модем виступає для організації клієнтського Wifi інтернету.
Справа в тому, що буквально через деякий час, яку організує за допомогою Yota-пристрої (Інтернет-центр 990-730-0016R (Gemtek), Ідентифікаційний номер моделі: WLTFGR-102, Версія пристрою: V01) почав відвалюватися і тільки досвідченим шляхом (оновлення прошивки не виправляє ситуацію) було встановлено що тільки банальний фізичний або програмний викл / вкл допомагає лише на час, але як системний адміністратор я хочу хоч трохи розвантажити себе від рутини, тому вирішив піти іншим шляхом, за допомогою консолі моєї робочої системи Ubuntu 12.04 .5 Desktop amd64 народився крипт який просто в певні координати відкритого вікна налаштувань клацає щоб пройтися по кроках перезавантаження через Web - інтерфейс пристрою. У підсумку я отримав робочий скрипт. Навички розробки якого стануть в нагоді мені в майбутньому.
На замітку: слід відключити відновлення сесії Firefox в разі швидкого закриття основного вікна, т. Е. Відновлення після краху:
В ході вивчення питання як реалізувати задум даної проблеми народився наступний скрипт:
xdotool mousemove 1308 198
xdotool click 1
xdotool mousemove 708 453
xdotool click 1
Скрипт працює, але мінус мені потрібно було дослідним шляхом виокремити координати.
Дізнатися координати поточного вікна з курсором:
x: 833 y: 553 screen: 0 window: 69206198
$ Eval $ (xdotool getmouselocation --shell)
Нижче скрипт який обходить можливість використання координат:
wmctrl -r "Інтерфейс конфігурації пристрою" -e 0,1,1,950,600
xdotool mousemove 898 195
xdotool click 1
xdotool mousemove 707 453
xdotool click 1
Через команду в окремій вкладці консолі досвідченим шляхом обчислював координати необхідних мені елементів на сторінці: (після запуску цієї команди у мене є 5 секунд щоб навести на потрібну точку координати якої я хочу отримати.
$ Xdotool sleep 5 getmouselocation
x: 898 y: 195 screen: 0 window: 50897270
$ Apt-cache search wmctrl
wmctrl - control an EWMH / NetWM compatible X Window Manager
Виявив помилку при роботі скрипта, якщо раніше не було згорнуто вікно Firefox то спочатку воно запускається в повному режимі і відповідно координати кліків не дійсні.
Нижче новий скрипт і теж працює:
# Роблю активним відкритої вікно
wmctrl -a "Інтерфейс конфігурації пристрою - Mozilla Firefox"
# Повертаю активне вікно з повноекранного режиму
xdotool mousemove 54 51
xdotool click 1
# Знову роблю активним відкрите вікно
wmctrl -a "Інтерфейс конфігурації пристрою - Mozilla Firefox"
# Активне вікно прилаштовують в лівий верхній кут як точка звіту
wmctrl -r "Інтерфейс конфігурації пристрою - Mozilla Firefox" -e 0,1,1,950,600
# Натискаю на елемент меню "перезавантаження"
xdotool mousemove 898 195;
xdotool click 1;
# Підтверджую, що має намір перезавантажувати пристрій
xdotool mousemove 707 453;
xdotool click 1;
# Очікую 60 секунд поки пристрій перезавантажується
# Закриваю Web-інтерфейс управління Yota-пристроєм.
wmctrl -c "Інтерфейс конфігурації пристрою - Mozilla Firefox"
Як буває з написаними скриптами вони зазнає безліч наступних удосконалень і усуненням недоробок першого релізу, нижче як раз йде розбір (як я собі на той момент це бачив) проблем і шляхи їх вирішення.
Піднімаємо VNC сервер на системі і до встановлюю в систему утиліти за допомогою яких я буду емулювати дії миші при роботі з Web-сторінки:
$ Sudo apt-get install vnc4server -y
You will require a password to access your desktops.
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
[-r $ HOME / .Xresources] xrdb $ HOME / .Xresources
# Нижче шлях до скрипта дії якого значаться як ініціалізація перезавантаження
Зберігаємо внесені зміни.
Тепер створюємо скрипт перезавантаження:
$ Sudo touch / etc / yota
$ Sudo chown aollo / etc / yota
$ Sudo chmod + x / etc / yota
# Тимчасові проміжки sleep виставляються дослідним шляхом.
# Роблю активним відкритої вікно
wmctrl -a "Інтерфейс конфігурації пристрою - Mozilla Firefox";
# Переходимо на Додатково
xdotool mousemove -800 130
# Натискаю на елемент меню "перезавантаження"
xdotool mousemove 900 130;
# Підтверджую, що має намір перезавантажувати пристрій
xdotool mousemove 700 390;
xdotool click 1;
# Очікую 60 секунд поки пристрій перезавантажується
# Закриваю Web-інтерфейс управління Yota-пристроєм.
wmctrl -c "Інтерфейс конфігурації пристрою - Mozilla Firefox";
Зберігаю внесені зміни.
Тепер створюю обробник для даного скрипта щоб він запускав скрипт по колу хвилин так так 30 наприклад:
# Роблю активним відкритої вікно
wmctrl -a "Інтерфейс конфігурації пристрою - Mozilla Firefox";
# Переходимо на Додатково
xdotool mousemove -800 130
# Натискаю на елемент меню "перезавантаження"
xdotool mousemove 900 130;
# Підтверджую, що має намір перезавантажувати пристрій
xdotool mousemove 700 390;
xdotool click 1;
# Очікую 60 секунд поки пристрій перезавантажується
# Чекаємо 30 хвилин, закриваємо поточне вікно і після скрипт запускається заново
# Закриваю Web-інтерфейс управління Yota-пристроєм.
wmctrl -c "Інтерфейс конфігурації пристрою - Mozilla Firefox";
після чого запускаю клієнт remmina і налаштовую підключення по VNC на цей порт, цим я добиваюся що бачу піднятий сеанс в якому почав працювати скрипт / etc / yota. щоб виявити точні координати місця розташування елемента «ПЕРЕЗАВАНТАЖЕННЯ»
поруч відкриваю в ще один Terminal натисканням клавіш Ctrl + Alt + T і виробляю дії по активації посилаються команд у другій термінал на якому у мене запущений vnc сервер: (робиться це так)
а далі використовуючи команду визначаю досвідченим шляхом координати де знаходить ajax функція по ініціалізації перезавантаження
$ Xdotool mousemove 900 130;
далі натискаю на обчислену координату
$ Xdotool click 1
після мені точно таким же чином потрібно з'ясувати координату підтвердження, що я дійсно хочу перезавантажити Yota пристрій.
У моєму випадком це координати:
$ Xdotool mousemove 700 390;
$ Xdotool click 1
Після натискання програмованим способом на підтвердження від перезавантаження пристрій буде перезавантажений:
На відміну від діями і як їх адаптувати під свої завдання я показав.
Якщо припустимо Вам по якимось чином не знадобиться більше використовувати vncserver. то вбити сесію 2 можна так:
$ Vncserver -kill: 2
З усього описаного в цій замітці можна також виділити, що можна створити спеціального користувача в завдання якого закладено створення vnc сеансу і робота зі скриптом з перезавантаження пристрою таким радикальним способом.