쉘 스크립트를 통해 키 입력을 삽입하는 방법은 무엇입니까?

쉘 스크립트를 통해 키 입력을 삽입하는 방법은 무엇입니까?

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

관련 정보