Ho avuto un problema simile. Nella mia situazione, l'impostazione DISPLAYnon era abbastanza. Per impostazione predefinita, parte dell'ambiente viene impostato all'avvio del server tmux (all'avvio della prima sessione), non solo a qualsiasi nuova sessione. Quanto segue funziona per me, ma dubito che sia ottimale.
In .tmux.conf, fai in modo che tmux ricordi le variabili che vuoi mantenere dall'ambiente esterno. Ho usato quelli che differivano tra localmente usando Gnome Terminal e in remoto usando Terminal.app. Alcuni di loro probabilmente non sono necessari, ma non sono sicuro di quale. La -gbandiera potrebbe non essere corretta.
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 \
"
Nonostante il nome "ambiente di aggiornamento", l'impostazione non sembra realmente modificare l'ambiente. È possibile, tuttavia, recuperarlo utilizzando tmux show-environment. Quindi l'ho usato per aggiornare l'ambiente nel mio .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
}
Usare tmux show-environment -sprobabilmente sarebbe stato meglio. Ma non lo sapevo fino a quando non ho letto di nuovo una parte man tmuxper scrivere questa risposta.
Tuttavia, devo staccare e ricollegare a volte, quando si utilizza una sessione esistente. Anche se è molto meno fastidioso di prima.
Divulgazione completa: l'idea di utilizzare tmux show-environmentin the precmde preexechook non era la mia, ma dimentico dove l'ho vista. Grazie a chiunque l'abbia scritto, ovunque tu l'abbia scritto.