Um script '/etc/network/if-up.d' é executado, mas não inicia aplicativos GUI (por exemplo, firefox-esr)

2

Eu preciso iniciar firefox-esr quando a rede estiver disponível.

Veja o que eu tenho:

sudo tee "/etc/network/if-up.d/upif" > /dev/null << EOFBOOT
#!/bin/bash
DISPLAY=":0"
if [[ "\$IFACE" = "eth0" || "\$IFACE" = "wlan0" ]]; then
    echo "\$(date) \$IFACE" >> /var/log/upif
    firefox-esr &
fi
EOFBOOT
sudo chmod +x "/etc/network/if-up.d/upif"

Estou obtendo a data e o nome da interface em meu arquivo de log, o que significa que o script é executado, mas firefox-esr não é iniciado.

O que eu tentei:

  • adicionando DISPLAY=":0"
  • grep -inR "firefox" /var/log
  • usando o caminho completo para o executável, por exemplo, /usr/bin/firefox-esr
  • usando sudo firefox-esr &
  • removendo o & à direita

Nada ajudou. No entanto, se eu colocar IFACE="eth0" abaixo do shebang e, em seguida, executar sudo /etc/network/if-up.d/upif manualmente, o script exato que você vê acima executa o trabalho e inicia o Firefox.

Não sei qual é o problema.

Isto é 2018-06-27-raspbian-stretch-lite executando o Debian 9.4.

P.S. Também eu inicialmente tinha lógica verificando se o Firefox já roda antes de tentar iniciá-lo, mas uma vez que percebi que o Firefox não é lançado, eu o removi

UPDATE Encontrou um problema semelhante: Iniciar uma GUI no script do NetworkManager if-up.d

    
por aexl 27.07.2018 / 09:11

2 respostas

3

Os scripts de evento de rede são executados como usuário root, mas o ambiente da sua área de trabalho provavelmente não é (espero).

Esta parece ser uma abordagem problemática em geral. Algumas coisas estão faltando:

  • O Firefox deve ser executado como usuário conectado, não como root.
  • O Firefox precisa ser capaz de se autenticar no servidor X para se conectar a ele (consulte ~/.Xauthority e man xauth ).
  • O ambiente do Firefox precisa ser configurado para funcionar corretamente na sessão da área de trabalho ( HOME , XDG_RUNTIME_DIR etc.)

Eu sugeriria tentar uma abordagem diferente, por exemplo fazer com que o script de rede comunique o status da rede (por meio de um pipe / arquivo temporário / DBus) a algo já em execução na sessão do usuário (lançado, por exemplo, de ~/.xinitrc ), que inicia os aplicativos GUI conforme necessário.

    
por 27.07.2018 / 09:30
0

Graças a Fadabi Nawi , aqui está a resposta:

su pi -c "DISPLAY=:0.0 /usr/bin/firefox-esr &"

Pontos principais:

por 27.07.2018 / 09:32