Как манипулировать окном в 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
Также негласно, эти команды довольно низкого уровня, и, скорее всего, будут установлены по умолчанию.
Рекомендации: