如何为无X11转发的SSH会话中创建的tmux会话启用X11转发?
如何为无X11转发的SSH会话创建的tmux会话启用X11转发
问题背景
你遇到的核心问题是:在无X11转发的SSH会话(S1)中创建的tmux会话T1,即使后续从带X11转发的SSH会话(S2)进入,仅手动设置DISPLAY变量无法弹出图形窗口——这是因为X11转发不仅依赖DISPLAY,还需要X服务器认证的magic cookie,而T1创建时没有加载这个认证信息。
即时解决方法(针对已存在的T1会话)
在带X11转发的SSH会话(S2)中获取认证信息
先查看当前会话的DISPLAY和对应的Xauthority密钥:# 查看当前DISPLAY echo $DISPLAY # 查看对应DISPLAY的认证密钥 xauth list $DISPLAY输出示例:
server/unix:11 MIT-MAGIC-COOKIE-1 abcdef1234567890abcdef1234567890进入tmux会话T1并导入认证密钥
先attach到T1会话,然后执行xauth add导入刚才获取的完整密钥内容:tmux attach-session -t T1 # 替换成你刚才得到的密钥内容 xauth add server/unix:11 MIT-MAGIC-COOKIE-1 abcdef1234567890abcdef1234567890设置DISPLAY变量
在T1会话中设置DISPLAY(如果之前没设置):export DISPLAY=localhost:11.0 # 如果是在R会话中,执行: Sys.setenv("DISPLAY" = "localhost:11.0")
现在再运行plot(1:10),图形窗口就能正常弹出了。
永久配置(避免后续再遇到该问题)
修改tmux配置文件~/.tmux.conf,让tmux自动继承X11转发的环境变量和认证信息:
# 让tmux继承DISPLAY和XAUTHORITY环境变量 set-option -g update-environment "DISPLAY XAUTHORITY" # 如果XAUTHORITY未设置,默认使用~/.Xauthority if-shell '[ -z "$XAUTHORITY" ]' 'set-environment XAUTHORITY "$HOME/.Xauthority"'
保存配置后,重新加载tmux配置:
tmux source-file ~/.tmux.conf
之后从带X11转发的SSH会话创建tmux会话时,会自动携带X11所需的所有信息,即使后续从其他会话进入也能正常使用图形窗口。
内容的提问来源于stack exchange,提问作者ya wei
相关产品推荐
相关产品推荐

