Configure a variável de ambiente para todos os shells do tmux quando o gnome-sessions for reiniciado

3

Para resolver este problema , eu preciso definir a variável de ambiente DBUS_SESSION_BUS_ADDRESS para todos os shells dentro de tmux every vez eu reinicio o gnome sem reiniciar o tmux (isso é freqüentemente). Como posso resolver isso melhor?

Existe outra maneira de corrigir isso de uma maneira mais limpa?

    
por gerrit 06.03.2013 / 15:14

1 resposta

4

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.

    
por 07.03.2013 / 01:20