远程配置服务器 ubuntu22.04 里的 docker 的x11

远程配置服务器 ubuntu22.04 里的 docker 的x11

前提:我在docker端配置了端口映射

一、ubuntuX11相关依赖库和工具

首先安装X11相关依赖库和工具,确保图形界面转发所需组件完整:

bash 复制代码
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的图形界面,步骤如下:

  1. 安装并启动 XmingVcXsrv (若使用VcXsrv,建议安装时勾选DisableAC选项,后续连接更灵活)。

  2. 打开Windows的cmd命令提示符,执行以下命令配置DISPLAY环境变量(配置后需重新打开一个终端生效):

    cmd 复制代码
    setx DISPLAY "127.0.0.1:0.0"
  3. 远程连接Ubuntu服务器时,需携带X11转发参数:

    • 若安装VcXsrv时勾选了DisableAC:可使用 -X-Y(推荐 -Y,兼容性更强);
    • 未勾选DisableAC:建议使用 -Y
      连接命令示例:
    bash 复制代码
    ssh -Y 用户名@Ubuntu服务器IP

三、Ubuntu端配置

1. 修改SSH配置文件

确保SSH服务支持X11转发,编辑配置文件:

bash 复制代码
sudo vim /etc/ssh/sshd_config

找到以下两行,确保未被注释 (删除行首的#):

ini 复制代码
X11Forwarding yes
X11UseLocalhost no

2. 重启SSH服务

修改配置后需重启SSH服务生效:

bash 复制代码
service ssh restart

3. 测试X11配置是否成功

执行xeyes命令,若弹出"大眼睛"图形窗口,说明Ubuntu端X11配置正常:

bash 复制代码
xeyes

4. 记录关键信息(后续Docker配置需用)

  • 步骤1:查看Docker虚拟网桥IP

    执行ifconfig,找到docker0网卡对应的inet地址(通常为172.17.0.1),示例输出:

    bash 复制代码
    docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 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],示例:

    bash 复制代码
    zhenjiuzhe:1.0

    记住[display_number].[screen_number]部分(如1.0)。

  • 步骤3:获取X11认证信息

    执行xauth list $DISPLAY,找到与上述DISPLAY对应的认证条目,示例:

    bash 复制代码
    zhenjiuzhe:1.0  MIT-MAGIC-COOKIE-x  6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    记录完整认证信息(含主机名/IP、认证类型、Cookie值)。

四、Docker端配置

1. 远程连接Docker

连接Docker时同样需携带X11转发参数(同Ubuntu远程连接规则,-Y-X),示例:

bash 复制代码
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),命令示例:

bash 复制代码
export DISPLAY=172.17.0.2:1.0

若上述配置无效,可尝试使用 Ubuntu 的 Docker 虚拟网桥 IP(步骤四记录的172.17.0.1),命令:

bash 复制代码
export DISPLAY=172.17.0.1:1.0

4. 补充:手动添加X11认证(可选)

若export DISPLAY=172.17.0.1:1.0后仍报认证错误,可手动将Ubuntu的X11认证信息添加到Docker中,命令格式:

bash 复制代码
xauth add [DISPLAY值] 认证类型 Cookie值

结合步骤四记录的认证信息,示例:

bash 复制代码
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转发相关参数,操作步骤:

  1. 打开VS Code命令面板(快捷键:Ctrl+Shift+P);

  2. 在搜索框中输入 SSH: Open SSH Configuration File 并回车;

  3. 通常直接按两次回车(默认打开用户目录下的SSH config文件,路径一般为 C:\Users\你的用户名\.ssh\config);

  4. 在目标远程主机(如之前示例的a30-docker)的配置段中,添加以下三行参数:

    ini 复制代码
    ForwardX11 yes
    ForwardX11Trusted yes
    ForwardAgent yes

    完整配置示例(可参考修改):

    ini 复制代码
    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代理(可选,增强兼容性)
  5. 保存文件(快捷键:Ctrl+S)。

3. 配置Remote X11插件参数

插件和SSH配置完成后,需关联步骤四(Ubuntu端配置)记录的[display_number][screen_number](示例中分别为10),操作:

  1. 打开VS Code的"设置"(快捷键:Ctrl+,);
  2. 在设置搜索框中输入 @ext:spadin.remote-x11,筛选出该插件的专属配置项;
  3. 找到以下两个参数并修改:
    • Remote X11: Display :填写步骤四获取的[display_number](示例:1),对应"连接的显示编号";
    • Remote X11: Screen :填写步骤四获取的[screen_number](示例:0),对应"连接的屏幕编号"。

4. 重启VS Code并测试

  1. 关闭当前VS Code所有窗口,重新打开;
  2. 通过左侧"远程资源管理器"→选择目标SSH主机(如a30-docker)→点击"连接到主机";
  3. 连接成功后,打开VS Code终端,执行xeyes命令,若弹出图形窗口,说明VS Code端X11转发配置生效。显示图形界面。
相关推荐
tomcsdn413 小时前
SMTPman,smtp服务器的使用全解析与指南!
服务器·邮件营销·外贸开发信·邮件群发·蜂邮edm邮件营销·营销邮件·邮件服务器
池央3 小时前
Netdata系统监控:30秒定位服务器故障的实践方法
运维·服务器·cpolar
椎名澄嵐3 小时前
★ Linux ★ 信号
linux·运维·服务器·开发语言·c++
李白你好3 小时前
Auto_CVE - 自动化漏洞挖掘系统
运维·自动化
小一鹿呀4 小时前
Docker一键部署prometheus并实现飞书告警详解
docker·飞书·prometheus
触想工业平板电脑一体机4 小时前
【触想智能】工业一体机在金融领域的应用优势和具体注意事项
运维·人工智能·安全·金融·机器人·自动化
阆遤6 小时前
在Docker debian容器中编译aarch64平台python3.11.9,并创建可离线迁移到统信uos2.0的开发环境
docker·gcc·python3.11·aarch64·统信uos2.0
Arenaschi7 小时前
Android
android·linux·运维·笔记·其他·docker
敲上瘾7 小时前
Docker多容器编排:Compose 实战教程
linux·运维·docker·容器·架构