Estoy tratando de inyectar pulsaciones de teclas en el daemon de entrada para simular escribir desde un script Bash. ¿Es esto posible y, de ser así, cómo puedo hacer que suceda?
Estoy tratando de inyectar pulsaciones de teclas en el daemon de entrada para simular escribir desde un script Bash. ¿Es esto posible y, de ser así, cómo puedo hacer que suceda?
Respuestas:
Si está operando en el nivel X (como en la pregunta de Gilles), use xdotool así:
xdotool key KEYSTROKE_SPECIFIER
Donde KEYSTROKE_SPECIFIER puede ser algo como "a" o "F2" o "control + j"
EDITAR: Perdí tu respuesta a la pregunta de Gilles, lo siento. Dejaré esta respuesta aquí como una solución para el caso X.
xte
opera al mismo nivel.
Usa el uinput
conductor. No creo que haya una utilidad para eso; Tendrás que escribir o adaptar un poco de código C. En una palabra:
#include <fcntl.h>
#include <ioctl.h>
#include <unistd.h>
#include <linux/input.h>
#include <linux/uinput.h>
/* Set up a fake keyboard device */
fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK); // or /dev/input/uinput
ioctl(fd, UI_SET_EVBIT, EV_KEY);
struct uinput_user_dev uidev = …;
write(fd, &uidev, sizeof(uidev));
ioctl(fd, UI_DEV_CREATE);
/* Send an event */
struct input_event ev = …;
write(fd, &ev, sizeof(ev));
/* Clean up */
ioctl(fd, UI_DEV_DESTROY);
close(fd);
Referencias más completas:
Si NO está trabajando con programas X con ventanas a las que se pueden enviar claves, probablemente esté buscando expect
un programa práctico y muy configurable para ejecutar otros programas de shell interactivos como si un usuario estuviera controlando el terminal. Puede configurar respuestas programáticas para responder a varias salidas con diferentes entradas.
Escribí un código de Python que hace eso. Puedes encontrarlo en mi proyecto de código abierto.
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
Si ejecuta ese módulo como un script como root, puede ver una demostración en acción.
Esta funcionalidad básica se amplió para otro proyecto, powerdroid, que proporciona una implementación más concreta para un sistema integrado (Android).
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py