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 wmctrl
funciona, 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 --kiosk
o 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 sleep
invocações nele. As pessoas normalmente usam sleep
para contornar as condições de corrida causadas pela incapacidade de determinar a conclusão de alguma tarefa assíncrona. Por exemplo, fazer um wget
para 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 sleep
para evitar saber quando esse arquivo está pronto. É meio desajeitado, mas funciona para o que a maioria das pessoas precisa.
Mas o seu sleep
está aqui realmente não faz sentido. Por exemplo, não creio que haja muito dano se chrome
a inicialização antes unclutter
tiver 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 wmctl
retornaria antes que a comunicação já tivesse terminado), portanto, inserir três segundos sleep
parece excessivo. Eu acho que qualquer quantidade sleep
seria 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 xdotool
enviar a chave para a janela desejada.
xdotool search --class Google-chrome -- key F11
Como l0b0 observou, você provavelmente deveria usar google-chrome --kiosk …
.