当前位置: 首页 > news >正文

远程配置服务器 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的图形界面,步骤如下:

  1. 安装并启动 XmingVcXsrv(若使用VcXsrv,建议安装时勾选DisableAC选项,后续连接更灵活)。
  2. 打开Windows的cmd命令提示符,执行以下命令配置DISPLAY环境变量(配置后需重新打开一个终端生效):
    setx DISPLAY "127.0.0.1:0.0"
    
  3. 远程连接Ubuntu服务器时,需携带X11转发参数:
    • 若安装VcXsrv时勾选了DisableAC:可使用 -X-Y(推荐 -Y,兼容性更强);
    • 未勾选DisableAC:建议使用 -Y
      连接命令示例:
    ssh -Y 用户名@Ubuntu服务器IP
    

三、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转发相关参数,操作步骤:

  1. 打开VS Code命令面板(快捷键:Ctrl+Shift+P);
  2. 在搜索框中输入 SSH: Open SSH Configuration File 并回车;
  3. 通常直接按两次回车(默认打开用户目录下的SSH config文件,路径一般为 C:\Users\你的用户名\.ssh\config);
  4. 在目标远程主机(如之前示例的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代理(可选,增强兼容性)
    
  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转发配置生效。显示图形界面。
http://www.dtcms.com/a/388915.html

相关文章:

  • rust编写web服务03-错误处理与响应封装
  • Docker基础篇07:Docker容器数据卷
  • WPF 拖拽(Drag Drop)完全指南:从入门到精通
  • rust编写web服务05-数据库连接池
  • AppInventor2使用本地SQLite实现用户注册登录功能
  • Prompt(提示词工程)优化
  • Ubuntu 系统安装 PostgreSQL 17.6
  • Kotlin-基础语法练习四
  • 开源的消逝与新生:从 TensorFlow 的落幕到开源生态的蜕
  • 原创GIS FOR Unity3d PAD VR LINUXPC 同时支持。非cesium
  • Kotlin中协程的管理
  • django如何自己写一个登录时效验证中间件
  • 【大前端++】初始技术栈跨平台方案Electron+Vue,MacOS开发环境搭建【十分钟一个Demo】
  • 限时起售价17.38万元,吉利银河M9上市
  • Vue : defineModel()
  • 一套基于Java+Vue+UniApp开发的同城配送系统
  • Vue 3 手机外观组件库
  • 部署分布式CephFS,存储的服务器的最低配置
  • 【Spring AI】Ollama大模型-智能对话实现+项目实战(Spring Boot + Vue)
  • Vue 3 实战:GIS 系统模块化设计与多功能融合方案
  • Docker多容器编排:Compose 实战教程——从入门到精通
  • Vue2 基础知识点一:数据绑定 (Data Binding)
  • layui tree组件回显bug问题,父级元素选中导致子集全部选中
  • centos7上使用Docker+ RagFlow + ollama + 数据集 搭建自己的AI问答机器人(2025-09)
  • # 从 Gymnasium 到 Minari:新一代机器人强化学习工具链全指南
  • 系统架构设计师备考第27天——基于构件的软件工程
  • Centos下安装docker
  • OpenAPI 规范:构建高效 RESTful API 指南
  • 基于 AForge.NET 的 C# 人脸识别
  • SQLite与ORM技术解析