Manipulación de la tecla X y del puntero en la línea de command

¿Qué herramientas de command-line existen para enumerar y administrar las capturas de serveres X? (Eso es como agarrar con la llave y el puntero, es decir, restringir el uso de una tecla o button de mouse en particular a una aplicación en particular, o restringir el puntero del mouse para permanecer en un área de pantalla particular.) Estoy buscando una hipotética utilidad xgrab que mostraría cosas como

 Key 0x00f00ba5 0x123 0 Button 0x00f00ba5 2 Pointer 0x00abcdef 

lo que significa que ha habido una llamada a XGrabKey(display, 0x123, 0, 0x00f00ba5, ...) y así sucesivamente con XGrabButton , XGrabPointer , XGrabKeyboard , XGrabServer (si es posible). El formatting de visualización no importa, lo que quiero es una forma de ver quién está agarrando qué, y posiblemente alguna forma de revocar estas capturas (si es posible, no estoy seguro si la API X11 lo permite).

Solutions Collecting From Web of "Manipulación de la tecla X y del puntero en la línea de command"

Las versiones recientes de X (server X.org ≥1.11) admiten varios keysyms de debugging, que se introducen en este compromiso . Cuando se activan, estos realizan acciones relacionadas con capturas.

Por defecto ( al less en versiones recientes ), estos están deshabilitados (ausentes del map de teclas pnetworkingeterminado).

Sin embargo, si tiene xdotool instalado, es posible llamarlo ejecutando en la command-line:

 xdotool key NameOfKey 

donde NameOfKey es el keysym que desea activar. Por ejemplo, para imprimir una list de capturas activas en el logging del server X, use la xdotool key XF86LogGrabInfo .

Los keysyms relevantes son:

  • XF86LogGrabInfo : imprime una list de capturas activas en el logging del server X.
  • XF86Ungrab : rompe todas las capturas activas, sin eliminar la aplicación que contiene los ganchos
  • XF86ClearGrab : elimina todos los processs que mantienen capturas activas

Tenga en count que XF86LogGrabInfo solo muestra capturas activas, no capturas pasivas, como un agarre en una tecla que no está presionada actualmente. Si desea get información sobre una xdotool key XF86LogGrabInfo pasiva, debe activar la xdotool key XF86LogGrabInfo : ejecute la xdotool key XF86LogGrabInfo mientras se presiona la combinación de tecla o button del mouse que le interese. Haz algo como:

  1. Ejecutar sleep 1; xdotool key XF86LogGrabInfo sleep 1; xdotool key XF86LogGrabInfo
  2. Dentro de 1 segundo, presione la combinación de tecla o button de mouse.
  3. Después de 1 segundo, suelte la tecla / button.
  4. Compruebe la información de "Active grab …" en el logging del server X (a menudo /var/log/Xorg.0.log ).

No conozco nada disponible para las capturas pasivas 1 de una sola tecla o button que pueda estar presente, pero hay varias forms de enumerar las capturas activas de todo un keyboard o dispositivo de mouse.

  1. En todas las plataforms, pero solo con Xorg 1.11 y posterior (o una versión anterior con el parche aplicado), asigne teclas de acceso rápido para volcar datos de captura al logging como se describe en estas notas de parche .
  2. En Solaris 11 (ya sea Solaris 11 Express 2010.11 o la versión real de Solaris 11), utilice las secuencias de commands del depurador, como /usr/demo/Xserver/mdb/list_Xserver_devicegrab_client , tal como se describe en Grabbing Information from the X Server . También hay uno aquí para tomar serveres, que las teclas rápidas de Xorg 1.11 actualmente no cubren.

1 Vea http://tronche.com/gui/x/xlib/input/pointer-grabbing.html para la definición de grabs activo vs. pasivo.

Esto es una adición a la respuesta del caracol mecánico:

Las inputs en el logging de Xorg pueden ser bastante indescifrables. Escribí un progtwig que los analiza y los presenta en una forma humanamente tratable:

https://gist.github.com/CyberShadow/6412d11aea64144f8905cc0b8196f38e

Para usar, primero ejecuta la xdotool key XF86LogGrabInfo , como se describe en la respuesta del caracol mecánico. Luego, ejecute el progtwig vinculado arriba. Si el file de logging de Xorg no se encuentra en /var/log/Xorg.0.log , puede especificar su location con la opción --xorg-log . Ver --help para más detalles.