Bash Script no es determinista al realizar acciones

Bash Script no es determinista al realizar acciones

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 wmctrlfunciona, 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 --kioskChrome en pantalla completa al iniciar y omitir el resto del script.

Respuesta2

Tu script se ve bien, pero no creo que necesites insertar tantas sleepinvocaciones en él. Las personas suelen sleepsortear las condiciones de carrera provocadas por la incapacidad de determinar la finalización de alguna tarea asincrónica. Por ejemplo, al hacer un comando wgetpara 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 sleeppara 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 chromecomienza antes de uncluttertener 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 wmctlregrese antes de que la comunicación haya terminado), por lo que insertar tres segundos sleepparece excesivo. Sin embargo , creo que cualquier cantidad sleepserí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 xdotoolque 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.

información relacionada