versiones guia español actualizar linux shell ubuntu mouse

linux - guia - qgis español



Controle el mouse escribiendo en/dev/input/mice (7)

Además de usar / dev / input / mice para controlar su mouse, puede usar el comando ''xte'' del paquete ''xautomation''.

apt-get install xautomation

Como ejemplo, se puede observar el siguiente comando:

xte ''mousemove 400 100''

Entonces, el puntero del mouse se mueve a la ubicación específica de la pantalla. Como otro ejemplo, tenemos:

xte ''mouseclick 1''

que haga clic en el botón izquierdo del mouse (1: clic izquierdo, 2: clic medio, 3: clic derecho).

Estoy usando Ubuntu 12.04. Para una de mis aplicaciones necesito controlar el mouse en el software usando una secuencia de comandos.

Entiendo que el dispositivo del mouse es /dev/input/mice . Si hago un cat /dev/input/mice y luego muevo el mouse, veo que se está volcando una gran cantidad de salida en la pantalla.

Ahora deseo eliminar el mouse y tener un script que escriba en /dev/input/mice para controlar el puntero del mouse

Por favor, ayúdenme con los comandos para lo siguiente:
(1) Haga clic con el botón izquierdo
(2) Haga clic con el botón derecho
(3) Mueva el mouse de una ubicación a otra.

Tenga en cuenta que estoy buscando una solución de script de shell, en lugar de una solución de C / C ++.


Fue este hipervínculo en una de las publicaciones anteriores lo que me puso en el camino correcto: cómo controlar el movimiento del mouse en Linux

Ayudado por la información de varios otros lugares, pude portar el código de muestra C a un script Bash. Aquí hay un PoC que mueve el cursor del mouse 100 píxeles hacia la derecha:

seconds=$(date +%s) type=2 # EV_REL code=0 # REL_X value=100 # 100 pixels printf ''%08X%04X%04X%08X%08X/n'' $value $code $type 0 $seconds | xxd -r -p | perl -0777e ''print scalar reverse <>'' > /dev/input/event8 type=0 # EV_SYN code=0 # SYN_REPORT value=0 printf ''%08X%04X%04X%08X%08X/n'' $value $code $type 0 $seconds | xxd -r -p | perl -0777e ''print scalar reverse <>'' > /dev/input/event8

Advertencias:

  • Tendrá que ajustar event8 a cualquier dispositivo de entrada del mouse de su sistema. Use este comando para averiguar: cat / proc / bus / input / devices
  • Necesita suficiente permiso (posiblemente raíz) para escribir en el dispositivo de entrada.
  • Supuse que la arquitectura del procesador little-endian (de ahí la inversión de bytes con Perl).

Hay un módulo apropiado para emular mouse, teclados y otro tipo de dispositivos de entrada en Linux. El módulo se llama uinput que significa entrada de espacio de usuario.

Puede crear fácilmente dispositivos virtuales controlados por software. Por ejemplo, si conoce Python, puede configurar un mouse virtual mediante el uso de python-uinput y emitir comandos simples como mover aquí , hacer clic allí . Por ejemplo, para mover el mouse, según la documentación:

import uinput device = uinput.Device([uinput.REL_X, uinput.REL_Y]) for i in range(20): device.emit(uinput.REL_X, 5) device.emit(uinput.REL_Y, 5)

Sin embargo, nunca usé ese enlace, pero hace varios años creé un emulador de mouse que se puede controlar a través del teclado de mi iBook que viene con un touchpad roto. Puede echar un vistazo a mi código para tener una referencia para implementar la operación de movimiento del mouse / touchpad.


Puede capturar los eventos usando la herramienta od de /dev/input/mice y luego volver a reproducirlos una vez que haya decodificado la secuencia.

# cat /dev/input/mice | od -t x1 -w3 0000000 08 02 00 0000003 08 08 00 0000006 08 09 00 0000011 08 07 00 0000014 08 04 00 0000017 08 01 01 0000022 08 00 02 0000025 08 02 02

Para esto puedes tomar la ayuda del código python aquí:

¡Obtén deltas de mouse con Python! (en Linux)

L:0, M: 0, R: 0, x: -1, y: -1 L:0, M: 0, R: 0, x: 0, y: -1 L:0, M: 0, R: 0, x: 0, y: -1 L:0, M: 0, R: 0, x: 0, y: 2 L:0, M: 0, R: 0, x: 0, y: 1 L:0, M: 0, R: 0, x: 0, y: -1 L:0, M: 0, R: 0, x: 1, y: -1

Una vez que tenga eso, puede codificarlo nuevamente en una secuencia de 3 bytes para cada movimiento del mouse.

Para codificar los valores binarios usando bash , puede referirse a esta pregunta: Pasar datos binarios como argumentos en bash

Sin embargo, lo intenté y escribir en /dev/input/mice no funciona.

La razón es que este archivo solo le está dando un flujo de eventos que ya han sucedido. Entonces debe haber alguna otra forma de inyectar tales eventos.

¿Cómo controlar el movimiento del mouse en Linux?


Puede crear un mouse virtual.

Como otros mencionados, puedes usar herramientas prefabricadas. Pero puede ser divertido jugar con uinput.

http://thiemonge.org/getting-started-with-uinput

Básicamente solo tienes que crear un dispositivo virtual. Y escriba en / dev / uinput.


Si eres valiente y no quieres depender de ninguna herramienta de terceros, debes usar Xlib. La documentación se puede encontrar aquí . También puedes probar python-xlib si no quieres jugar con C / C ++.

Compruebe este hilo para ver un ejemplo (C / C ++).

Este es un ejemplo de un programa que recibe una coord y simula un clic del mouse en esa posición.

#include <X11/Xlib.h> #include<stdio.h> #include<unistd.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <X11/Xlib.h> #include <X11/Xutil.h> void mouseClick(int button) { Display *display = XOpenDisplay(NULL); XEvent event; if(display == NULL) { fprintf(stderr, "Errore nell''apertura del Display !!!/n"); exit(EXIT_FAILURE); } memset(&event, 0x00, sizeof(event)); event.type = ButtonPress; event.xbutton.button = button; event.xbutton.same_screen = True; XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state); event.xbutton.subwindow = event.xbutton.window; while(event.xbutton.subwindow) { event.xbutton.window = event.xbutton.subwindow; XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state); } if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Error/n"); XFlush(display); usleep(100000); event.type = ButtonRelease; event.xbutton.state = 0x100; if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Error/n"); XFlush(display); XCloseDisplay(display); } int main(int argc,char * argv[]) { int i=0; int x , y; x=atoi(argv[1]); y=atoi(argv[2]); Display *display = XOpenDisplay(0); Window root = DefaultRootWindow(display); XWarpPointer(display, None, root, 0, 0, 0, 0, x, y); mouseClick(Button1); XFlush(display); XCloseDisplay(display); return 0; }


esto no es a través del archivo que mencionaste, pero es mucho más rápido usar esta herramienta en lugar de descifrar el volcado de ese archivo. Y hace todo lo que quieras en bash.

xdotool hace el truco en mi terminal.
este es el sitio del paquete para ubuntu. usted probablemente puede instalarlo a través

# apt-get install xdotool

Podría simplemente surgir en gentoo sin agregar repositorios.
la herramienta funciona bastante simple :

#! /bin/bash # move the mouse x y xdotool mousemove 1800 500 # left click xdotool click 1 # right click xdotool click 3

lo encontré aquí