O script Bash funciona corretamente após a inicialização da GUI, mas funciona de maneira diferente quando chamado de Autostart

3

o script é chamado de /home/pi/.config/lxsessions/LXDE-pi/autostart com a linha:

@bash /home/pi/Documents/openContent.sh   /media/pi   index.html   http:/google.com

e openContent.sh é:

#!/bash
# $1 defines path we search
# $2 defines name of file we're searching for
# $3 defines default URL if we can't find the thing we're searching for
path="$(find $1 -name $2 | head -n 1)"
if [ -f "$path" ]; then
  echo "content found at $path"
  chromium-browser --incognito --kiosk $path
  exit
else
  echo "content was not found in $1
  chromium-browser --incognito --kiosk $3
fi

Quando executo o script do terminal após a inicialização, ele funciona como esperado. Se eu pesquisar com os mesmos argumentos, ele abrirá a página da Web a partir do USB. Se eu der um nome aleatório para procurar por algo que não está lá, ele irá abrir o google.com (já que ele não pode encontrá-lo em / media / pi. Tudo isso é bom

No entanto, ao reinicializar e executar a partir da execução automática, ela irá invariavelmente para o google.com. Se eu substituir a linha:

@sh /home/pi/Documents/openContent.sh   /media/pi   index.html   http:/google.com

Com:

@chromium-browser --incognito --kiosk /media/pi/DISK_IMG/index.html

abre a página - por isso não parece ser um problema o carregamento da unidade USB atrasar ou eu não esperaria que funcionasse.

Eu acho que isso é apenas algo que estou fazendo de errado com o script bash ou passando argumentos no autostart, mas não sei o quê. Alguma idéia?

editar:

Eu tentei adicionar um sleep 30 ao topo do openContent.sh e funcionou. isso é um pouco perturbador, porque eu realmente não quero codificar um atraso lá. Este é um problema conhecido com dispositivos USB / de localização, que eles carregam algum tempo após o ambiente GUI / desktop?

Isso meio que faz sentido, porque basicamente o cromo não pode realmente tentar ver o diretório até que o sistema de arquivos esteja pronto, então se eu passar um URL explícito, ele vai confiar em mim e ir até lá, e quando chegar Ao olhar para lá, o sistema de arquivos está pronto, mas se eu procurar primeiro, os resultados dizem que não há nada lá.

    
por OtterFamily 17.02.2017 / 16:16

1 resposta

0

Portanto, parece que há apenas um atraso entre a execução de /home/pi/.config/lxsessions/LXDE-pi/autostart e a montagem automática de quaisquer unidades, por isso modifiquei meu script bash para tentar encontrar o arquivo no primeiro minuto e, em seguida, recorrer a um padrão. Isso geralmente é acionado nos primeiros segundos, então não está muito sujo nem muito longo.

Eu acho que o motivo pelo qual chamar um URL específico funcionou, mas tentar encontrá-lo na inicialização não, é porque o atraso entre o lançamento do cromo e o sistema de arquivos que verifica as unidades montadas é quase o mesmo, então no momento lança, o URL dado ao cromo é válido. Considerando que ao fazer uma operação de localização, isso acontece muito mais rápido e retorna nulo antes que o sistema de arquivos possa montar unidades, portanto, o chrome é aberto com o URL padrão.

O seguinte código provavelmente poderia ser otimizado abrindo o padrão como a primeira ação e, em seguida, tentando encontrar o arquivo real, matando o chrome quando bem sucedido e relançando com o URL correto, mas por enquanto isso funciona:

#!/bin/bash
# $1 Defines the path that we will look in
# $2 Defines the name of the file we're looking for
# $3 Defines the path to a default file if not found


delayTime=1s

for i in {0..60}
 do
  path="$(find $1 -name $2 | head -n 1)"
  if [ -f "$path" ];then
   echo "content found at $path"
   chromium-browser --incognito --kiosk $path
   exit
  else
   echo "content was not found on attempt $i"
   sleep $delayTime
  fi
 done

chromium-browser --incognito --kiosk $3
exit
    
por 21.02.2017 / 16:00