Как манипулировать окном в Linux

Я программировал на Linux в течение многих лет, но не слишком много знаю в области отображения. Теперь меня попросили написать отдельный процесс, который будет отслеживать, какое окно (вероятно, не окно, созданное моим процессом) сфокусировано пользователем, и выполнять некоторые простые манипуляции, такие как перемещение и изменение размера.

Является ли это возможным? Есть ли общий способ добиться этого? Может ли кто-нибудь дать подсказку, на которую я могу посмотреть? Спасибо!

2 ответа

Решение

Используйте xdotool. Он может эмулировать нажатия клавиш, действия мыши, находить активные окна и т. Д.

Пример: выполните эту команду в вашем (не развернутом) окне терминала, и она будет прыгать на 10 пикселей вниз и вправо:

xdotool windowmove --relative $(xdotool getwindowfocus) 10 10

Он должен быть доступен в большинстве дистрибутивов, т.е. sudo apt-get install xdotool или аналогичный для других менеджеров пакетов.

По сути это система XWindow, которая делает все это. Однако вы можете контролировать многое, используя простые утилиты. Например, если я хочу изменить заголовок окна VLC, я могу сделать это так:

# this will ask me to point to a window and I will point to VLC player
$ xwininfo -all | grep 'xwininfo: Window id:'
xwininfo: Window id: 0x2000011 (has no name)

Вот 0x2000011 это идентификатор окна VLC Player, работающего в моей системе. Мы можем использовать это окно, чтобы получить или установить свойства. Для этого мы можем использовать xprop полезность:

for p in _NET_WM_VISIBLE_NAME _NET_WM_NAME; \
   do xprop -id 0x2000011 -format $p 8s -set $p "MyVLC"; done

Это изменит заголовок окна VLC Player на MyVLC.

Хотя это то, что xdotool Также негласно, эти команды довольно низкого уровня, и, скорее всего, будут установлены по умолчанию.

Рекомендации:

Другие вопросы по тегам