为什么命令会在提示符下运行而不是在脚本中运行?

为什么命令会在提示符下运行而不是在脚本中运行?

我有一个运行 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

相关内容