Comment mettre à jour DBUS_SESSION_BUS_ADDRESS dans tmux lorsque cette adresse change?

2

J'ai remarqué que je ne peux pas utiliser steam dans un volet tmux: cela m'a causé une erreur

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.

En même temps, il n’ya pas de problème de ce type dans un terminal classique. Cela m’a amené à la conclusion que quelque chose de différent dans l’environnement du programme, j’avais raison, après avoir exporté l’environnement des deux terminaux.

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

Et en les différenciant

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

J'ai remarqué que DBUS_SESSION_BUS_ADDRESS diffère

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

Ce doit être parce que je peux redémarrer X et que l'environnement dans les tmuxsessions n'est pas affecté par le dbus-launchqui se passe dans ma commande de démarrage WM dans ~ / .xinitrc:

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

Alors, comment puis-je mettre à jour cette variable lorsque l'adresse change? ..

Tijagi
la source

Réponses:

2

/ moi bête. Je devais simplement réexporter DBUS_SESSION_BUS_ADDRESS dans mes fenêtres tmux dans le script de démarrage automatique lorsque je vérifie s'il est déjà en cours d'exécution ou s'il doit démarrer.

Donc, la section relative à tmux dans mon autorun.sh ressemble maintenant à ça:

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]+):.*/\1/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

La première C-cconsiste à effacer tout ce qui pourrait rester sur la ligne avant d'exécuter des commandes d'exportation. La seconde consiste à effacer la ligne par la suite (tmux ou bash copieront les commandes sur la ligne de commande, je ne sais pas pourquoi)

Tijagi
la source
Non, je me suis trompé. Cela n'aide pas. Ou ce n'est pas suffisant.
Tijagi
Bien sûr que non, j'ai oublié d'exporter DISPLAYaussi! Maintenant cela fonctionne bien.
Tijagi