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

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

Wmctrl

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

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

Не буду утомлять тебя рассказами о возможностях утилиты и ее флагах, а сразу покажу пример. Все знают о существовании Yakuake и 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

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

Окна браузера и мессенджера на одном экране
Окна браузера и мессенджера на одном экране

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


2 комментария

  1. Нездий

    02.02.2018 at 17:38

    Спасибо за статью. А что за нижнюю панель использует автор? Уж больно приглянулась

Оставить мнение

Check Also

Ugears. Новые модели подвижных конструкторов из дерева

Услышав слова «деревянный конструктор», ты, наверное, представляешь себе этакий Lego для с…