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

1

Eu tenho um script que invoco no boot do sistema (Ubuntu 10.04) "Startup Applications".

script:

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

A minha capacidade de scripting HORRENDOUS de lado, quaisquer ideias sobre o motivo pelo qual o Chrome não SEMPRE deterministicamente vai para o ecrã inteiro como eu esperava?

Estou coçando a cabeça, incapaz de entender por que ele vai para tela cheia, às vezes, mas não o tempo todo. Como um aparte, qualquer melhoria neste script seria muito apreciada.

Obrigado.

    
por cyberjar09 07.05.2014 / 12:43

3 respostas

3

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

Não sei como wmctrl funciona, mas parece um pouco incongruente que você use && no final dessa linha. Isso não explica o processo, 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 no Chrome de tela cheia na inicialização e pular o restante do script.

    
por 07.05.2014 / 13:46
1

Seu script parece ótimo, mas não acho que você precise inserir tantas invocações sleep nele. As pessoas geralmente usam sleep para contornar as condições de corrida causadas por não conseguir determinar a conclusão de alguma tarefa assíncrona. Por exemplo, fazendo um wget para iniciar a execução remota do script e aguardar o tempo suficiente para o servidor gerar um arquivo que pode fazer um acompanhamento GET on, você provavelmente usaria sleep para se locomover sem saber quando esse arquivo está pronto. É meio desajeitado, mas funciona para o que a maioria das pessoas precisa.

Seu sleep aqui não faz sentido, no entanto. Por exemplo, eu não acho que muito dano virá se chrome for iniciado antes que unclutter tenha a chance de fazer sua parte. Também não há tarefa assíncrona que você esteja esperando para concluir com wmctl (bem, há IPC envolvido, mas não acho que wmctl retornaria antes da comunicação já ter sido concluída), portanto inserir três segundos de sleep parece excessivo . Eu acho que qualquer quantidade de sleep seria desnecessária, no entanto.

    
por 07.05.2014 / 16:01
0

Eu não sei se esse é o seu problema, mas alterar a janela ativa não é confiável: algo mais pode alterar a janela ativa durante o seu sono. Em vez disso, você deve informar xdotool para enviar a chave para a janela desejada.

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

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

    
por 08.05.2014 / 04:43