操作を実行すると、Bashスクリプトが不確実です

操作を実行すると、Bashスクリプトが不確実です

システムが起動したとき(Ubuntu 10.04)、「アプリケーションの起動」を呼び出すbashスクリプトがあります。

スクリプト:

#!/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最初に始めてunclutterその仕事をする機会があったとしたら、大きな害を及ぼすとは思いません。また、完了を待つ非同期操作もないので(もちろん、IPCが関係しているが通信が完了するまで返されないようwmctlです)、3秒を挿入するのは過度に見えます。しかし、金額は必要ないと思います。wmctlsleepsleep

答え3

これがあなたの問題かどうかはわかりませんが、アクティブウィンドウを変更することは信頼できません。眠っている間、他の何かがアクティブなウィンドウを変更することができます。代わりに、xdotool必要なウィンドウにキーを送信するように指示する必要があります。

xdotool search --class Google-chrome -- key F11

l0b0が言ったように、おそらく代わりに使用する必要がありますgoogle-chrome --kiosk …

関連情報