Следующая новость
Предыдущая новость

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

02.02.2018 13:25
Десктоп под контролем. Управляем графическим софтом из консоли и скриптов

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

  • 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 статей в месяц

Уже подписан?

Источник

Последние новости