Tôi đã có một vấn đề tương tự. Trong tình huống của tôi, thiết lập DISPLAY
là không đủ. Theo mặc định, một số môi trường được đặt khi khởi động máy chủ tmux (khi bắt đầu phiên đầu tiên), không chỉ bất kỳ phiên mới nào. Những điều sau đây làm việc cho tôi, nhưng tôi nghi ngờ nó là tối ưu.
Trong .tmux.conf
, làm cho tmux nhớ các biến mà bạn muốn giữ từ môi trường bên ngoài. Tôi đã sử dụng những cái khác nhau giữa cục bộ sử dụng Gnome Terminal và từ xa bằng Terminal.app. Một số trong số chúng có thể không cần thiết, nhưng tôi không chắc chắn điều đó. Các -g
lá cờ có thể không chính xác.
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 \
"
Mặc dù tên "môi trường cập nhật", cài đặt dường như không thực sự thay đổi môi trường. Bạn có thể, tuy nhiên, lấy nó bằng cách sử dụng tmux show-environment
. Vì vậy, tôi đã sử dụng nó để cập nhật môi trường trong .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
}
Sử dụng tmux show-environment -s
có lẽ sẽ tốt hơn. Nhưng tôi đã không biết về điều đó cho đến khi tôi đọc lại một phần man tmux
để viết câu trả lời này.
Tuy nhiên, đôi khi tôi phải tách ra và gắn lại, khi sử dụng một phiên hiện có. Mặc dù nó ít gây phiền nhiễu hơn trước.
Tiết lộ đầy đủ: Ý tưởng sử dụng tmux show-environment
trong precmd
và preexec
móc không phải là của riêng tôi, nhưng tôi quên mất nơi tôi nhìn thấy nó. Cảm ơn bạn, cho bất cứ ai đã viết nó, bất cứ nơi nào bạn viết nó.