Eu tive um problema parecido. Na minha situação, o cenário DISPLAY
não era suficiente. Por padrão, parte do ambiente é configurada ao iniciar o servidor tmux (ao iniciar a primeira sessão), não apenas para qualquer nova sessão. O seguinte funciona para mim, mas duvido que seja ideal.
Em .tmux.conf
, faça o tmux lembrar as variáveis que você deseja manter do ambiente externo. Eu usei aqueles que diferiam localmente usando o Gnome Terminal e remotamente usando o Terminal.app. Alguns deles provavelmente não são necessários, mas não sei ao certo. O -g
sinalizador pode não estar correto.
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 \
"
Apesar do nome "ambiente de atualização", a configuração não parece realmente alterar o ambiente. No entanto, você pode recuperá-lo usando tmux show-environment
. Então eu usei para atualizar o ambiente no meu .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
provavelmente teria sido melhor. Mas eu não sabia disso até reler parte do man tmux
texto para escrever esta resposta.
Ainda assim, tenho que desanexar e reconectar algumas vezes, ao usar uma sessão existente. Embora seja muito menos irritante do que antes.
Divulgação completa: a ideia de usar tmux show-environment
os ganchos precmd
e preexec
não era minha, mas esqueço onde a vi. Obrigado a quem escreveu isso, onde quer que você tenha escrito.