Содержание статьи
- Wmctrl
- Xdotool
- Xwininfo
- Xprop
- D-Bus
- Выводы
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
При первом запуске этот скрипт сожмет окно браузера с правой стороны и покажет в освободившемся пространстве окно мессенджера. Второй запуск закроет мессенджер и вернет окно браузера в прежнее состояние.
Продолжение статьи доступно только подписчикам
Cтатьи из последних выпусков журнала можно покупать отдельно только через два месяца после публикации. Чтобы читать эту статью, необходимо купить подписку.
Подпишись на журнал «Хакер» по выгодной цене!
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
1 год5890 р. Экономия 1400 рублей! |
1 месяц720 р. 25-30 статей в месяц |
Уже подписан?