2011-05-11 11 views
12

Me pregunto cómo obtener los eventos MouseClick y MouseMove en bash scripting para mis propios eventos de SO simples.cómo obtener MouseMove y MouseClick en bash?

Por favor dígame cómo obtener esos eventos.

+0

También necesito detener el seguimiento de los clics del mouse en la terminal ... –

Respuesta

3

bash no sabe nada acerca de un mouse o clics del mouse. Por defecto no hay cursor o algo así.

Puede instalar el "Servidor de mouse de propósito general". Mira esto: http://www.linuxfromscratch.org/blfs/view/6.3/general/gpm.html por ejemplo para usar copiar y pegar dentro de una consola. Tal vez puedas usar las herramientas para trabajar con tu bash - script.

... pero en absoluto: no hay soporte nativo de ratón para el shell Bash

+0

No tengo ni idea de cómo funciona, pero al usar enlaces (navegador de modo de texto) en una sesión SSH (cliente SSH Ubuntu, servidor Debian). Puedo usar la rueda de desplazamiento para desplazarme por la página y hacer clic en enlaces o botones. –

+1

Creo/sospecho que está usando un terminal/xterm dentro de un entorno gráfico/X-Windows (KDE, Genome, ...) Esta es una característica del emulador de terminal. No es una función bash. Creo que también funcionaría con otro shell, como ksh, ash o sh. Y estoy seguro de que no funcionará (por ejemplo) runlevel 3 sin un sistema de ventana en ejecución. –

+0

Suena razonable. Sí, la característica descrita funciona, p. en KDE. Pero, ¿qué forma de comunicación proporciona la información sobre los eventos del mouse a los enlaces? Esperaba que el debe tener que pasar algunos datos. ¿Alguien puede explicar esto en detalle o proporcionar enlaces útiles? –

23

El emulador de terminal xterm define algunas secuencias de control para hacer seguimiento del ratón, se puede aprender más acerca de ellos en la sección Ratón Seguimiento en el documento ctlseqs para la distribución de xterm. Si tiene instalado xterm, probablemente tenga una copia en /usr/share/doc/xterm/ctlseqs.txt.gz o una ruta similar.

La mayoría de los emuladores de terminal que se ejecutan en el sistema X Window (por ejemplo, Konsole, gnome-terminal, eterm, ...) comprenden al menos algunas de estas secuencias de control. Si desea usarlos directamente en uno de los terminales virtuales de Linux, probablemente deba ejecutar gpm(8).

Hay varias secuencias de control para la activación y desactivación de notificación del movimiento del ratón:

  • 9 -> X10 informes del ratón, para la compatibilidad con xterm de X10, los informes sobre el botón de prensa.
  • 1000 -> informes de mouse X11, informes sobre la pulsación y liberación del botón.
  • 1001 -> resaltar informes, útil para informar los aspectos más destacados del mouse.
  • 1002 -> informe de movimiento del botón, informa el movimiento cuando se presiona un botón.
  • 1003 -> todos los informes de movimiento, informa todos los movimientos.

La secuencia de control es CSI ? number h para habilitar y CSI ? number l para deshabilitar. CSI es ESC [ o el carácter 0x9b. Por lo tanto, se puede usar de la siguiente manera:

echo -e "\e[?1000h" 

Entonces, usted obtendrá un montón de personajes en el botón de prensa, ve ctlseqs o console_codes(4) para más detalles. A continuación, puede desactivar el seguimiento del ratón con:

echo -e "\e[?1000l" 

Por desgracia, los anteriores modos de presentación de informes del ratón puede coordina sólo manejan hasta 223 (255 - 32), o en algunos casos 95 (127 - 32).Así que hay algunos nuevos interruptores para cambiar el formato en el que se presentan las coordenadas del ratón:

  • 1006 -> Informe de vuelta como valores decimales (xterm, muchos otros emuladores de terminal, pero no urxvt)
  • 1015 -> Informe volver como valores decimales (urxvt, xterm, otros emuladores de terminal, algunas aplicaciones resulta compleja para analizar)
  • 1005 -> informe posterior codificado como UTF-8 (xterm, urxvt, rota en varias formas)

Una buena estrategia para una aplicación sería habilitar el informe del mouse, luego (opcionalmente solicite el modo urxvt 1015 y luego) solicite el modo SGR 1006. La aplicación debe manejar tanto las respuestas de informes de mouse nuevas como las heredadas, para continuar trabajando en emuladores de terminal sin soporte para los nuevos modos.

Más información sobre los nuevos modos de presentación de informes en:

+0

Buena respuesta, y una buena edición años después sobre las extensiones. ¡Realmente apreciado! :) – egmont

+0

'' 'echo -e" \ e [?1000l "' '' - ¡exactamente lo que necesito para detener el seguimiento de mis coords de mouse en la terminal! Gracias –

1

se puede utilizar para xdotool mousemove y MouseClick eventos. xdotool es una herramienta que simula el teclado y el mouse. instálelo escribiendo, sudo apt-get install xdotool. Al usar xdotool puede automatizar casi todo lo que hace usando el teclado y el mouse.

-1

Puede usar el comando 'xte' del paquete 'xautomation'.

apt-get install xautomation 

Como un ejemplo, el siguiente comando se destacan:

xte 'mousemove 200 300' 

así, el puntero del ratón se mueve a la anchura 200 y la altura 300 de la pantalla. Como otro ejemplo, tenemos:

xte 'mouseclick 3' 

que haga clic en el botón derecho del mouse (1: clic izquierdo, 2: botón central, 3: click derecho). Además, puede presionar las teclas del teclado mediante shell:

xte 'keydown Control_L' 'key c' 'keyup Control_L' 

Este ejemplo envía ctrl + c al shell.

Cuestiones relacionadas