A motivação para essa dica é que alguns aplicativos podem não funcionar corretamente se no momento em que forem iniciados não existir conexão ativa com a internet.
Exemplos de aplicativos que agem dessa forma:
- Thunderbird: https://wiki.archlinux.org/index.html/thunderbird
Justificativa: Se o Thunderbird for inicializado sem conexão com a internet, fica em estado offine mesmo após a conexão ser realizada, sendo necessário abrir o aplicativo e atualizar a página. - Rambox: https://aur.archlinux.org/packages/rambox-bin/
Justificativa: A mesma do Thunderbird. - Steam: https://wiki.archlinux.org/index.html/steam
Justificativa: Quando aberto ele tenta se conectar ao servidor do Steam, se não existir conexão com a internet a tentativa falha e uma janela é aberta informando o problema.
A abordagem que eu estava tomando antes para tentar resolver esse problema era a explicada nesse tópico do fórum: -t4386.html
Basicamente eu fazia com que os programas que precisavam de conexão com internet na inicialização "dormissem" por alguns segundos, aguardando um certo tempo predeterminado antes de inicializarem.
O problema dessa abordagem é que não é possível determinar de antemão quanto tempo é necessário aguardar até a conexão com a internet ficar ativa, eu tentava algo em torno de 5s~10s, mas mesmo assim de vez em quando a conexão demorava mais do que isso para ficar ativa e então os aplicativos eram iniciados sem conexão com a internet e o problema continuava.
A nova solução é simples, usando a ferramenta nativa do sistema chamada ping: http://man7.org/linux/man-pages/man8/pi ... %A0PACKETS
posso testar se a conexão com a internet está ativa e ficar aguardando até a mesma ocorrer com sucesso, após isso basta chamar todos os aplicativos que dependem da conexão com a internet.
A dica foi baseada nessa resposta: http://serverfault.com/questions/42021/ ... t-is-known
Para colocar isso em prática, crie um script no diretório /usr/bin com o nome que você desejar, eu decidi chamá-lo waitConnection.sh, utilize o comando abaixo para criar o arquivo com as permissões corretas:
- Código: Selecionar todos
sudo install -b -m 755 /dev/null /usr/bin/waitConnection.sh
Agora edite o arquivo com o seguinte conteúdo:
- Código: Selecionar todos
#!/bin/bash
while ! ping -c1 www.google.com &>/dev/null; do sleep 5; done
Explicação:
Basicamente esse é um loop que testa a cada 5 segundos se a conexão com a internet está ativa, ele fica fazendo isso até a conexão com a internet ficar ativa.
Agora basta você sempre executar esse script antes de todos os programas que precisam de conexão com internet ativa no momento da inicialização, exemplo:
![Imagem](https://i.imgur.com/CZsTEnk.png)
Repare no comando que usei:
- Código: Selecionar todos
bash -c "/usr/bin/waitConnection.sh && /usr/bin/thunderbird &"
Explicação: Basicamente o comando /usr/bin/thunderbird só será executado após o comando /usr/bin/waitConnection.sh terminar, ou seja, o programa Thunderbird não será executado até a conexão com a internet ficar ativa.
@edit
Uma outra dica, passei a centralizar todos os aplicativos que necessitam de internet na inicialização em um único arquivo de inicialização:
![Imagem](https://i.imgur.com/YZqzDUG.png)
- Código: Selecionar todos
bash -c "/usr/bin/waitConnection.sh && (/usr/bin/thunderbird & /opt/rambox/Rambox & dropbox & pamac-tray &) &"
Dessa maneira existem 3 vantagens:
- Mais fácil de manter pois todas as alterações são feitas em apenas um local.
- Maior desempenho, pois apenas 1 processo waitConnection.sh vai ficar executando, ao invés de múltiplos para cada aplicativo que fica aguardando conexão.
- Esse é um bônus, só fui perceber agora, no momento da inicialização, se o seu computador não estiver conectado a internet, a inicialização ocorre muito mais rapidamente, pois apenas os aplicativos essenciais são carregados, descartando aqueles que não funcionam sem conexão com internet ativa, foi por esse motivo que decidi adicionar o pamac-tray a listagem.
@edit2
Tive relatos de um usuário que não conseguiu fazer com que o comando ping reconhecesse a sua conexão com internet, se você estiver nesse grupo então utilize o seguinte conteúdo para o arquivo waitConnection.sh:
- Código: Selecionar todos
#!/bin/bash
while ! wget -q --spider www.google.com &>/dev/null; do sleep 5; done