远程服务器或者docker运行GUI程序

这篇具有很好参考价值的文章主要介绍了远程服务器或者docker运行GUI程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的:远程服务器或者docker运行GUI程序,可以不使用VNC等工具

MAC电脑安装XQuartz:
官网:https://www.xquartz.org/

window电脑安装:MobaXterm
官网:https://mobaxterm.mobatek.net/download-home-edition.html

通过SSH链接docker

  1. 启动docker容器
docker run -it -d -p local:docker 镜像 /bin/sh
  1. 登陆docker内
docker exec -it 容器名称 /bin/sh
apt update
apt install openssh-server
apt install vim

passwd   // 给root账号赋予密码

vim /etc/ssh/sshd_config
// 修改两个位置
/***
第一:把ssh 服务默认的22端口设置为与容器服务的端口一致,设置为启动过程中:dockerip,
因为我们运行容器的时候挂载的是内部的docker端口映射到宿主机的local端口,
所以需要和容器内部端口保持一致,

第二:将PermitRootLogin prohibit-password修改为PermitRootLogin yes,开启使用密码登录,设置完成后保存退出

第三:确定下X11Forwarding yes 是否为yes

*/

service ssh restart   // 重启ssh服务
  1. 链接docker测试
ssh -p docker端口 root@远程IP

-------------------------------现在SSH链接正常,下一步进行X11服务图形显示----------------

  1. docker 启动参数
FOLDER=/path/to/your/data/on/host        // 挂载的本地机器的目录,和docker的共享目录
docker run -it -e DISPLAY=host.docker.internal:0 -e "QT_X11_NO_MITSHM=1" \
    -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    -v "$FOLDER:/data" 容器名称
  1. 执行顺序
1. XQuartz -> 偏好设置 -> 安全性 -> 勾选“允许从网络客户端连接” -> 退出程序;
2. 终端键入 xhost + ip(注意两者之间的空格)重新启动 XQuartz;为远程主机添加权限
或者xhost +为所有IP添加权限
3. ssh -XY root@0.0.0.0 -p 6100
4. netstat -an | grep -F 6100 查看

5. apt install x11-apps
6. 在 run 或 exec 容器时加入-e DISPLAY=host.docker.internal:0参数,比如我这里通过对一个现有的,已经安装过 xarclock 时钟小程序的容器 toyOS 执行docker exec -ite DISPLAY=host.docker.internal:0 toyOS /usr/bin/xarclock,就会在我的本地出现一个小时钟的GUI程序;

参数解释

如何让 Docker 中的 X Client 与宿主机的 X Server 实现交互
作为 X Client 的程序如果想与 X Server 进行交互,大致分为两种方式:

  • 在命令后加--display参数并指明相关的位置
  • 用户提前设置好环境变量 DISPLAY ,程序从该变量获得相关信息

这里我们采用第二种方式,故在启动容器时通过-e参数为其设置 DISPLAY 变量,现在的问题在于,如何解释变量的值 host.docker.internal:0 呢?
对于该变量中,冒号前面的部分,Docker 官方文档中有如下解释:

The host has a changing IP address (or none if you have no network
access). From 18.03 onwards our recommendation is to connect to the
special DNS name host.docker.internal, which resolves to the internal
IP address used by the host.

也就是说,这个值本质上是获得了宿主机的内部IP,为了验证这一点,可以通过ifconfig命令来查看宿主机实际的IP,并将 DISPLAY 的值换成 your_ip:0 ,可以发现和前面一样可以运行。之所以本次实验采用了前者,是因为要获取实际IP,第一是过程很麻烦,第二是设备要处于联网的状态下,而在文档的描述中可以看到 (or none if you have no network access) 这句话,也就是说,这种参数设置在无网络的条件下也可以正常运行。
那么 DISPLAY 的值就可以被解释为 your_ip:0 了,关于这个格式,其实它的完整形式为your_ip: display_number. screen_number,在本实验中其实可以写为 host.docker.internal:0.0display_numberscreen_number 均从0开始计数,前者表示一个输入流的标号(输入流包括显示器,键盘,鼠标等),后者表示输入流中某个具体的显示屏,因为很少有人使用多屏幕,所以 screen_number 多数情况下均为0,也就可以省略掉了。
而对于 display_number,X11 protocol 官方文档中有如下描述:

For TCP connections, displays on a given host are numbered starting
from 0, and the server for display N listens and accepts connections
on port 6000 + N.

也就是说,这个值实际上取决于宿主机上 X11 服务占用的端口,用端口号减掉6000即可,这就是上述命令中冒号后面的0的具体含义。为了验证这一点,可以使用 socat 工具运行 socat tcp-listen:6100,reuseaddr,fork tcp:localhost:6000 命令,将6100端口的消息转交给6000端口,这样按照上面的描述,DISPLAY 变量的值就可以为 host.docker.internal:100 ,替换后执行完整命令,可以发现一样能运行GUI测试程序。

:如果最终仍然无法显示,可以在docker内部执行,设置环境变量指定显示端口:
如果启动命令为:文章来源地址https://www.toymoban.com/news/detail-579345.html

docker run -it -d -p 6100:6100 -e DISPLAY=host.docker.internal:0 -e "QT_X11_NO_MITSHM=1" \
        -v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \
        -v "$FOLDER:/data" kalibr /bin/sh
export DISPLAY=host.docker.internal:0  

