Corrigir uma entrada de arranque automático da VPN que só inicia num ambiente de trabalho
Um iniciador de VPN que arranca num ambiente de trabalho e não noutro é um filtro na entrada do ambiente, não uma falha do túnel. Leia primeiro OnlyShowIn, TryExec e a substituição.
O cliente VPN arranca a partir do menu de aplicações, o túnel liga-se e o ícone nunca aparece após a sessão iniciada numa máquina, enquanto o mesmo pacote se comporta corretamente noutra. Três observações são esmagadas numa única queixa: se o programa arrancou, se a sua interface está visível e se o túnel está ativo. O iniciador é regido por uma entrada de ambiente de trabalho com chaves de filtragem, e essa entrada não tem nada a ver com o protocolo VPN. Percorra o guia por ordem e pare quando uma das três coisas se separar com clareza.
Três factos separados: arranque, ícone, túnel
Uma entrada de ambiente de trabalho inicia um programa. Não pode instalar uma implementação de bandeja e não pode fazer aparecer um indicador num painel que não suporta o protocolo usado pela aplicação. Se o processo já está a correr, a pergunta do arranque está respondida e está antes a olhar para um problema de integração.
O túnel é novamente um terceiro facto. Um ícone em falta não é prova de que a ligação caiu, e matar e reiniciar o cliente para «corrigir» o ícone é exatamente a forma como um túnel a funcionar é interrompido sem razão. Os utilizadores relatam o ícone em falta e o túnel quebrado na mesma frase, e é por isso que os dois têm de ser separados no papel.
Separe-os antes de mudar o que quer que seja. Verifique se o processo existe, depois se o painel suporta o indicador e por fim se a interface relata uma ligação. Cada resposta aponta para uma camada diferente e para um responsável diferente.
Encontre a entrada que a sessão lê de facto
As entradas de arranque automático vivem no diretório do utilizador e no diretório do sistema, e quando os nomes dos ficheiros coincidem ganha a cópia do utilizador. Ler a entrada errada é o motivo mais comum para uma alteração parecer não ter efeito. Liste ambos os diretórios antes de editar seja o que for e anote qual ficheiro a sessão vai realmente carregar.
ls -l ~/.config/autostart/ /etc/xdg/autostart/ echo "$XDG_CURRENT_DESKTOP" grep -H -E '^(OnlyShowIn|NotShowIn|TryExec|Hidden|Exec)=' ~/.config/autostart/*.desktop /etc/xdg/autostart/*.desktop
A variável de ambiente imprime o nome da sessão com que as chaves de filtragem são comparadas, e normalmente é uma lista separada por dois pontos. Compare-a literalmente com os valores da entrada, porque esses nomes são detalhes de configuração sensíveis a maiúsculas e não uma descrição da sessão. Um valor GNOME não corresponde a gnome, e o silêncio resultante não tem qualquer mensagem de erro associada. Imprima-a em vez de a assumir.
Se o mesmo nome de ficheiro existir nos dois diretórios, é a cópia do utilizador que conta. Editar o ficheiro do sistema e perguntar porque nada mudou é uma hora perdida muito comum.
Leia as chaves de filtragem, por ordem
A entrada ilustrativa abaixo mostra as chaves que decidem se uma sessão inicia o programa. É um fragmento, não um iniciador completo, e os valores pertencem a um caminho fictício.
[Desktop Entry] Type=Application Name=Example VPN Exec=/opt/example-vpn/client --minimized TryExec=/opt/example-vpn/client OnlyShowIn=GNOME;
OnlyShowIn restringe a entrada aos ambientes listados e NotShowIn exclui os listados. A especificação não define um comportamento útil quando ambos aparecem numa mesma entrada, por isso trate um ficheiro que contenha os dois como um defeito e não como uma combinação engenhosa. Remova a chave de que não precisa em vez de acrescentar a segunda e esperar por uma regra de precedência.
TryExec pergunta se o executável existe antes de a sessão o iniciar. Por isso um caminho que ficou de uma instalação antiga suprime o arranque automático mesmo que o novo pacote funcione quando iniciado a partir do menu, e essa falha parece exatamente um filtro de ambiente de trabalho.
Substitua ao nível do utilizador, não ao nível do sistema
Quando o filtro está genuinamente errado para esta máquina, copie a entrada do sistema para o diretório do utilizador e altere a cópia. Segundo as regras de arranque automático XDG, uma entrada de utilizador com o mesmo nome tem precedência, e Hidden=true desativa uma entrada sem apagar o ficheiro do sistema.
mkdir -p ~/.config/autostart cp /etc/xdg/autostart/example-vpn.desktop ~/.config/autostart/ sed -i '/^OnlyShowIn=/d' ~/.config/autostart/example-vpn.desktop desktop-file-validate ~/.config/autostart/example-vpn.desktop
Valide o resultado antes de terminar a sessão, porque uma entrada mal formada é ignorada em silêncio e o teste seguinte não lhe diz nada. Reinstalar o pacote não removerá a sua substituição, o que é o objetivo e também a razão para registar que existe. Anote o caminho do ficheiro no ticket para que a próxima pessoa encontre a substituição em vez de a deduzir de novo.
Prefira isto a editar iniciadores de sistema partilhados, que mudam o comportamento de todos os utilizadores da máquina e não são revistos da mesma forma. Uma substituição ao nível do utilizador é visível num só lugar, reversível apagando um ficheiro e fácil de explicar num ticket. O ficheiro do sistema fica como o fornecedor o enviou, por isso uma atualização do pacote não desfaz silenciosamente o seu raciocínio.
Confirme o arranque sem tocar no túnel
Termine a sessão e volte a entrar, e confirme depois que o processo existe antes de olhar para o painel. Um arranque bem-sucedido e um ícone visível são dois resultados diferentes, e só o segundo precisa de trabalho de integração com o ambiente de trabalho. Confundi-los leva-o a reinstalar um pacote que funcionava desde o início.
pgrep -af example-vpn systemctl --user status example-vpn.service journalctl --user -b --no-pager | grep -i example-vpn | tail -20
Se o processo estiver ausente, releia a entrada à procura de um filtro restante ou de um caminho TryExec obsoleto. Se estiver presente, o iniciador funcionou e o ícone em falta é um problema separado com o suporte de indicadores do painel, não com a entrada que acabou de editar.
Registe as três observações no ticket: iniciado, visível, ligado. Esse registo impede a próxima pessoa de repetir a mesma confusão tripla e deixa claro que camada ainda precisa de trabalho.