我有一个运行 raspbian jessie 的 RPi,我在 kiosk 模式下使用它:我从/etc/rc.local
/usr/bin/xinit /opt/domotique/xinitrc > /root/xinitrc-errors 2>&1
并且 /opt/domotique/xinitrc
是
date > /tmp/date.txt
export DISPLAY=':0'
xset s off
xset -dpms
xset s noblank
setxkbmap fr
/usr/bin/matchbox-window-manager -use_titlebar no -use_cursor no &
# wait for the window manager to start
sleep 10
rm -fr /root/.config /root/.cache
/usr/bin/firefox http://127.0.0.1:8081/infoscreen/infoscreen.html &
# let the browser start
sleep 10
/usr/bin/xte 'mousemove 10000 10000'
sleep 2
/usr/bin/xdotool key F11
date >> /tmp/date.txt
sleep 40000000
这个想法是启动一个最小的窗口管理器,然后是 Firefox,然后以编程方式将鼠标移开并按下F11
进入全屏。
一切工作正常,除了F11
按键没有被“按下”——我只剩下 Firefox 和它的 chrome。
如果我 ssh 到主机并在 root 提示符下运行
export DISPLAY=':0'
/usr/bin/xdotool key F11
然后firefox就正确切换到全屏了。如果我使用的话也一样xte
。控制文件/tmp/date.txt
有两条日期行,并且/root/xinitrc-errors
.
这种奇怪行为的原因可能是什么?
答案1
从xdo工具(1):
钥匙 [选项] 击键 [击键 ...]
选项:
--窗口窗口
将击键发送到特定窗口 ID。您可以在此处使用“WINDOW STACK”引用,例如“%1”和“%@”。如果存在窗口堆栈,则默认为“%1”,否则使用当前窗口。
在您的ssh
测试中,您已经聚焦了 Firefox 窗口,因此它收到了按键。在脚本中,它xte mousemove ...
没有聚焦。
您可以xdotool search
与其他命令链接。搜索firefox
可能会返回多个窗口。联机帮助页使用 example --classname Navigator
,它适用于我测试的版本 (47.0.1)。如果失败,您可以使用xprop
查找特定于相关窗口的其他字符串。
xdotool search --classname Navigator windowfocus key F11
答案2
在脚本的第一行中,您可以尝试将 shebang
#!/usr/bin/env bash