Как я могу найти расположение (на рабочем столе) окна в командной строке?

19

Я пытаюсь написать небольшой скрипт, который поможет управлять моими окнами с помощью сочетаний клавиш.

Для того, чтобы делать то, что я хочу, мне нужно найти текущее местоположение и размер «активного» (сфокусированного) окна. Под местоположением я подразумеваю координаты X, Y окна на рабочем столе, а под размером - высоту и ширину окна.

Есть ли утилита командной строки, которая может получить эту информацию?

TM.
источник

Ответы:

22

Вы можете получить всю информацию для текущего активного окна с помощью этой команды:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

или

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Просто проанализируйте выходные данные для нужных вам координат. Вот некоторые полезные команды при взаимодействии с окнами:

  • xwininfo предоставит вам относительную и абсолютную геометрию.
  • xprop расскажет вам много информации, в том числе, если окно активно, но не его геометрия
  • xdpyinfo также даст вам идентификатор активного окна, но без дополнительной информации.
  • wmctrl выдаст вам список информации об окнах и позволит вам выбрать активное окно для модификации, но не информацию.

Например, чтобы изменить заголовок активного окна на «Новое имя»:

wmctrl -r :ACTIVE: -N "New Name"

Или изменить положение активного окна:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Подумайте wmctrl, нужно ли вам просто что-то изменить, например, геометрию окна. Попробуйте использовать другие скрипты, упомянутые выше, только если вы хотите делать другие более сложные вещи.

Мартин Оуэнс -доктормо-
источник
1
Я просто хотел бы отметить, что я получаю разные результаты при запуске второй команды. Первый работает так, как я ожидал.
ТМ.
1
Я использую Arch, но это может помочь кому-то здесь в будущем. 1-й не работал для меня, 2-й не предоставил правильные размеры, возможно, из-за WM. Но комбинация двух сработала. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev
Благодарность! Но я согласен с первыми двумя комментариями. Вторая команда, xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)показывает мне дочернее окно (не имеет имени) моего терминала. Когда я просто xdpyinfo | grep focusполучаю focus: window 0x435b877, revert to Parent, 0x435b877 - это идентификатор окна, возвращаемого первой командой (которая работает для меня). Это на Trusty 14.04.1 LTS
nealmcb
8

С "xdotool" вы можете легко взаимодействовать с окнами, используя события клавиатуры или мыши.

Пример отправки CtrlCпоследовательности в активное окно:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Если вам действительно нужна позиция окна:

eval $(xdotool getmouselocation --shell); echo $X $Y

Для дополнительных действий / опций проверьте страницу справочника .

Жоау Пинту
источник
Интересно, но я просто получаю Error: Invalid key sequence 'ctrl-c'.
10