Содержание:

Сегодня я расскажу о двух полезных утилитах, которые порою меня выручают в самых неожиданных ситуациях. Это утилиты для управления окнами и мышью — wmctrl и xdotool.

Например, в одной из предыдущих статей, я использовал утилиту xdotool для того, чтобы эмулировать двойное нажатие левой кнопки мышки (для дополнительной клавиши, которая по умолчанию не поддерживалась в Linux). Применение этим утилитам можно придумать самое различное, но чтобы использовать их в повседневной работе — для начала надо знать об их существовании.

Каждая утилита имеет собственную справку — я сторонник того, чтобы пользователи никогда не принебрегали встроенными в программы справками и страницами man — но я выписал для каждой утилиты отдельные команды, которые считаю самыми полезными и востребованными в реальном применении. Но не забываем о: «man xdotool» и «man wmctrl» .

wmctrl

  • wmctrl -l

    Вывести список всех доступных сейчас окон

  • wmctrl -a <Имя_окна>

    Активировать указанное окно. Причем название окна не обязательно писать полностью, например для окна с названием «Терминал — login@pc: ~/cat/» достаточно написать: «wmctrl -a Терм«

  • wmctrl -c <Имя_окна>

    Закрыть указанное окно. Причем название окна не обязательно писать полностью, например для окна с названием «Терминал — login@pc: ~/cat/» достаточно написать: «wmctrl -a Терм«

  • wmctrl -r <Имя_окна> -e G,X,Y,W,H

    Переместить указанное окно и изменить его размер.
    G Притяжение окна к краям экрана (0 — как настроено в системе)
    X Координаты окна по оси X (от левого края окна) [-1 -не менять]
    Y Координаты окна по оси Y (от верхнего края окна) [-1 -не менять]
    W Высота окна в пикселах [-1 -не менять]
    H Ширина окна в пикселах [-1 -не менять]
    Например: wmctrl -r Терм -e 0,1,1,600,600 переместит окно терминала в левый верний угол и размер окна станет 600x600px (окно будет квадратным).

xdotool

  • xdotool getdisplaygeometry

    Возвращает текущее разрешение монитора в пикселах

  • xdotool getmouselocation

    Возвращает текущую позицию курсора мышки

  • xdotool click --repeat COUNT KEY

    Кликнуть KEY кнопкой мышки COUNT раз
    KEY: 1 — левая кнопка, 2 — средняя, 3 — правая, 4 — колесико вверх, 5 — колесико вниз.

  • xdotool mousemove X Y

    Переместить курсор мышки на позицию по X и Y (в пикселах)

  • xdotool getactivewindow

    Получить ID активного окна

Исходя из вышеописанного, давай для практики напишем простой скрипт, который будет сворачивать активное окно в маленький прямоугольник в верхней левой части экрана, а если одно окно уже свернуто в него, то поменяет местами текущее окно (сделав его маленьким) и развернет уже свернутое окно:

#!/bin/bash

touch ./.active_w
bw=$(cat ./.active_w)
active_window=$(xdotool getactivewindow)
[[ $bw != $active_window ]] && wmctrl -r $bw -i -e 0,1,200,800,600 && wmctrl -r $active_window -i -e 0,1,1,300,100 && wmctrl -a $bw -i
[[ $bw == $active_window ]] &&  wmctrl -r $active_window -i -e 0,1,1,300,100

echo $active_window > ./.active_w

Параметр «-i» в команде wmctrl означает, что мы будем обращаться к окну не по имени, а по id.
Теперь сохраним этот скрипт и повесим его на какую-либо комбинацию горячих клавиш.
Напоследок повторю, в данной статье приведены не все возможности утилит xdotool и wmctrl, полный список смотри с ключем «—help» или на страницах «man».