Tengo un script bash que invoco al iniciar el sistema (Ubuntu 10.04) "Aplicaciones de inicio".
guion:
#!/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
Dejando a un lado mi HORRENDA capacidad de secuencias de comandos, ¿alguna idea sobre por qué Chrome no SIEMPRE pasa de manera determinista a pantalla completa como esperaba?
Me rasco la cabeza y no puedo entender por qué a veces aparece en pantalla completa, pero no todo el tiempo. Además, cualquier mejora a este script será muy apreciada.
Gracias.
Respuesta1
Parece que un problema de tiempo puede estar causando esto; tal vez algo esté en primer plano en los tres segundos entre enfocar Chrome y presionar F11.
No estoy seguro de cómo wmctrl
funciona, pero parece un poco incongruente que lo uses &&
al final de esa línea. Eso no pone en segundo plano el proceso, sino que indica al shell que ejecute el siguiente comando ( sleep 3s
) sólo si el comando tiene éxito.
Sin embargo, puede simplemente usar --kiosk
Chrome en pantalla completa al iniciar y omitir el resto del script.
Respuesta2
Tu script se ve bien, pero no creo que necesites insertar tantas sleep
invocaciones en él. Las personas suelen sleep
sortear las condiciones de carrera provocadas por la incapacidad de determinar la finalización de alguna tarea asincrónica. Por ejemplo, al hacer un comando wget
para iniciar la ejecución remota del script y esperar el tiempo suficiente para que el servidor genere un archivo al que puedan hacer un seguimiento GET
, probablemente lo usaría sleep
para evitar saber cuándo ese archivo está listo. Es un poco complicado pero funciona para lo que la mayoría de la gente necesita.
Sin embargo, tu sleep
' aquí realmente no tiene sentido. Por ejemplo, no creo que suceda mucho daño si una empresa chrome
comienza antes de unclutter
tener la oportunidad de hacer lo suyo. Tampoco hay ninguna tarea asincrónica que esté esperando completar wmctl
(bueno, hay IPC involucrado, pero no creo que wmctl
regrese antes de que la comunicación haya terminado), por lo que insertar tres segundos sleep
parece excesivo. Sin embargo , creo que cualquier cantidad sleep
sería innecesaria.
Respuesta3
No sé si ese es tu problema, pero cambiar la ventana activa no es confiable: algo más podría cambiar la ventana activa mientras duermes. En su lugar, debería indicarle xdotool
que envíe la clave a la ventana deseada.
xdotool search --class Google-chrome -- key F11
Como comentó l0b0, probablemente deberías usarlo google-chrome --kiosk …
en su lugar.