Neste caso específico, em vez de permitir que o Gnome execute dbus-launch
para criar um endereço D-Bus aleatório, inicie dbus-daemon
explicitamente no início da sua inicialização do X session e forneça um endereço fixo como unix:path=~/.dbus-$HOSTNAME-$DISPLAY
.
Dadas as informações no relatório de erros , você pode até conseguir com unset DBUS_SESSION_BUS_ADDRESS
e deixe os aplicativos descobrirem o endereço do barramento nas propriedades da janela raiz.
No caso geral, sua avaliação está correta: tudo que você tem são métodos não confiáveis como ptrace
(que pode travar o programa ou não funcionar devido a uma estrutura de segurança como Apparmor ou SELinux) ou injetar um comando shell (que só funciona em painéis que estão atualmente em um prompt de shell). Executar um comando em cada prompt do shell (com preexec
do zsh ou PROMPT_COMMAND
do bash) pelo menos não arrisca quebrar coisas.
Outra solução seria uma biblioteca LD_PRELOAD
que intercepte as chamadas getenv
. Isso também parece um exagero.
Sua melhor aposta é permitir que o aplicativo faça o trabalho criando um nível de indireção: providencie para que o valor da variável de ambiente permaneça válido e que o aplicativo interprete-o de uma maneira que reconheça a situação. Deixar o aplicativo procurar o endereço do barramento D-Bus nas propriedades da janela raiz é um exemplo dessa abordagem.