ฉันมีปัญหาที่คล้ายกัน ในสถานการณ์ของฉันการตั้งค่าDISPLAY
ไม่เพียงพอ โดยดีฟอลต์สภาพแวดล้อมบางส่วนถูกตั้งค่าเมื่อเริ่มต้นเซิร์ฟเวอร์ tmux (เมื่อเริ่มเซสชันแรก) ไม่ใช่เฉพาะเซสชันใหม่ ต่อไปนี้เหมาะกับฉัน แต่ฉันสงสัยว่ามันดีที่สุด
ใน.tmux.conf
ทำให้ tmux จดจำตัวแปรที่คุณต้องการเก็บไว้จากสภาพแวดล้อมภายนอก ฉันใช้สิ่งที่แตกต่างกันในพื้นที่โดยใช้ Gnome Terminal และใช้ 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
การเขียนคำตอบนี้อีกครั้ง
ถึงกระนั้นฉันก็ต้องถอดและใส่กลับเข้าไปใหม่บางครั้งเมื่อใช้เซสชั่นที่มีอยู่ แม้ว่ามันจะน่ารำคาญน้อยกว่า แต่ก่อน
การเปิดเผยแบบเต็ม: แนวคิดของการใช้tmux show-environment
ในprecmd
และpreexec
hooks ไม่ใช่ของฉันเอง แต่ฉันลืมที่ฉันเห็น ขอบคุณทุกคนที่เขียนสิ่งนั้นทุกที่ที่คุณเขียน