同様の問題がありました。私の状況では、設定DISPLAY
は十分ではありませんでした。デフォルトでは、新しいセッションだけでなく、tmuxサーバーの起動時(最初のセッションの開始時)に環境の一部が設定されます。以下は私にとってはうまくいきますが、それが最適であるとは思えません。
では.tmux.conf
、あなたが外部環境から維持したいという変数を覚えtmuxは作ります。ローカルでGnomeターミナルを使用する場合とリモートでTerminal.appを使用する場合で異なるものを使用しました。それらのいくつかはおそらく必要ではないかもしれませんが、どちらかはわかりません。-g
フラグが正しくない可能性があります。
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 \
"
「update-environment」という名前にもかかわらず、設定は実際に環境を変更するようには見えません。ただし、を使用して取得できますtmux show-environment
。だから私はそれを使って私の環境を更新しました.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
}
tmux show-environment -s
おそらく使用する方が良いでしょう。しかし、私がman tmux
この答えを書くためにの一部を読み直すまで、私はそれについて知りませんでした。
それでも、既存のセッションを使用するときは、デタッチして再アタッチする必要がある場合があります。以前よりずっと面倒ではありませんが。
完全な開示:and フックで使用tmux show-environment
するという考えは私自身のものではありませんでしたが、どこで見たか忘れてしまいました。どこに書いても、それを書いた人に感謝します。precmd
preexec