Чи можливо отримати активний процес / назву вікна в Gnome?


28

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

Відповіді:


17

Ви можете використовувати xdotool , універсальний інструмент автоматизації вікон X.

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")

(Я не знаю, в чому різниця між зосередженим та активним.)

(Я думав, що wmctrl може це зробити, але, мабуть, ні.)


26

Це так просто, як це:

xdotool getactivewindow getwindowname

Удачі сподіваємось, що це працює для вас!


Це працює, чи може хтось пояснити, чому це було знято?
lfzawacki

8

Простіше (IMO), ніж рішення OP (тобто без ps, grepі awk), щоб отримати ім'я процесу:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

Або якщо ви хочете закінчити рядок:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)

Так, cat /proc/це приємно (і, мабуть, швидше, оскільки не передбачає прив'язки всього psрезультату). Я додав його до розв’язання цього питання, тому майбутні користувачі зможуть його знайти.
Рогач

4

Спробуйте команду xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html , вона безумовно повертає заголовок вікна і, наскільки процес іде, добре ...

X призначив йому ідентифікатор і став батьківським PID вікна, а також приховав би його за замовчуванням, тому, припускаючи, що Gnome підтримує NET_WM_PID, як зазначено у цьому патчі з 2001 року, http://mail.gnome.org/ архіви / gtk-devel-list / 2001-жовтень / msg00238.html , тоді ми можемо переглянути цю публікацію, http://www.mail-archive.com/devel@xfree86.org/msg05809.html , де автор пише коротка програма C для перетворення ідентифікатора Windows в PID, вуаля.


Але здається, що xwininfoвимагає від мене вручну вибрати потрібне вікно. Я сподівався на спосіб дістати цілеспрямоване вікно від удару.
Рогач

Щось як у, `xwininfo -root-діти | grep -oEi 'id вікна: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - редагувати: мій палець ковзнув, мій регекс для id вікна був поганий. перевірте цей інший сайт на наявність посилань: davygoat.com/software/rizzle/How_it_works.html
човен

Ця команда дає лише ідентифікатор вікна "root", а не активний :(
Rogach

1

Я знаю, що питання давнє, але я xpropтакож вважаю, що тут слід згадати. Він легко доступний під X. Його можна використовувати як інтерактивний спосіб:

  1. введіть xpropі виберіть потрібне вікно, використовуючи курсор миші, а потім
  2. WM_NAMEдає назву вікна, _NET_WM_PIDдає pid

Або ви можете безпосередньо сказати, xpropяке вікно вам потрібно, пройшовши -idабо -nameвиберіть параметр. Використовуючи awkви можете отримати активний ідентифікатор вікна та передати його назад у 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'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.