Miałem podobny problem. W mojej sytuacji ustawienie DISPLAY
nie wystarczyło. Domyślnie niektóre środowiska są ustawione podczas uruchamiania serwera tmux (podczas rozpoczynania pierwszej sesji), a nie tylko każda nowa sesja. Poniższe działa dla mnie, ale wątpię, aby było optymalne.
W .tmux.conf
, spraw, aby tmux zapamiętywał zmienne, które chcesz zachować ze środowiska zewnętrznego. Użyłem tych, które różniły się między lokalnie za pomocą Gnome Terminal i zdalnie za pomocą Terminal.app. Niektóre z nich prawdopodobnie nie są konieczne, ale nie jestem pewien, które. -g
Flaga nie może być prawidłowa.
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 \
"
Pomimo nazwy „update-environment” ustawienie wydaje się nie zmieniać środowiska. Możesz go jednak odzyskać za pomocą tmux show-environment
. Użyłem go więc do aktualizacji środowiska w moim .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
}
Korzystanie tmux show-environment -s
prawdopodobnie byłoby lepsze. Ale nie wiedziałem o tym, dopóki nie przeczytałem ponownie części, man tmux
aby napisać tę odpowiedź.
Mimo to muszę czasami odłączać i ponownie podłączać, korzystając z istniejącej sesji. Chociaż jest to znacznie mniej irytujące niż wcześniej.
Pełne ujawnienie: Pomysł wykorzystania tmux show-environment
w precmd
i preexec
haki nie był mój własny, ale nie pamiętam gdzie to widziałem. Dziękuję każdemu, kto to napisał, gdziekolwiek to napisałeś.