Quali strumenti da riga di comando esistono per elencare e gestire le prese del server X? (Questo è afferrare come in key e pointer grabs, cioè limitare l'uso di un particolare tasto o pulsante del mouse a una particolare applicazione, o costringere il puntatore del mouse a rimanere in una particolare area dello schermo.) Sto cercando un ipotetico xgrab
utility che mostrerebbe cose come
Key 0x00f00ba5 0x123 0
Button 0x00f00ba5 2
Pointer 0x00abcdef
significa che c'è stata una chiamata a XGrabKey(display, 0x123, 0, 0x00f00ba5, ...)
e così via con XGrabButton
, XGrabPointer
, XGrabKeyboard
, XGrabServer
(se possibile). Il formato di visualizzazione non ha importanza, quello che voglio è un modo per vedere chi sta prendendo cosa, e possibilmente un modo per revocare questi grab (se è possibile, non sono sicuro che l'API X11 lo consenta).
Risposta accettata:
Le versioni recenti di X (server X.org ≥1.11) supportano diversi keysyms di debug, introdotti in questo commit. Quando vengono attivati, eseguono azioni relative alle prese.
Di default (almeno nelle versioni recenti), questi sono disabilitati (assenti dalla keymap di default).
Tuttavia, se hai xdotool
installato, è possibile chiamarli, eseguendo sulla riga di comando:
xdotool key NameOfKey
dove NameOfKey
è il keysym che vuoi attivare. Ad esempio, per stampare un elenco di grab attivi nel registro del server X, usa xdotool key XF86LogGrabInfo
.
I keysym rilevanti sono:
- XF86LogGrabInfo :stampa un elenco di grab attivi nel log del server X
- XF86Non catturare :interrompe tutte le prese attive, senza uccidere l'applicazione che contiene le prese
- XF86ClearGrab :uccide tutti i processi che mantengono le prese attive
Nota che XF86LogGrabInfo elenca solo le prese attive, non le prese passive come una presa su un tasto che non è attualmente premuto. Se vuoi ottenere informazioni su un grab passivo, devi attivare il grab:esegui xdotool key XF86LogGrabInfo
mentre viene premuto l'accordo chiave o la combinazione di pulsanti del mouse che ti interessa. Fai qualcosa come:
- Esegui
sleep 1; xdotool key XF86LogGrabInfo
- Entro 1 secondo, premi l'accordo chiave o la combinazione di pulsanti del mouse.
- Dopo 1 secondo, rilascia il tasto/pulsante.
- Controlla le informazioni "Active grab ..." nel registro del server X (spesso
/var/log/Xorg.0.log
).