从命令行向程序发送键盘输入

15

如何将键盘输入发送到程序?

也就是说,在Linux GUI下,有没有一种好的手动(可编程)方式或工具,可以在Linux上运行的程序上模拟键盘输入,以便我可以从命令行发送例如“Control-T”到Firefox进程和“echo 'hello'\n”到Gnome终端进程,而不必直接聚焦于这些进程并进行输入?

4个回答

16

xdotool 可以发送按键,但是只限于聚焦的窗口:

WID=`xdotool search "Mozilla Firefox" | head -1`
xdotool windowactivate $WID
xdotool key ctrl+l

1
您可以在/usr/include/X11/keysymdef.h文件中找到的关键符号列表。 - jcubic
在线文档可以在这里找到:http://www.semicomplete.com/projects/xdotool/ - Florian Fida
为什么要使用 head -1 - qed
在这里遇到了一个键列表,正在更新注释。大多数人不安装开发包,因此在此处列出:http://www.tcl.tk/man/tcl/TkCmd/keysyms.htm,并且通常使用head -n 1来获取第一个匹配项,以防有多个。 - bksunday

3

虽然这是一个老话题,但仍有人在寻找解决方案。有人提到了在使用xdotool时需要激活窗口的解决方案。然而,您可以指定窗口甚至使用xdotool查找它。以下是我尝试完成的示例,请按您的需求进行更改。

xdotool key --window $(xdotool search --name "Spotify (Premium |Free )?- Linux Preview" | head -n1) ctrl+KP_Down

对我没用,我尝试使用Audacity xdotool key --window $(xdotool search --name "Audacity" | head -n1) Ctrl+Q - Salem

2
我已经构建了一个基于xdotool的Ruby DSL,以简化窗口聚焦和模拟键盘输入。以下是一个示例,基于您最初的请求进行改进:

我使用Ruby DSL构建了一个工具,可以更轻松地聚焦窗口和模拟键盘输入。以下是一个例子,参考了您最初的请求:

Mani.new(window_manager: :xmonad) do
  window :hello, launch: 'urxvt' do
    run 'echo "hello\n"'
  end

  window :firefox, launch: 'firefox', delay: 1.5 do
    type '{{ctrl+t}}'
  end
end

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接