Знайдіть додаток під мишкою


11

Часто трапляється зі мною, що програма з’являється питання, і мені цікаво, до якої саме програми належить це вікно, тому що якщо я загляну в Запуск, не існує програми, яка зараз має фокус (немає білого трикутника праворуч від піктограми коли я зосереджую вікно повідомлення)

Чи є спосіб з’ясувати приналежність до відкритого вікна?

Відповіді:


11

Використання xdotool

Спочатку переконайтеся, що xdotoolдоступно у вашій системі:

sudo apt-get install xdotool

Наступна команда буде надрукувати ім'я процесу у вікні, на якому зараз фокусується:

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

Щоб приділити собі більше часу для фокусування вікна / натискання на нього, ви можете передбачити невелику тривалість сну:

sleep 5 && cat "/proc/$(xdotool getwindowpid "$(xdotool getwindowfocus)")/comm"

Назва процесу повинна відображатися через короткий проміжок часу.


Використання wininfo

Wininfo - це графічна утиліта, яка відображає різну інформацію про Windows та їх властивості, включаючи PID (ідентифікатор процесу), пов'язаний з вікном:

зображення PID у wininfo

wininfo має бути доступним в офіційних сховищах:

sudo apt-get install wininfo

Визначивши PID вікна, ви можете шукати ім'я процесу, пов'язане з ним. Існують різні способи зробити це, наприклад, переглянувши /proc:

$ cat /proc/17002/comm
gnome-terminal

Це буде ім'я процесу, пов'язане з PID 17002.

Більш елегантний спосіб, який дозволяє перевірити контекст дерева процесів, як запропонував @Rmano :

$ pstree -a -s -l -p -u 17002
init,1
  └─lightdm,1900
      └─lightdm,3202 --session-child 12 19
          └─lxsession,3307,glutanimate -s LXDE -e LXDE
              └─openbox,3362 --config-file /home/glutanimate/.config/openbox/lxde-rc.xml
                  └─gnome-terminal,17002
                      ├─bash,1841
                      ├─bash,2332
                      ├─bash,2424
                      │   └─pstree,2484 -a -s -l -p -u 17002
                      ├─gnome-pty-helpe,1840
                      ├─{gnome-terminal},1835
                      ├─{gnome-terminal},1836
                      ├─{gnome-terminal},1842
                      └─{gnome-terminal},2269

Звичайно, ви також можете комбінувати pstreeз наведеним xdotoolвище варіантом (спасибі @ rubo77 за вказівку на це!):

sleep 2; pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")

Джерела:

/unix//q/38867/29245

http://www.linuxquestions.org/questions/debian-26/how-to-find-the-process-associated-with-a-top-level-x-window-907125/

/superuser//q/632979/170160


1
+1 за гарну відповідь. Якщо PID - це дитина, яка є основною програмою, ви можете запропонувати використовувати її pstree -a -s -l -p -u $PIDдуже приємно ...
Rmano

@Rmano: О, це акуратно! Я додав це у відповідь.
Glutanimate

Команди echo $()у ваших командах не потрібні.
Призупинено до подальшого повідомлення.

@DennisWilliamson Дякую за вказівник. Відредаговано.
Glutanimate

1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Ведрак

2

Ви можете створити комбінацію клавіш за допомогою цієї команди:

zenity --info --text $(xprop $win_id WM_CLASS | cut -d" " -f4-)

1
Це дуже приємне рішення, +1. Однак, одна менша проблема: якщо програма не призначить належний WMCLASS (що часто трапляється із криптованими діалогами), xprop не допоможе.
Glutanimate

У вас був приклад програми (спливаючого вікна), яка не працювала, дякую.
TuKsn

1
У мене немає нічого конкретного під рукою, але я пам’ятаю, що виникли проблеми з кількома програмами Java та іншими незрозумілими програмами, у яких WMCLASS не було встановлено (або встановлено на щось загальне java-window). Я стикався з подібними проблемами деякий час тому, коли я намагався реалізувати правила, застосовані до програми, у своїй конфігурації менеджера вікон.
Glutanimate

1
Ви маєте рацію є аналогічна проблема з додатками , створеними з QML / кварти -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn

Як створити для цього клавіатурну комбінацію клавіш? Я спробував, як показано нижче, але зубність не з’являється
rubo77

2

Ви можете використовувати xpropідентифікатор процесу натиснутого вікна:

xprop $win_id _NET_WM_PID

потім проаналізуйте це за допомогою pstree:

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)

Це ви можете переспрямувати до текстового інформаційного вікна за допомогою

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)|zenity --text-info --title "pstree of clicked Window"

Я спробував створити комбінацію клавіш для цієї останньої команди (якщо вона вам потрібна регулярно), але чомусь це не працює.


0

Якщо встановлено xdtool та yad, ви можете мати хороший графічний додаток.

#!/bin/bash
while true; do cat "/proc/$(xdotool getwindowpid "$(xdotool 
getwindowfocus)")/comm"; sleep 1; echo -e '\f'; done | yad --no- 
buttons --no-focus --geometry 250x10 --fixed --text-info -- 
title="Active window" --listen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.