【问题标题】:Sending keyboard input to a program from command-line从命令行向程序发送键盘输入
【发布时间】:2011-04-17 02:08:12
【问题描述】:

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

即在Linux GUI下,有没有好的手动(可编程)方式,或者工具, 在 Linux 上正在运行的程序上模拟键盘输入,以便我可以发送 从命令行,例如“Control-T”到 Firefox 进程和“echo 'hello'\n" 到 Gnome-Terminal 进程,而不实际关注每个进程 那些进程并直接输入?

【问题讨论】:

    标签: linux user-interface shell keyboard ipc


    【解决方案1】:

    xdotool 确实有一种发送击键的方法,如果仅限于聚焦窗口:

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

    【讨论】:

    • 您可以在/usr/include/X11/keysymdef.h 文件中找到的关键符号列表。
    • 在线文档可以在这里找到:semicomplete.com/projects/xdotool
    • 你为什么用head -1
    • 在这里偶然发现了一个键列表,更新了 cmets。大多数人不安装开发包,所以在这里列出:tcl.tk/man/tcl/TkCmd/keysyms.htm,如果你有多个,通常使用 head -n 1 来获得第一个匹配
    【解决方案2】:

    这是一个老话题,但可能仍然有人在寻找这个,有人在此处提到使用 xdotool 时必须激活窗口的解决方案。但是,您可以指定窗口,甚至可以使用 xdotool 来查找它。这是我尝试完成的示例,根据需要进行更改。

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

    【讨论】:

      【解决方案3】:

      我在xdotool 周围构建了一个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
      

      【讨论】:

        【解决方案4】:

        我找到了xmacroxremote 这两个程序,你可以看看,但似乎没有很好的文档记录。

        我还发现了这个实用程序 xvkbd 来回答这个问题 SO Q&A,标题为:Sending keycode to Xorg + wine with bash script

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-23
          • 2014-07-23
          • 1970-01-01
          • 1970-01-01
          • 2016-01-08
          • 2010-11-14
          • 2016-05-15
          • 1970-01-01
          相关资源
          最近更新 更多