远程配置服务器 ubuntu22.04 里的 docker 的x11
远程配置服务器 ubuntu22.04 里的 docker 的x11
前提:我在docker端配置了端口映射
一、ubuntuX11相关依赖库和工具
首先安装X11相关依赖库和工具,确保图形界面转发所需组件完整:
sudo apt update && sudo apt install libgl1-mesa-glx libglu1-mesa libqt5opengl5-dev
apt-get install -y mesa-utils
二、Windows端配置
Windows需通过X服务器工具(如Xming或VcXsrv)接收远程Ubuntu的图形界面,步骤如下:
- 安装并启动 Xming 或 VcXsrv(若使用VcXsrv,建议安装时勾选
DisableAC
选项,后续连接更灵活)。 - 打开Windows的
cmd
命令提示符,执行以下命令配置DISPLAY
环境变量(配置后需重新打开一个终端生效):setx DISPLAY "127.0.0.1:0.0"
- 远程连接Ubuntu服务器时,需携带X11转发参数:
- 若安装VcXsrv时勾选了
DisableAC
:可使用-X
或-Y
(推荐-Y
,兼容性更强); - 未勾选
DisableAC
:建议使用-Y
。
连接命令示例:
ssh -Y 用户名@Ubuntu服务器IP
- 若安装VcXsrv时勾选了
三、Ubuntu端配置
1. 修改SSH配置文件
确保SSH服务支持X11转发,编辑配置文件:
sudo vim /etc/ssh/sshd_config
找到以下两行,确保未被注释(删除行首的#
):
X11Forwarding yes
X11UseLocalhost no
2. 重启SSH服务
修改配置后需重启SSH服务生效:
service ssh restart
3. 测试X11配置是否成功
执行xeyes
命令,若弹出“大眼睛”图形窗口,说明Ubuntu端X11配置正常:
xeyes
4. 记录关键信息(后续Docker配置需用)
-
步骤1:查看Docker虚拟网桥IP
执行ifconfig
,找到docker0
网卡对应的inet
地址(通常为172.17.0.1
),示例输出:docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
记住此IP(如
172.17.0.1
)。 -
步骤2:查看
DISPLAY
环境变量
执行echo $DISPLAY
,输出格式通常为[hostname]:[display_number].[screen_number]
,示例:zhenjiuzhe:1.0
记住
[display_number].[screen_number]
部分(如1.0
)。 -
步骤3:获取X11认证信息
执行xauth list $DISPLAY
,找到与上述DISPLAY
对应的认证条目,示例:zhenjiuzhe:1.0 MIT-MAGIC-COOKIE-x 6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
记录完整认证信息(含主机名/IP、认证类型、Cookie值)。
四、Docker端配置
1. 远程连接Docker
连接Docker时同样需携带X11转发参数(同Ubuntu远程连接规则,-Y
或-X
),示例:
ssh -Y 用户名@Docker容器IP
2. 查看Docker虚拟网桥IP
进入Docker后,执行ifconfig
,找到Docker自身的虚拟网桥IP(通常为172.17.0.2
)。
3. 配置DISPLAY
环境变量
将DISPLAY
指向Docker虚拟网桥IP(步骤五.2记录的172.17.0.2
),并拼接[display_number].[screen_number]
(步骤四记录的1.0
),命令示例:
export DISPLAY=172.17.0.2:1.0
若上述配置无效,可尝试使用 Ubuntu 的 Docker 虚拟网桥 IP(步骤四记录的172.17.0.1),命令:
export DISPLAY=172.17.0.1:1.0
4. 补充:手动添加X11认证(可选)
若export DISPLAY=172.17.0.1:1.0后仍报认证错误,可手动将Ubuntu的X11认证信息添加到Docker中,命令格式:
xauth add [DISPLAY值] 认证类型 Cookie值
结合步骤四记录的认证信息,示例:
xauth add 172.17.0.1:1.0 MIT-MAGIC-COOKIE-x 6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5. 测试
执行xeyes
,若弹出图形窗口,说明Docker端X11转发配置成功。
五、Vscode端配置(可选)
若需通过VS Code远程连接并使用X11图形转发,需完成插件安装、SSH配置修改、插件参数设置三步,具体如下:
1. 安装必要插件
打开VS Code,在左侧“插件市场”搜索并安装以下两个插件:
- Remote X11(插件ID:
spadin.remote-x11
) - Remote X11 (SSH)(插件ID:
spadin.remote-x11-ssh
)
会提示已经停止维护了,但是无所谓,还是可以用
2. 修改VS Code的SSH Config文件(关键:启用X11转发)
需在SSH配置中明确开启X11转发相关参数,操作步骤:
- 打开VS Code命令面板(快捷键:
Ctrl+Shift+P
); - 在搜索框中输入
SSH: Open SSH Configuration File
并回车; - 通常直接按两次回车(默认打开用户目录下的SSH config文件,路径一般为
C:\Users\你的用户名\.ssh\config
); - 在目标远程主机(如之前示例的
a30-docker
)的配置段中,添加以下三行参数:
完整配置示例(可参考修改):ForwardX11 yes ForwardX11Trusted yes ForwardAgent yes
Host a30-docker # 自定义远程主机名(方便记忆)HostName xxxx # 实际远程主机/容器的IP地址(如192.168.1.100)User root # 远程登录用户名Port 2222 # 远程SSH端口(默认22,非默认需指定,比如我做了端口映射所以是映射的端口号)ForwardX11 yes # 启用X11转发ForwardX11Trusted yes # 信任X11转发(避免认证问题)ForwardAgent yes # 转发SSH代理(可选,增强兼容性)
- 保存文件(快捷键:
Ctrl+S
)。
3. 配置Remote X11插件参数
插件和SSH配置完成后,需关联步骤四(Ubuntu端配置)记录的[display_number]
和[screen_number]
(示例中分别为1
和0
),操作:
- 打开VS Code的“设置”(快捷键:
Ctrl+,
); - 在设置搜索框中输入
@ext:spadin.remote-x11
,筛选出该插件的专属配置项; - 找到以下两个参数并修改:
- Remote X11: Display:填写步骤四获取的
[display_number]
(示例:1
),对应“连接的显示编号”; - Remote X11: Screen:填写步骤四获取的
[screen_number]
(示例:0
),对应“连接的屏幕编号”。
- Remote X11: Display:填写步骤四获取的
4. 重启VS Code并测试
- 关闭当前VS Code所有窗口,重新打开;
- 通过左侧“远程资源管理器”→选择目标SSH主机(如
a30-docker
)→点击“连接到主机”; - 连接成功后,打开VS Code终端,执行
xeyes
命令,若弹出图形窗口,说明VS Code端X11转发配置生效。显示图形界面。