J'essaie d'injecter des touches dans le démon d'entrée afin de simuler la saisie à partir d'un script Bash. Est-ce possible, et si oui, comment puis-je y arriver?
J'essaie d'injecter des touches dans le démon d'entrée afin de simuler la saisie à partir d'un script Bash. Est-ce possible, et si oui, comment puis-je y arriver?
Réponses:
Si vous opérez au niveau X (comme dans la question de Gilles), alors utilisez xdotool comme ceci:
xdotool key KEYSTROKE_SPECIFIER
Où KEYSTROKE_SPECIFIER peut être quelque chose comme "a" ou "F2" ou "control + j"
EDIT: J'ai raté votre réponse à la question de Gilles, désolé. Je vais laisser cette réponse ici comme une solution pour le cas X.
xte
fonctionne au même niveau.
Utilisez le uinput
pilote. Je ne pense pas qu'il y ait d'utilité pour cela; vous devrez écrire ou adapter un peu de code C. En un mot:
#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);
Références plus complètes:
Si vous ne travaillez PAS avec des programmes X avec des fenêtres pouvant recevoir des clés, vous recherchez probablement expect
un programme pratique et très configurable pour exécuter d'autres programmes shell interactifs comme si un utilisateur contrôlait le terminal. Vous pouvez configurer des réponses programmatiques pour répondre à diverses sorties avec différentes entrées.
J'ai écrit du code Python qui fait ça. Vous pouvez le trouver dans mon projet open source.
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
Si vous exécutez ce module en tant que script en tant que root, vous pouvez voir une démo en action.
Cette fonctionnalité de base a été étendue pour un autre projet, powerdroid, qui fournit une implémentation plus concrète pour un système embarqué (Android).
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py