如何通过 shell 脚本注入击键?

如何通过 shell 脚本注入击键?

我正在尝试将击键注入输入守护程序中,以便模拟从 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

如果您在 X 级别操作(如 Gilles 的问题),则使用xdo工具像这样:

xdotool key KEYSTROKE_SPECIFIER

其中 KEYSTROKE_SPECIFIER 可以是“a”或“F2”或“control+j”

编辑:抱歉,我错过了你对吉尔斯问题的回答。我将在此留下此回复作为 X 案例的解决方案。

答案3

如果您不使用带有可发送密钥的窗口的 X 程序,您可能正在寻找expect,一个方便且非常可配置的程序,用于运行其他交互式 shell 程序,就像用户控制终端一样。您可以设置编程响应以响应具有不同输入的各种输出。

答案4

我写了一些 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

相关内容