Ich habe ein Bash-Skript, das ich beim Systemstart (Ubuntu 10.04) aufrufe: „Startup Applications“.
Skript:
#!/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
Abgesehen von meinen SCHRECKLICHEN Skripting-Fähigkeiten, irgendwelche Ideen, warum Chrome nicht IMMER deterministisch in den Vollbildmodus wechselt, wie ich es erwarte?
Ich kann mir nicht erklären, warum es manchmal, aber nicht immer, auf Vollbild umschaltet. Abgesehen davon wäre ich für jede Verbesserung dieses Skripts sehr dankbar.
Danke.
Antwort1
Dies scheint durch ein Timing-Problem verursacht zu werden – möglicherweise wird in den drei Sekunden zwischen dem Fokussieren von Chrome und dem Drücken von etwas in den Vordergrund gerückt F11.
Ich bin nicht sicher, wie wmctrl
das funktioniert, aber es scheint ein wenig unpassend, dass Sie &&
am Ende dieser Zeile verwenden. Dadurch wird der Prozess nicht in den Hintergrund gestellt, sondern die Shell wird angewiesen, den nächsten Befehl ( sleep 3s
) nur auszuführen, wenn der Befehl erfolgreich ist.
Sie können Chrome jedoch --kiosk
beim Start einfach im Vollbildmodus verwenden und den Rest des Skripts überspringen.
Antwort2
Ihr Skript sieht gut aus, aber ich glaube nicht, dass Sie so viele sleep
Aufrufe darin einfügen müssen. Normalerweise verwenden Leute es, sleep
um Race Conditions zu umgehen, die dadurch entstehen, dass sie den Abschluss einer asynchronen Aufgabe nicht feststellen können. Wenn Sie beispielsweise ein ausführen, wget
um die Remote-Skriptausführung zu starten und lange genug zu warten, bis der Server eine Datei generiert hat, die sie weiterverfolgen können GET
, würden Sie es wahrscheinlich verwenden, sleep
um nicht zu wissen, wann diese Datei fertig ist. Es ist etwas umständlich, aber es funktioniert für die Bedürfnisse der meisten Leute.
Ihre sleep
's hier ergeben jedoch nicht wirklich Sinn. Ich denke zum Beispiel nicht, dass viel Schaden entsteht, wenn es chrome
startet, bevor unclutter
es die Chance hat, seine Arbeit zu erledigen. Es gibt auch keine asynchrone Aufgabe, auf deren Abschluss Sie warten wmctl
(es ist zwar IPC beteiligt, aber ich glaube nicht, dass wmctl
es zurückkehren würde, bevor die Kommunikation bereits beendet ist), daher erscheint das Einfügen von drei Sekunden sleep
übertrieben. Ich würde jedoch denken, dass jede beliebige Menge sleep
unnötig wäre.
Antwort3
Ich weiß nicht, ob das Ihr Problem ist, aber das Ändern des aktiven Fensters ist unzuverlässig: Etwas anderes könnte das aktive Fenster während Ihres Schlafs ändern. Stattdessen sollten Sie anweisen, xdotool
den Schlüssel an das gewünschte Fenster zu senden.
xdotool search --class Google-chrome -- key F11
Wie l0b0 bemerkte, sollten Sie google-chrome --kiosk …
stattdessen wahrscheinlich verwenden.