Scopri l'applicazione sotto il mouse


11

Mi capita spesso che un'applicazione si apra una domanda e mi chiedo a quale applicazione esatta appartenga questa finestra, perché se guardo il Launcher non esiste un'applicazione che abbia attualmente il focus (nessun triangolo bianco sul lato destro dell'icona quando focalizzo la finestra del messaggio)

C'è un modo per scoprire l'appartenenza di una finestra aperta?

Risposte:


11

Usando xdotool

Innanzitutto assicurati che xdotoolsia disponibile sul tuo sistema:

sudo apt-get install xdotool

Il comando seguente stamperà il nome del processo della finestra attualmente attiva:

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

Per concederti più tempo per focalizzare la finestra / fare clic su di essa puoi anteporre una breve durata del sonno:

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

Il nome del processo dovrebbe essere visualizzato dopo un breve periodo di tempo.


Utilizzando wininfo

Wininfo è un'utilità grafica che visualizza varie informazioni su Windows e le loro proprietà, incluso il PID (ID processo) associato alla finestra:

immagine del PID in wininfo

wininfo dovrebbe essere disponibile nei repository ufficiali:

sudo apt-get install wininfo

Dopo aver determinato il PID della finestra, è quindi possibile cercare il nome del processo ad esso associato. Esistono vari modi per farlo, ad esempio guardando /proc:

$ cat /proc/17002/comm
gnome-terminal

Questo sarebbe il nome del processo associato al PID 17002.

Un modo più elegante che consente di ispezionare il contesto dell'albero dei processi, come suggerito da @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

Naturalmente puoi anche combinare pstreecon l' xdotoolopzione sopra (grazie a @ rubo77 per averlo sottolineato!):

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

fonti:

/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 per la bella risposta. Se il PID è figlio di un'applicazione principale, puoi suggerirne l'uso pstree -a -s -l -p -u $PIDpiuttosto piacevole ...
Rmano

@Rmano: Oh, è pulito! L'ho aggiunto alla risposta.
Glutanimate,

Il echo $()nei tuoi comandi non è necessario.
In pausa fino a ulteriore avviso.

@DennisWilliamson Grazie per il puntatore. Modificato.
Glutanimate,

1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Veedrac,

2

Puoi creare una scorciatoia da tastiera con questo comando:

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

1
Questa è un'ottima soluzione, +1. Tuttavia, un problema minore: se l'applicazione non assegna un WMCLASS corretto (che spesso è il caso delle finestre di dialogo criptiche), xprop non sarà di alcun aiuto.
Glutanimate,

Hai avuto un esempio per un'applicazione (popup) che non ha funzionato, grazie.
TuKsn,

1
Non ho nulla di specifico a portata di mano, ma ricordo di aver avuto problemi con diverse applicazioni Java e altri programmi oscuri che non avevano WMCLASS impostato (o impostato su qualcosa di generico come java-window). Mi sono imbattuto in questo tipo di problemi qualche tempo fa quando stavo cercando di implementare regole specifiche dell'applicazione nella mia configurazione del gestore delle finestre.
Glutanimate,

1
Hai ragione c'è un problema simile con le app create con qml / qt -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn

Come si crea una scorciatoia da tastiera per questo? Ho provato, come mostrato di seguito, ma lo zenity non si presenta
rubo77

2

È possibile utilizzare xpropper ottenere l'ID processo della finestra selezionata:

xprop $win_id _NET_WM_PID

quindi analizzalo con pstree:

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

Questo è possibile reindirizzare a una finestra di informazioni di testo con

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

Ho provato a creare una scorciatoia da tastiera per quest'ultimo comando (se ne hai bisogno regolarmente), ma per qualche motivo non funziona.


0

Con xdtool e yad installati puoi avere una bella app GUI.

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.