macOS 使用 X11 运行远端 linux 中的 x11 client 图形程序

news/2024/4/26 8:24:22/文章来源:https://blog.csdn.net/Longyu_wlz/article/details/128068675

安装

brew install --cask xquartz

配置

打开 xquartz,新建一个终端,然后执行 xhost + 开放权限。

linux 中 sshd 配置

/etc/ssh/sshd_config 中开启如下配置后重启 sshd:

X11Forwarding yes

使用普通用户连接到远端 linux 中

ssh 命令中添加 -X 参数,未开启 X11Forwarding 时报错信息如下:

longyudeMacBookPro:~ longyu$ ssh -X  longyu@debian
X11 forwarding request failed on channel 0

开启后,ssh -X 成功建立隧道,此时 netstat -anp 查看 sshd 相关连接信息,能够发现如下内容:

tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      33315/sshd: longyu@ 
tcp        0      0 192.168.31.197:22       192.168.31.66:51014     ESTABLISHED 33306/sshd: longyu  
tcp6       0      0 ::1:6010                :::*                    LISTEN      33315/sshd: longyu@

sshd 监听本地 6010 端口,接收任意 ipv4、ipv6 地址访问数据来进行 X11 转发。

此时在 ssh 连接成功的终端执行 xclock 命令,然后重新查看端口信息,发现增加如下连接:

tcp6       0      0 ::1:6010                ::1:54714               ESTABLISHED 33315/sshd: longyu@

此条连接建立后,xclock 通过此条通道走已经建立的 ssh 隧道转发 X11 图形界面数据到 MacOS,MacOS 中会自动打开 xquartz,弹出 xclock 的图形界面。

strace 跟踪 X11 客户端程序,过滤到如下 connect 连接调用,与上面的连接匹配:

connect(3, {sa_family=AF_INET, sin_port=htons(6010), sin_addr=inet_addr("127.0.0.1")}, 16) = 0

使用 root 用户打开

当图形界面程序需要使用 root 权限打开时,可以执行 ssh -X root@xxx 连接到 linux 中,然后在终端直接运行相关程序即可。

debian sshd maunal 中的信息

X11 FORWARDINGIf the ForwardX11 variable is set to “yes” (or see the description of the -X, -x, and -Y options above) and the user is using X11 (theDISPLAY environment variable is set), the connection to the X11 display is automatically forwarded to the remote side in such a way thatany X11 programs started from the shell (or command) will go through the encrypted channel, and the connection to the real X server willbe made from the local machine.  The user should not manually set DISPLAY.  Forwarding of X11 connections can be configured on the com‐mand line or in configuration files.The DISPLAY value set by ssh will point to the server machine, but with a display number greater than zero.  This is normal, and happensbecause ssh creates a “proxy” X server on the server machine for forwarding the connections over the encrypted channel.ssh will also automatically set up Xauthority data on the server machine.  For this purpose, it will generate a random authorizationcookie, store it in Xauthority on the server, and verify that any forwarded connections carry this cookie and replace it by the realcookie when the connection is opened.  The real authentication cookie is never sent to the server machine (and no cookies are sent inthe plain).If the ForwardAgent variable is set to “yes” (or see the description of the -A and -a options above) and the user is using an authenti‐cation agent, the connection to the agent is automatically forwarded to the remote side.

注意事项

网上搜索到的一些博客中都提到要设置 DISPLAY 参数,实际测试发现设置了后反而不能正常工作。在我的 debian 机器上查看已经运行的 X11 程序的环境变量,发现普通用户 DISPLAY 变量的值为 localhost:10.0, root 用户的值为 localhost:11.0。

测试表明 ssh 会自动设置 DISPLAY 环境的值,用户不需要单独设置。同时 ssh 设置的值中 ip 并非目的 X11 server 机器的 ip,理解 X11 forwarding 实际是先本地转发到 6010 端口,然后通过已经建立的 ssh 隧道转发到 X11 server 机器上进行显示。

当设置 DISPLAY 为 192.168.44.33:0.0 时,运行 X11 client 程序会执行如下系统调用:

