Вопрос или проблема
Мне нужно решение для получения информации о текущем активном (фокусированном) окне на рабочем столе Gnome 2. Меня в основном интересует процесс, который запускает это окно, и заголовок окна.
Это возможно?
РЕШЕНИЕ:
Получение заголовка окна:
xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1
Получение имени процесса:
ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'
или:
cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm
Это так просто:
xdotool getactivewindow getwindowname
Удачи, надеюсь, это сработает для вас!
Вы можете использовать xdotool, универсальный инструмент автоматизации окон X.
focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")
(Я не знаю, в чем разница между фокусированным и активным.)
(Я думал, что wmctrl может это сделать, но, похоже, нет.)
Проще (по моему мнению), чем решение автора вопроса (т.е. без ps
, grep
и awk
), чтобы получить имя процесса:
cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm
Или, если вам нужен конец строки:
echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)
Я знаю, что вопрос старый, но мне кажется, что xprop
тоже следует упомянуть здесь. Он легко доступен в X. Его можно использовать в интерактивном режиме:
- введите
xprop
и выберите окно, которое хотите, с помощью курсора мыши, затем WM_NAME
дает вам заголовок окна,_NET_WM_PID
дает pid
Или вы можете прямо сказать xprop
, какое окно вам нужно, передав опцию -id
или -name
. Используя awk
, вы можете получить id активного окна и передать его обратно в xprop
вот так (взято из здесь):
xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")
В конечном итоге, используя ваш любимый инструмент™ (например, grep
или sed
), вы можете отфильтровать необходимые значения. Например, для pid
вывод вышеуказанной команды может быть передан в sed
: sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'
Попробуйте команду xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html, она определенно возвращает заголовок окна, а что касается процесса, ну …
X назначил ему ID и стал родительским PID окна и по умолчанию скрывает его, так что, предполагая, что Gnome поддерживает NET_WM_PID, как указывает этот патч с 2001 года, http://mail.gnome.org/archives/gtk-devel-list/2001-October/msg00238.html, тогда мы можем рассмотреть этот пост, http://www.mail-archive.com/[email protected]/msg05809.html, где автор пишет небольшую программу на C для преобразования Window ID в PID, вуаля.
Ответ или решение
Да, в среде рабочего стола Gnome 2 существует несколько способов получения информации о текущем активном (фокусированном) окне, включая название окна и идентификатор процесса, который его запустил. Ниже представлены несколько подходов для решения этой задачи, включая использование утилит командной строки.
Способы получения информации об активном окне
-
Использование xdotool
xdotool
— это мощный инструмент, позволяющий управлять окнами X и автоматизировать действия с ними. Для получения информации о текущем активном окне можно использовать следующие команды:Для получения идентификатора активного окна и его названия:
focused_window_id=$(xdotool getwindowfocus) active_window_title=$(xdotool getwindowname "$focused_window_id")
Для получения идентификатора процесса:
active_window_pid=$(xdotool getwindowpid "$focused_window_id")
Полный скрипт для получения названия окна и идентификатора процесса:
focused_window_id=$(xdotool getwindowfocus) active_window_title=$(xdotool getwindowname "$focused_window_id") active_window_pid=$(xdotool getwindowpid "$focused_window_id") echo "Название окна: $active_window_title" echo "PID процесса: $active_window_pid"
-
Использование xwininfo
xwininfo
— это утилита для получения информации о окнах X. С помощью команды можно получить название окна следующим образом:xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1
Этот метод может быть немного сложнее, но он также эффективен. Для получения PID процесса можно использовать комбинацию команд:
ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'
Или альтернативный способ через
/proc
:cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm
-
Использование xprop
xprop
— еще одна утилита, которая позволяет получить свойства окон X, включая имя и PID. Используйте следующие команды:xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " $0\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")
Для извлечения нужных значений (PID и название окна) используйте
awk
иsed
:xprop -id $(xdotool getactivewindow) | grep -E 'WM_NAME|_NET_WM_PID'
Заключение
Таким образом, полученный инструментарий позволяет эффективно и быстро извлекать информацию об активном (фокусированном) окне в Gnome 2. Использование xdotool
, xwininfo
, и xprop
предоставляет гибкие и мощные решения для различных задач.
Эти методы особенно полезны для сценариев автоматизации, системного администрирования и разработки приложений в среде рабочего стола Gnome. Если у вас возникнут дополнительные вопросы по этой теме или необходима помощь в реализции, не стесняйтесь обращаться.