Bash Script não determinístico na execução de ações

Bash Script não determinístico na execução de ações

Eu tenho um script bash que invoco na inicialização do sistema (Ubuntu 10.04) "Aplicativos de inicialização".

roteiro:

#!/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

Deixando de lado minha HORRENDA habilidade de script, alguma idéia de por que o Chrome SEMPRE não vai deterministicamente para tela inteira como eu esperava?

Estou coçando a cabeça e não consigo entender por que às vezes fica em tela cheia, mas não o tempo todo. Além disso, quaisquer melhorias neste script seriam muito apreciadas.

Obrigado.

Responder1

Parece que um problema de tempo pode estar causando isso - talvez algo esteja em primeiro plano nos três segundos entre focar o Chrome e pressionar F11.

Não tenho certeza de como wmctrlfunciona, mas parece um pouco incongruente o que você usa &&no final dessa linha. Isso não coloca o processo em segundo plano, mas instrui o shell a executar o próximo comando ( sleep 3s) somente se o comando for bem-sucedido.

No entanto, você pode simplesmente usar --kiosko Chrome em tela cheia na inicialização e pular o resto do script.

Responder2

Seu script parece bom, mas não acho que você precise inserir tantas sleepinvocações nele. As pessoas normalmente usam sleeppara contornar as condições de corrida causadas pela incapacidade de determinar a conclusão de alguma tarefa assíncrona. Por exemplo, fazer um wgetpara iniciar a execução remota do script e esperar tempo suficiente para que o servidor gere um arquivo que possa fazer um acompanhamento GET, você provavelmente usaria sleeppara evitar saber quando esse arquivo está pronto. É meio desajeitado, mas funciona para o que a maioria das pessoas precisa.

Mas o seu sleepestá aqui realmente não faz sentido. Por exemplo, não creio que haja muito dano se chromea inicialização antes uncluttertiver a chance de fazer seu trabalho. Também não há nenhuma tarefa assíncrona que você esteja esperando para concluir wmctl(bem, há IPC envolvido, mas não acho que wmctlretornaria antes que a comunicação já tivesse terminado), portanto, inserir três segundos sleepparece excessivo. Eu acho que qualquer quantidade sleepseria desnecessária, no entanto.

Responder3

Não sei se esse é o seu problema, mas alterar a janela ativa não é confiável: outra coisa pode alterar a janela ativa durante o sono. Em vez disso, você deve xdotoolenviar a chave para a janela desejada.

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

Como l0b0 observou, você provavelmente deveria usar google-chrome --kiosk ….

informação relacionada