connect(3, {sa_family=AF_INET, sin_port=htons(6000), sin_addr=inet_addr("192.168.44.33")},

确认 xquartz 并不会监听 6000 端口,此 connect 会超时失败,程序终止。在 Mac 上查看到 xquartz 启动参数如下:

/opt/X11/bin/Xquartz :0 -nolisten tcp -iglx -auth /Users/longyu/.serverauth.2603

猜测是 -nolisten tcp 参数的影响,修改 /opt/X11/bin/startx 中的逻辑启用 listen tcp 参数,直接执行 startx 命令,能够看到如下两条监听信息:

X11.bin   3431 longyu    9u  IPv4 0xf75fbac47759271d      0t0  TCP *:6000 (LISTEN)
X11.bin   3431 longyu   12u  IPv6 0xf75fbac947417cd5      0t0  TCP *:6000 (LISTEN)

此时仍旧设置了 DISPLAY 后 connect 6000 端口成功,随后 connect ip+6010 地址会失败,而 X11.bin 并不会监听 6010 端口,这个 6010 端口网上搜索到可能与 sshd 配置中的 X11DisplayOffset 10 配置有关,暂且打住。

参考链接

http://t.zoukankan.com/zafu-p-15323704.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_38538.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第五届“强网”拟态防御国际精英挑战赛——特邀战队篇

第五届“强网”拟态防御国际精英挑战赛即将在南京隆重开赛!本届大赛面向全球顶尖CTF战队,在创新应用场景与技术的基础上,拓展升级赛道,全面覆盖典型网络设备。大赛汇集国内外60支精英战队,参赛阵容、数量再创新高。 本…

科普下抖音的规则,为什么别人的内容很容易火,而我的很难?

今天给大家科普下抖音的规则,为什么别人的内容很容易火,而我的很难? 上一篇给大家讲了现在做抖音还来得及么?肯定的回答,一直都来得及。 既然来得及,那么我们怎么才能做好抖音呢? 在我看来&a…

5 - 2 单选题

1.下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是:B 后序线索二叉树的构建流程就是: 1.后序遍历二叉树:d b c a 2.第一个结点的前驱是NULL,即d的前驱,d的左孩子为NULL …

web表单(详解)

目录 1. 表单的概述 1.1 表单组成 2. 表单标记 2.1 input标记 2.2 select标记 2.3 textarea标记 3.HTML5新增标记 3.1 datalist标记 3.2 date 输入类型 3.3 color输入类型 3.4 button标记 3.5 details标记和summary标记 3.6 progress标记 3.7 meter标记 4 综合…

云原生微服务治理技术朝无代理架构的演进之路

摘要:本文基于对微服务治理技术从SOA, 微服务框架,到云原生架构的历史发展总结,提出了一种新的基于Javaagent技术的新一代无代理架构的服务治理技术,并介绍了其相关的代表性开源项目Sermant。本文分享自华为云社区《云原生微服务治…

Docker安装Redis集群失败经历汇总

在程序员的开发过程中,Redis可以说基本上是必不可少的缓存中间件。不管是二进制包还是docker安装Redis的文章在网上都是数不胜数。我之前自己玩Redis的时候基本不是二进制包安装就是docker安装,也没有尝试过集群方式。每次需要的时候,网上百度…

Cloud-computing 实验镜像 chinaskills_cloud_iaas.iso chinaskills_cloud_paas.iso

Cloud-computing 实验镜像 最近因新项目再次进行云计算环境的搭建, 找这两个镜像( 找chinaskills_cloud_paas.iso chinaskills_cloud_iaas.iso)颇为费劲,用尽九牛二虎之力总算找到了,该大侠还分享了诸多系统镜像和完…

Centos7搭建SVN代码控制服务器

Centos7搭建SVN代码控制服务器检查SVN是否安装创建SVN版本库配置代码库设置允许访问远程仓库的用户帐号密码设置权限控制设置SVN服务配置启动svn与停止启动SVN关闭SVN访问拉取远程仓库代码检查SVN是否安装 1、centos7系统自带SVN rpm -qa subversion2、如果没有则通过yum安装 …

Day15--加入购物车-初始化vuex

1.加入购物车: 我的操作: ************************************************************************************************************* 2.购物车里面的商品数据在多个页面都会用到。所以把购物车里面的商品数据存储在vuex里面, 我的…

Windows10安装配置allure

1、allure官方文档: https://docs.qameta.io/allure/#_about 官方文档中,windows部署allure步骤: 奈何提示scoop不是內部命令 2、安装scoop scoop官方文档:https://scoop.sh/ 需要打开power shell,执行提示的两条…

外汇天眼:英国研究人员与南非合作应对气候变化

随着南非对气候变化的担忧加剧,英国卫生部已同意与南非就九个不同项目组建一个合作研究团队,旨在拯救生命。 南非总统西里尔拉马福萨 (Cyril Ramaphosa) 与英国卫生大臣在克里克研究所会面后达成了合作协议,克里克研究所如今被称为欧洲最大的…

BUUCTF Misc 来首歌吧 荷兰宽带数据泄露 面具下的flag 九连环

来首歌吧 下载文件 使用Audacity打开 可以发现框出来的一串,放大查看 有长有短有空格,大概率是摩斯密码 ...../-.../-.-./----./..---/...../-..../....-/----./-.-./-.../-----/.----/---../---../..-./...../..---/./-..../.----/--.../-../--.../-----/----./.…

汽车蓄电池低压报警设计

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1 选题背景及意义 1 1.2 国内外发展状况 2 1.2.1国内发展现状 2 1.2.2 国外蓄电池监测系统研究现状 2 1.3 研究主要内容 4 第2章 系统总体设计与算法确定 5 2.1 监测系统总体设计原理 5 2.2 主控芯片的选择 6 2.2.1 89C51单片机的概…

IPv6进阶:IPv6 过渡技术之IPv6 over IPv4 手动隧道

实验拓扑 R1-R3-R2之间的网络为IPv4环境;PC1及PC2处于IPv6孤岛。 实验需求 R1及R2为IPv6/IPv4双栈设备;在R1及R2上部署IPv6 over IPv4手工隧道使得PC1及PC2能够互相访问。 配置及实现 R3的配置如下 [R3] interface GigabitEthernet0/0/0 [R3-Gigabi…

集合框架----源码解读LikedHashSet篇

1.官方介绍 Hash表和链表实现了Set接口,具有可预测的迭代顺序。该实现与HashSet的不同之处在于它维护了一个贯穿其所有条目的双向链表。该链表定义了迭代顺序,即元素插入集合的顺序(插入顺序)。注意,如果一个元素重新插入到集合中&#xff0c…

【JAVA案例】作业管理系统(控制台版本)

博主:👍不许代码码上红 欢迎:🐋点赞、收藏、关注、评论。 格言: 大鹏一日同风起,扶摇直上九万里。 文章目录一、JAVA面向对象程序设计1.1 工程分包1.2 各类属性及功能二、数据初始化三、学生模块四、教师…

传奇单机架设登录器配置教程

传奇单机顾名思义就是在本地电脑上架设传奇,限制同一个局域网才能一起玩,我接触到几个朋友不明白外网和单机的区别 架设单机需要准备以下程序: 传奇服务端(版本Mirserver) DBC2000 (百度可直接下载) 配套登…

基于SpringBoot的会员制医疗预约服务管理信息系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SpringBoot 前端:Vue、HTML 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#…

Apifox:成熟的测试工具要学会自己写接口文档

好家伙, 在开发过程中,我们总是避免不了进行接口的测试, 而相比手动敲测试代码,使用测试工具进行测试更为便捷,高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman,他还拥有一个非常nb的功…

【毕业设计】26-基于单片机心跳体温血压系统仿真设计(原理图+仿真+演示视频+论文)

【毕业设计】基于单片机心跳体温血压系统仿真设计(原理图仿真演示视频论文) 文章目录【毕业设计】基于单片机心跳体温血压系统仿真设计(原理图仿真演示视频论文)任务书设计说明书摘要设计说明书及设计文件任务书 以单片机为控制核…