web-dev-qa-db-ja.com

コマンドがスクリプトではなくプロンプトで実行されるのはなぜですか?

キオスクモードで使用するラズビアンジェシーを実行しているRPiがあります。/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とそのクロムが残っています。

ホストにSSHで接続し、ルートプロンプトで実行した場合

export DISPLAY=':0'
/usr/bin/xdotool key F11

その後、Firefoxは正しくフルスクリーンに切り替わります。 xteを使用する場合も同じです。制御ファイル/tmp/date.txtには2つの日付行があり、/root/xinitrc-errorsにエラーはありません。

この奇妙な振る舞いの理由は何でしょうか?

1
WoJ

から xdotool(1)

key[options] keystroke [keystroke ...]

オプション:

-ウィンドウウィンドウ

キーストロークを特定のウィンドウIDに送信します。ここでは、「%1」や「%@」などの「WINDOWSTACK」参照を使用できます。ウィンドウスタックがある場合は、「%1」がデフォルトです。それ以外の場合は、現在のウィンドウが使用されます。

sshテストでは、Firefoxウィンドウに既にフォーカスがあったため、キーが押されました。スクリプトでは、xte mousemove ...はフォーカスを外したままにしました。

xdotool searchを他のコマンドと連鎖させることができます。 firefoxを検索すると、複数のウィンドウが返される場合があります。マンページでは、テストしたバージョン(47.0.1)で機能する例--classname Navigatorを使用しています。それができない場合は、xpropを使用して、関連するウィンドウに固有の他の文字列を見つけることができます。

 xdotool search --classname Navigator windowfocus key F11
1
JigglyNaga

スクリプトの最初の行に、Shebangを入れてみてください。

#!/usr/bin/env bash
0
voidspacexyz