システムの起動時に呼び出す bash スクリプト (Ubuntu 10.04)「スタートアップ アプリケーション」があります。
脚本:
#!/bin/sh
APP1='/home/ipc-display/development/projects/display-mgmt'
LOG='/home/ipc-display/development/projects/bootLog.txt'
cd $APP1/target/scala-2.10
java -jar display-mgmt-1.0.jar &
# Auto Hide Mouse Pointer
/usr/bin/unclutter &
#Start chrome
sleep 5s
/usr/bin/google-chrome --incognito --app=http://192.168.0.100:9000/welcome &
#Bring Chrome to focus
sleep 5s
/usr/bin/wmctrl -a "http://" &&
#FullScreen Chrome
sleep 3s &&
/usr/bin/xdotool key F11
bash
私のひどいスクリプト作成能力はさておき、Chrome が期待どおりに常に確実に全画面表示にならない理由について何か考えはありますか?
なぜ時々フルスクリーンになるのに、いつもではないのか理解できず、頭を悩ませています。余談ですが、このスクリプトの機能強化は大歓迎です。
ありがとう。
答え1
タイミングの問題が原因のようです。Chrome にフォーカスを当ててから を押すまでの 3 秒間に何かがフォアグラウンドになっている可能性がありますF11。
がどのように機能するかはわかりませんwmctrl
が、その行の最後に を使用するのは少し矛盾しているようです。これはプロセスをバックグラウンドにするのではなく、コマンドが成功した場合にのみ&&
次のコマンド ( ) を実行するようにシェルに指示します。sleep 3s
ただし、--kiosk
起動時に Chrome を全画面表示にして、スクリプトの残りの部分をスキップすることもできます。
答え2
sleep
スクリプトは問題なさそうですが、そんなに多くの呼び出しを挿入する必要はないと思いますsleep
。非同期タスクの完了を判断できないために発生する競合状態を回避するために、通常、 を使用します。たとえば、 を実行してwget
リモート スクリプトの実行を開始し、サーバーがフォローアップできるファイルを生成するのに十分な時間を待機するとGET
、そのファイルがいつ準備できるかわからないという状況を回避するためにおそらく を使用しますsleep
。これはちょっと不格好ですが、ほとんどの人が必要とする機能を果たします。
ただし、ここでのsleep
は実際には意味がありません。たとえば、 が機能するchrome
前に を起動しても、それほど害はないと思います。また、完了を待っている非同期タスクもありません (IPC は関係していますが、通信が完了する前に が返されることはないと思います)。そのため、 を 3 秒挿入するのは過剰に思えます。ただし、 はいくらでも不要だと思います。unclutter
wmctl
wmctl
sleep
sleep
答え3
それが問題かどうかはわかりませんが、アクティブ ウィンドウの変更は信頼できません。スリープ中に他の何かによってアクティブ ウィンドウが変更される可能性があります。代わりに、xdotool
目的のウィンドウにキーを送信するように指示する必要があります。
xdotool search --class Google-chrome -- key F11
l0b0が述べたように代わりにを使用することをお勧めしますgoogle-chrome --kiosk …
。