J'avais un problème similaire. Dans ma situation, le réglage DISPLAY
n'était pas suffisant. Par défaut, une partie de l'environnement est définie lors du démarrage du serveur tmux (lors du démarrage de la première session), et pas n'importe quelle nouvelle session. Ce qui suit fonctionne pour moi, mais je doute qu'il soit optimal.
Dans .tmux.conf
, faites en sorte que tmux se souvienne des variables que vous souhaitez conserver de l'environnement extérieur. J'ai utilisé ceux qui différaient localement en utilisant Gnome Terminal et à distance en utilisant Terminal.app. Certains d'entre eux ne sont probablement pas nécessaires, mais je ne sais pas lequel. Le -g
drapeau n'est peut-être pas correct.
set -g update-environment "\
CLUTTER_IM_MODULE \
DBUS_SESSION_BUS_ADDRESS \
DBUS_SESSION_BUS_ADDRESS \
DEFAULTS_PATH \
DESKTOP_AUTOSTART_ID \
DESKTOP_SESSION \
DISPLAY \
GDMSESSION \
GNOME_DESKTOP_SESSION_ID \
GPG_AGENT_INFO \
GTK_IM_MODULE \
GTK_MODULES \
SESSION_MANAGER \
SSH_AGENT_PID \
SSH_ASKPASS \
SSH_AUTH_SOCK \
SSH_CONNECTION \
WINDOWID \
WINDOWPATH \
XAUTHORITY \
XDG_CONFIG_DIRS \
XDG_CURRENT_DESKTOP \
XDG_DATA_DIRS \
XDG_MENU_PREFIX \
XDG_RUNTIME_DIR \
XDG_SEAT \
XDG_SESSION_DESKTOP \
XDG_SESSION_ID \
XDG_SESSION_TYPE \
XDG_VTNR \
XMODIFIERS \
"
Malgré le nom "update-environment", le paramètre ne semble pas réellement changer l'environnement. Vous pouvez cependant le récupérer à l'aide de tmux show-environment
. Je l'ai donc utilisé pour mettre à jour l'environnement dans mon .zshrc
:
zshrc_restore_x11_vars()
{
if [[ -z $TMUX ]]
then
return 0
fi
local tmux_env="$(tmux show-environment)"
for var_line in ${(f)tmux_env}
do
if [[ $var_line == -[A-Za-z_]* ]]
then
local var=${var_line#-}
unset $var
elif [[ $var_line == [A-Za-z_]*'='* ]]
then
export $var_line
fi
done
}
precmd()
{
zshrc_restore_x11_vars
}
preexec()
{
zshrc_restore_x11_vars
}
Utiliser tmux show-environment -s
aurait probablement été mieux. Mais je ne savais pas cela avant d'avoir relu une partie de man tmux
pour écrire cette réponse.
Pourtant, je dois parfois détacher et rattacher, lorsque j'utilise une session existante. Bien que ce soit beaucoup moins ennuyeux qu'auparavant.
Divulgation complète: L'idée d'utiliser tmux show-environment
dans les crochets precmd
et preexec
n'était pas la mienne, mais j'oublie où je l'ai vue. Merci à celui qui l'a écrit, où que vous l'ayez écrit.