我将Raspberry Pi与Chromium(kiosk模式)结合使用以显示一些统计信息。Pi没有连接的键盘,因此我搜索了一种解决方案,以将键盘击键从终端发送到Chromium(tab)进程。普通输入确实有效,但是如何F5
通过此解决方案发送类似信息(特殊键:浏览器刷新)?
# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0
我将Raspberry Pi与Chromium(kiosk模式)结合使用以显示一些统计信息。Pi没有连接的键盘,因此我搜索了一种解决方案,以将键盘击键从终端发送到Chromium(tab)进程。普通输入确实有效,但是如何F5
通过此解决方案发送类似信息(特殊键:浏览器刷新)?
# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0
Answers:
GUI程序不从其标准输入中读取,而是从X服务器获取其输入。有一些工具可以将击键插入窗口。xdotool非常普遍且方便。
您需要找到要将按键发送到的窗口ID。您可以使用xdotool做到这一点。xdotool search --class Chrome
返回所有Chrome窗口的窗口ID列表。如果返回的结果不止一个,则需要选择所需的一个。您可以使用xdotool search --name
标题上的匹配来代替类。您还可以解析wmctrl的输出并提取所需的窗口ID。
找到正确的窗口ID后,您可以调用xdotool
来击键。不幸的是,许多应用程序拒绝合成事件,即另一个应用程序发送的击键和鼠标事件。当前版本的Chrome就是这种情况。可以通过不同的机制从另一个应用程序中注入击键,但这需要使窗口聚焦。您可以使用xdotool进行所有操作,但这会导致焦点快速闪烁到Chrome窗口并返回。以下代码段F5(按任意顺序)发送到第一个Chrome窗口。
xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)
或使用旧版本的xdotool:
xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)
请记住,这将发送F5到该窗口,并由程序决定如何处理它。在Chrome中,这会重新加载当前标签页。
--windowid
标志是现在--window
(命令警告你尽可能多)
--title
现在的选项是--name
(命令会忠实地发出警告)
xdotool search --class Chrome key F5
上面建议的解决方案像这样使用xdotool
xdotool key --windowid <window> <keystroke>
这对我不起作用。经过一些试验,我到达了
xdotool windowactivate --sync <window> key <keystroke>
一次,这似乎可行,我定义了一些脚本并更新了.lircrc文件,如下所示:
我曾经使用过自动热键来执行发送按键之类的操作,但是在Linux上不可用,但是通过Google的快速搜索发现IronAHK(http://www.ironahk.net/)并不多文档可用,但可以解决问题。