Wmctrl пример использования.

Wmctrl пример использования.

https://t.me/sysadmins_articles

Скрестить мощь скриптов и красоту графики поможет 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 (перед этим растяните/сожмите окна до нужных размеров):

Опция -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


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

Управление программами из консоли Linux | Окна браузера и мессенджера на одном экран


Report Page