Próbuję wstrzyknąć naciśnięcia klawiszy do demona wejściowego, aby symulować pisanie ze skryptu Bash. Czy to możliwe, a jeśli tak, to jak mogę to zrobić?
Próbuję wstrzyknąć naciśnięcia klawiszy do demona wejściowego, aby symulować pisanie ze skryptu Bash. Czy to możliwe, a jeśli tak, to jak mogę to zrobić?
Odpowiedzi:
Jeśli działasz na poziomie X (jak w pytaniu Gillesa), użyj xdotool w następujący sposób:
xdotool key KEYSTROKE_SPECIFIER
Gdzie KEYSTROKE_SPECIFIER może być czymś w rodzaju „a”, „F2” lub „control + j”
EDYCJA: Przepraszam, przegapiłem twoją odpowiedź na pytanie Gillesa. Pozostawię tę odpowiedź tutaj jako rozwiązanie dla przypadku X.
xte
działa na tym samym poziomie.
Użyj uinput
sterownika. Nie sądzę, żeby istniało na to narzędzie; będziesz musiał napisać lub dostosować trochę kodu C. W skrócie:
#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);
Pełniejsze referencje:
Jeśli NIE pracujesz z programami X z oknami, do których można wysyłać klucze, prawdopodobnie szukasz expect
przydatnego i bardzo konfigurowalnego programu do uruchamiania innych interaktywnych programów powłoki, tak jakby użytkownik kontrolował terminal. Możesz skonfigurować programowe odpowiedzi, aby reagować na różne dane wyjściowe przy użyciu różnych danych wejściowych.
Napisałem kod, który to robi. Możesz go znaleźć w moim projekcie open source.
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
Jeśli uruchomisz ten moduł jako skrypt jako root, zobaczysz demo w akcji.
Ta podstawowa funkcjonalność została rozszerzona o kolejny projekt, powerdroid, który zapewnia bardziej konkretną implementację systemu wbudowanego (Android).
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py