Я намагаюся вводити натискання клавіш у вхідний демон, щоб імітувати введення тексту зі сценарію Bash. Чи можливо це, і якщо так, то як я можу це зробити?
Я намагаюся вводити натискання клавіш у вхідний демон, щоб імітувати введення тексту зі сценарію Bash. Чи можливо це, і якщо так, то як я можу це зробити?
Відповіді:
Якщо ви працюєте на рівні X (як у питанні Жиля), використовуйте xdotool так:
xdotool key KEYSTROKE_SPECIFIER
Де KEYSTROKE_SPECIFIER може бути чимось на зразок "a" або "F2" або "control + j"
EDIT: Я пропустив вашу відповідь на питання Гілла, вибачте. Я залишу цю відповідь тут як рішення для X-справи.
xteпрацює на тому ж рівні.
Використовуйте uinputдрайвер. Я не думаю, що для цього є корисна програма; вам доведеться написати або адаптувати трохи коду С. Коротко:
#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);
Більш повні посилання:
Якщо ви НЕ працюєте з програмами X із вікнами, на які можна надіслати ключі, ви, ймовірно, шукаєте expect, зручну та дуже настроювану програму для запуску інших інтерактивних програм оболонки, як ніби користувач керує терміналом. Ви можете налаштувати програмні відповіді, щоб відповідати на різні вихідні дані з різними входами.
Я написав деякий код Python, який це робить. Ви можете знайти його в моєму проекті з відкритим кодом.
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
Якщо ви запускаєте цей модуль як сценарій як root, ви можете бачити демонстрацію в дії.
Ця основна функціональність була розширена для іншого проекту, powerdroid, який забезпечує більш конкретну реалізацію вбудованої системи (Android).
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py