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. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»