Можно ли получить процесс/название активного окна в Gnome?

Вопрос или проблема

Мне нужно решение для получения информации о текущем активном (фокусированном) окне на рабочем столе 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. Его можно использовать в интерактивном режиме:

  1. введите xprop и выберите окно, которое хотите, с помощью курсора мыши, затем
  2. 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 существует несколько способов получения информации о текущем активном (фокусированном) окне, включая название окна и идентификатор процесса, который его запустил. Ниже представлены несколько подходов для решения этой задачи, включая использование утилит командной строки.

Способы получения информации об активном окне

  1. Использование 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"
  2. Использование 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
  3. Использование 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. Если у вас возникнут дополнительные вопросы по этой теме или необходима помощь в реализции, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...