Ho avuto un problema simile. Nella mia situazione, l'impostazione DISPLAY
non 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 -g
bandiera 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 -s
probabilmente sarebbe stato meglio. Ma non lo sapevo fino a quando non ho letto di nuovo una parte man tmux
per 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-environment
in the precmd
e preexec
hook non era la mia, ma dimentico dove l'ho vista. Grazie a chiunque l'abbia scritto, ovunque tu l'abbia scritto.