2 votes

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

J'ai remarqué que je ne pouvais pas lancer steam dans un panneau tmux : j'ai obtenu l'erreur suivante

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.

Alors que dans le même temps, il n'y a pas de problème de ce type dans un terminal habituel. Cela m'a amené à la conclusion que quelque chose diffère dans l'environnement du programme, et j'avais raison, après avoir exporté l'environnement des deux terminaux

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

Et les différencier

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

J'ai remarqué que DBUS_SESSION_BUS_ADDRESS est différent

-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 l'environnement en tmux n'est pas affectée par les sessions de dbus-launch qui prend place dans ma commande de démarrage de WM dans ~/.xinitrc :

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

Comment mettre à jour cette variable en cas de changement d'adresse ?

2voto

Ben Fletcher Points 11

/Je suis bête. J'avais juste besoin de réexporter DBUS_SESSION_BUS_ADDRESS dans mon tmux Windows dans le script d'autostart lorsque je vérifie s'il est déjà en cours d'exécution ou s'il doit démarrer.

La section relative à tmux dans mon autorun.sh ressemble donc maintenant à cela :

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

Le premier C-c est de nettoyer la ligne de tout ce qui pourrait s'y trouver avant d'exécuter les commandes d'exportation. La seconde est d'effacer la ligne après (tmux ou bash copieront les commandes sur la ligne de commande, je ne sais pas pourquoi).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X