Tuve un problema similar. En mi situación, la configuración DISPLAY
no fue suficiente. De manera predeterminada, parte del entorno se establece al iniciar el servidor tmux (al iniciar la primera sesión), no cualquier sesión nueva. Lo siguiente funciona para mí, pero dudo que sea óptimo.
En .tmux.conf
, haga que tmux recuerde las variables que desea mantener del entorno externo. Usé unos que diferían entre el uso local de Gnome Terminal y el uso remoto de Terminal.app. Algunos de ellos probablemente no sean necesarios, pero no estoy seguro de cuál. La -g
bandera puede no ser correcta.
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 \
"
A pesar del nombre "update-environment", la configuración no parece cambiar realmente el entorno. Sin embargo, puede recuperarlo usando tmux show-environment
. Entonces lo usé para actualizar el entorno en mi .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
}
Usar tmux show-environment -s
probablemente hubiera sido mejor. Pero no sabía sobre eso hasta que releí una parte man tmux
para escribir esta respuesta.
Aún así, a veces tengo que separar y volver a conectar, cuando uso una sesión existente. Aunque es mucho menos molesto que antes.
Revelación completa: la idea de usar tmux show-environment
en los ganchos precmd
y preexec
no era mía, pero olvido dónde lo vi. Gracias a quien escribió eso, donde sea que lo hayas escrito.