Como atualizar o DBUS_SESSION_BUS_ADDRESS no tmux quando esse endereço muda?

1

Eu notei que não posso usar o Steam em um painel tmux: ele me deu um erro

Error: Unable to open a connection to X.  Check your DISPLAY environment
variable and make sure that you have enabled X.  If you are running
remotely, make sure that you have a remote connection which will allow
an X connection.

Quando, ao mesmo tempo, não há esse problema em um terminal comum. Isso me levou a concluir que algo difere no ambiente do programa, e eu estava certo, depois de exportar o ambiente de ambos os terminais

$ env > /tmp/t1
$ env > /tmp/t2

E os diferenciando

$ diff -u /tmp/t{1,2}

Eu percebi que DBUS_SESSION_BUS_ADDRESS é diferente

-DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-CX81GDMBcL,guid=712e96f4ecdc3b9bf1eca21254ed44e3
+DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-axu0HojvNi,guid=a28fcde62f6d40aa587c708a54b83924

Deve ser porque eu posso reiniciar o X e o ambiente em tmux sessions não será afetado pelo dbus-launch que ocorre no meu comando inicial do WM em ~ / .xinitrc:

eval exec ck-launch-session dbus-launch --sh-syntax --exit-with-session i3 &>/dev/null

Então, como atualizo essa variável quando o endereço muda?

    
por tijagi 25.02.2015 / 22:49

1 resposta

1

/ me mudo. Eu só precisei reexportar DBUS_SESSION_BUS_ADDRESS em minhas janelas tmux no script de auto-inicialização quando eu verifiquei se ele já está sendo executado ou se deveria começar.

Portanto, a seção relacionada ao tmux no meu autorun.sh agora é assim:

tmux="tmux -u -f $HOME/.tmux/config -S $HOME/.tmux/socket"
if pgrep -u $UID -f '^tmux.*$' &>/dev/null; then
    for pane in '$tmux list-windows -t0 | sed -r 's/^([0-9]+):.*//g''; do
        $tmux send -t 0:$pane C-c 
        $tmux send -t 0:$pane export DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" ENTER
        $tmux send -t 0:$pane export DISPLAY="$DISPLAY" ENTER
        $tmux send -t 0:$pane C-c
    done
else $tmux \
    new -d su \; \
    set remain-on-exit on \; \
    neww su \; \
    set remain-on-exit on \; \
    select-window -t 0:1
fi

O primeiro C-c é limpar a linha de qualquer coisa que possa ter saído antes de executar comandos de exportação. A segunda é limpar a linha depois (o tmux ou o bash copiarão os comandos para a linha de comando, não sei por que)

    
por 25.02.2015 / 23:27