Категория > Новости > Десктоп под контролем. Управляем графическим софтом из консоли и скриптов - «Новости»

Десктоп под контролем. Управляем графическим софтом из консоли и скриптов - «Новости»


2-02-2018, 18:00. Автор: Эммануил

Содержание статьи

  • Xdotool
  • Xprop
  • Выводы
Linux-системы обладают очень широкими?возможностями для автоматизации рутинных действий. В других статьях мы уже показали массу самых разнообразных и странных примеров, включая возможность управления машиной с помощью календаря Google. Однако мы почти никогда не говорили об автоматизации и скриптовании графического софта. А ведь во многих случаях им тоже можно управлять из консоли и скриптов.

Wmctrl


Скрестить мощь скриптов и красоту графики поможет wmctrl. С его помощью можно изменять размер и расположение окон на экране, автоматизировать смену рабочих столов или использовать информацию об открытых окнах в других скриптах.


Основное преимущество wmctrl — полная?независимость от какого-либо оконного менеджера. Он взаимодействует с окнами посредством протокола EWMH/NetWM, который поддерживают большинство оконных менеджеров.


Не буду утомлять тебя рассказами о возможностях утилиты и ее флагах, а сразу покажу пример. Все знают о существовании Konsole и Tilda, специальных эмуляторах терминала, которые можно разворачивать и сворачивать нажатием клавиши. С помощью wmctrl ты можешь наделить такими?возможностями любой другой эмулятор терминала (например, Konsole из KDE).


#! /bin/bash

if [ `wmctrl -xl | grep -c Konsole` != 0 ]; then
if [ -f /tmp/.Konsole.add ]; then
wmctrl -r Konsole -b add,below
rm /tmp/.Konsole.add
else
wmctrl -r Konsole -b add,above
touch /tmp/.Konsole.add
fi
else
konsole
fi

Просто повесь его на клавиатурную комбинацию. Первое нажатие запустит терминал, а все последующие будут сворачивать/разворачивать его.


Эмулятор терминала не единственное применение wmctrl в рамках представленного выше скрипта. На самом деле вместо Konsole можно?подставить любую программу. А можно пойти дальше и задействовать в сценарии два окна, например браузер и мессенджер, таким образом, чтобы в определенный момент работы в интернете нажатием клавиш можно было заставить браузер подвинуться и освободить место под мессенджер и?кинуть взгляд на сообщения в чате.


Чтобы этого добиться, сначала нужно определить размеры окон обоих приложений в каждом из двух требующихся состояний. Делается это с помощью команды wmctrl -lG (перед этим растяни/сожми окна до нужных размеров):


$ wmctrl -lG
0x0500001b  0 0
55
1280 726  N/A Проект OpenNet - QupZilla
0x03000005  0 900  55
380  693  N/A Telegram (6)

$ wmctrl -lG
0x0500001b  0 0
55
900  693  N/A Проект OpenNet - QupZilla
0x03000005  0 900  55
380  693  N/A Telegram (6)

Опция -G добавляет четыре?дополнительных столбца в середине вывода команды. В них отражены данные о смещении окон по осям X и Y, а также их ширина и высота соответственно. В моем случае я сначала использовал данные в?точности, как их вывела команда. Но при подстановке в сценарий расположение окна QupZilla по оси Y по какой-то причине отличалось от расчетного, поэтому его пришлось немного подкорректировать вручную.


#!/bin/sh

if [ -f /tmp/.telega.half ]; then
wmctrl -r Telegram -e '0,900,55,380,693' -b add,below
wmctrl -r QupZilla -e '0,0,26,1280,726'
rm /tmp/.telega.half
else
wmctrl -r QupZilla -e '0,0,26,900,693'
wmctrl -r Telegram -e '0,900,55,380,693' -b remove,below
touch /tmp/.telega.half
fi

При первом запуске этот скрипт сожмет окно браузера с правой стороны и?покажет в освободившемся пространстве окно мессенджера. Второй запуск закроет мессенджер и вернет окно браузера в прежнее состояние.



Окна браузера и мессенджера?на одном экране
Источник новостиgoogle.com
Перейти обратно к новости