Bash 스크립트의 입력을 시뮬레이션하기 위해 입력 데몬에 키 입력을 삽입하려고 합니다. 가능합니까? 가능하다면 어떻게 구현하면 되나요?
답변1
드라이버를 사용하세요 uinput
. 나는 이것이 유용하다고 생각하지 않습니다. 일부 C 코드를 작성하거나 조정해야 합니다. 간단히 말해서:
#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);
더 완전한 참고자료:
답변2
Gilles의 질문과 같이 레벨 X에서 작업하는 경우 다음을 사용하십시오.xdo 도구이와 같이:
xdotool key KEYSTROKE_SPECIFIER
여기서 KEYSTROKE_SPECIFIER는 "a", "F2" 또는 "control+j"일 수 있습니다.
편집: 죄송합니다. Giles의 질문에 대한 답변을 놓쳤습니다. X 케이스에 대한 해결책으로 이 답변을 여기에 남겨 두겠습니다.
답변3
키를 보낼 수 있는 창에서 X 프로그램을 사용하지 않는 경우 다음을 찾아볼 수 있습니다.expect
, 사용자 제어 터미널처럼 다른 대화형 쉘 프로그램을 실행하기 위한 편리하고 매우 구성 가능한 프로그램입니다. 다양한 입력과 다양한 출력에 응답하도록 프로그래밍 방식의 응답을 설정할 수 있습니다.
답변4
이를 달성하기 위해 Python 코드를 작성했습니다. 내 오픈 소스 프로젝트에서 찾을 수 있습니다.
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
루트로 스크립트로 모듈을 실행하면 실행 중인 데모를 볼 수 있습니다.
이 기본 기능은 임베디드 시스템(Android)에 대한 보다 구체적인 구현을 제공하는 또 다른 프로젝트인 powerdroid를 위해 확장되었습니다.
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py