到了这里,关于远程服务器或者docker运行GUI程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Jenkins + Docker + Maven + Windows 一键部署 Spring Boot 程序到远程 Linux 服务器

    Jenkins + Docker + Maven + Windows 一键部署 Spring Boot 程序到远程 Linux 服务器

    本地:Windows 10 ; 本地:Jenkins + Publish Over SSH 插件; 本地:Maven ; 远程:Linux ; 远程:Docker ; 准备步骤 使用 Dockerfile 构建镜像; 基本思路 第一步:使用 mvn clean package -DskipTests 打包 Spring Boot 程序为 jar 包; 第二步:使用 Windows 命令将 jar 包复制到 jenkins 项目工作目录;

    2024年02月12日
    浏览(43)
  • Jmeter-非GUI模式下运行jmeter脚本-适用于服务器上持续集成测试

    Jmeter-非GUI模式下运行jmeter脚本-适用于服务器上持续集成测试

    大部分Jmeter脚本都是部署在Linux上运行,利用Jenkins做接口自动化,定时巡检任务。 1.进入jmeter的目录,bin文件夹 2.运行脚本文件 命令解析: jmeter: 这是 JMeter 的可执行文件路径,用于启动 JMeter 工具 -n: 表示以非 GUI 模式运行 JMeter,也就是无界面模式,通常用于自动化测试或者

    2024年04月28日
    浏览(9)
  • xshell连接远程服务器并运行代码

    xshell连接远程服务器并运行代码

    记录一下连接实验室服务器的过程,希望能够给大家一点帮助。 目录 一、首先下载xshell 二、xshell的使用 三、如何在xshell中运行代码 四、附录,xshell常用命令 这里要注意的是:如果你并非和服务器在一个内网,则要通过VPN,因为我连接的是学校的服务器,因此我还需要连接

    2024年02月05日
    浏览(10)
  • 【已解决】GLFW error #65544: X11: Failed to open display :0 连接远程服务器并开启gui界面失败

    本地计算机通过ssh连接服务器运行gui界面的时候报错,但是直接在服务器上跑gui代码没有任何问题。 原因其实在于你本地没有设置显示gui的显示屏,如果之前一直ssh开gui没问题,用的好好地,突然不行了直接跳到第二步,否则从第一步开始看。 Step1. 服务器端ssh设置 修改完后

    2024年02月04日
    浏览(229)
  • 使用vscode远程服务器,让代码在vscode关闭后也在服务器后台运行

    可以使用VScode的Remote-SSH插件来连接远程服务器,并在关闭了VScode后让训练代码在后台运行。 具体的步骤如下: 安装VScode和OpenSSH,确保你可以在本地终端使用ssh命令连接服务器。 在VScode的扩展页面搜索并安装Remote-SSH插件。 在VScode的左侧菜单栏选择SSH Targets,点击齿轮图标,

    2024年02月11日
    浏览(12)
  • pycharm通过ssh远程连接服务器,并运行代码

    pycharm通过ssh远程连接服务器,并运行代码

    首先连接远程服务器,tool-deplayment-configuration 连接ssh,点击+,选择SFTP,然后取名 点击ssh后面的...,依次输入远程服务器的IP,用户名,密码 点击test connection,测试是否连接成功 点击确定回到上个界面,root path 是服务器的路径,可以不选,但之后remote host后会过于冗长,可以根据

    2024年02月05日
    浏览(13)
  • 本地搭建微信小程序或者公众号开发服务器的简单方法

    本地搭建微信小程序或者公众号开发服务器的简单方法

    现在小程序开发需要购买服务器,价格还是有点贵的,这里好代码网分享一个可以花费小代价就可以搭建一个本地服务器,可以用来开发小程序和微信公众号等。 1.域名(备案过的) 2.阿里云注册免费的https证书 3.配置本地的nginx 4.内网映射(本地安装wampserver 服务器) 一、域

    2024年02月02日
    浏览(14)
  • 保姆级教程!!教你通过【Pycharm远程】连接服务器运行项目代码

    保姆级教程!!教你通过【Pycharm远程】连接服务器运行项目代码

    这篇文章主要解决一个问题—— 我有服务器,但是不知道怎么拿来写代码,跑深度学习项目 。确实,玩深度学习的成本比较高,无论是前期的学习成本,还是你需要具备的硬件成本,都是拦路虎。小罗没有办法帮你解决硬件上的问题,所以只能帮你们理清一下有了服务器以

    2024年03月27日
    浏览(9)
  • 采用Vscode进行ssh连接远程服务器并实现代码运行和调试

    采用Vscode进行ssh连接远程服务器并实现代码运行和调试

    这篇博客介绍了使用Pycharm进行ssh连接服务器进行代码调试:https://blog.csdn.net/m0_48086806/article/details/135112106 实际上使用Vscode也可以进行同样的操作 VSCode,全称为 Visual Studio Code ,是一款由微软开发的免费开源代码编辑器。它支持多种编程语言,并且具有强大的功能和扩展性。

    2024年01月17日
    浏览(12)
  • 环境配置——Windows平台配置VScode运行环境为远程服务器或虚拟机

    环境配置——Windows平台配置VScode运行环境为远程服务器或虚拟机

    1. 远程机需要先安装SSH服务,命令如下 2. 安装好后需要开启SSH服务: 3. 查看SSH服务是否有被开启: 4. 本地Windows需要生成密钥将公钥放到远程机中 4. 1 Windows生成密钥: 进入 C:Users用户名.ssh(如没有该目录则需要手动创建)  4.2 在远程机上 ~/.ssh 目录下创建 authorized_keys 文

    2024年04月27日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包