ToB企服应用市场:ToB评测及商务社交产业平台

标题: 「Mac&Linux」一次基于X和蒲公英组网的长途桌面尝试 [打印本页]

作者: 守听    时间: 2024-7-17 17:18
标题: 「Mac&Linux」一次基于X和蒲公英组网的长途桌面尝试
因为某些缘故原由我必须在长途条件下使用带图形环境的Ubuntu工作。固然说有向日葵和ToDesk这种长途控制工具,但是后者常常莫名其妙蹦个错误告诉我连不上网络(指的是Mac上的这个软件连不到它公司自己的网络,连我这个账号在ToDesk上有哪些在线设备都不知道),前者怎么说呢... 我已担当够长途桌面那模糊的画质和时长时短的操纵时延了!
我打算试试用VNC或X这种长途窗口方案。
ssh登录

网络拓扑是如许的:
(Macbook条记本) —— (Windows条记本) —— (Ubuntu 22.04 捏造机)
其中Ubuntu是Windows上基于VMware运行的捏造机,而且Macbook和Windows分别在两个大内网里,没法直连,这里接纳贝锐蒲公英提供的长途组网方案(内网穿透好帮手),分别在Macbook和Windows上安装并运行蒲公英,详细的教程就不需要展示了。
为了描述方便,下面Macbook简称Mac,Windows简称Win,Ubuntu简称VM。
总之,通过蒲公英两边都得到了一个捏造局域网的IP,暂定为Mac得到了172.111.1.14而Win是172.111.1.15。同时Win和VM处于同一个由VMware构成的捏造网络中,在这个网络中假定Win是192.168.168.1,VM是192.168.168.136。通过实验可以确认Mac和Win、Mac和Ubuntu、Win和VM都是具有网络可达性的(可以互Ping成功),说明蒲公英组网之后可以正确地修改路由表,使得捏造局域网中的Mac和捏造局域网外的VM都能互相发现。
好,抽象的事情要来了。我们先试试能不能从Mac用ssh连接VM:(所有涉及用户名的地方都用gua代替)
  1. ~/ $ ssh gua@192.168.168.136
  2. kex_exchange_identification: read: Connection reset by peer
  3. Connection reset by 192.168.168.136 port 22
复制代码
我的第一个想法是:莫非VM设置出了问题,不允许连接?挨个排查:
显然,我觉得各个环节都不太大概有问题,除非:蒲公英捏造组网自己有缺陷,或者Win作为网络节点会对ssh链路产生影响。
思量到蒲公英之前在Linux上的服务端做得实在是太烂了,我倾向于是前者。
那么,现在就只能用这种指令访问了。
  1. ~/ $ ssh -J gua@172.111.1.15 gua@192.168.168.136
复制代码
然后它成功了,难评蒲公英。
设置X远端显示

X是一套历史悠久的视窗显示体系,现在主流的版本号是11,因此也叫X11。在X11内里:
在一般的使用场景里,通常是用户需要让远端服务主机上的应用程序(远端主机通常配置很强性能更好,因此跑计算使命都在远端主机上)在当地主机上显示画面(在当地主机上绘制Python跑出来的曲线图之类的)。在这个场景中,远端主机上输出画面的应用程序是X Client,而当地主机则需要运行X Server。
这里Mac上运行X Server,接收来自VM上的X Client们的画面信号。
选择符合的X Server程序

带有X Server的程序有很多,在Windows上有MobaXterm(内置X Server)和PuTTY、VcXsrv(用X Launch启动)等。其中以VcXsrv最为经典,可以设置X Server所使用的Display号和Screen号。由于我是在Mac上运行X Server,这里用的是XQuartz。
有个小坑点,这里如果用 brew install --cask XQuartz 如果网络变化的话会安装一个残缺的XQuartz,而你重新用 brew 安装并不会告诉你有什么异常,也不会重新给你装好,因此发起去官网下载 .pkg 包进行安装。
在X体系里,最重要的环境变量是 $DISPLAY ,这个变量决定了X应用程序会往哪个方向创建X连接。在我们所要进行的整个过程中,你都没有任何必要手动修改这个变量。这是因为:XQuartz会自动修改你在Mac上的 $DISPLAY;而如果你使用 ssh -Y 连接远端主机, ssh 会自动帮你修改远端主机上的 $DISPLAY 数值。
  1. # 在Mac上,当你从Launch Pad直接运行完XQuartz,会得到...
  2. ~/ $ echo $DISPLAY
  3. /private/tmp/com.apple.launchd.57Nwhjt3kp/org.xquartz:0
  4. # 得到形如上一行的文本
  5. # 在远端主机上,当你直接使用ssh连接而不配置任何X转发选项时,会得到...
  6. ~/ $ echo $DISPLAY
  7. # 得到空白,说明没有设置
  8. # 在远端主机上,当你使用 ssh -Y 连接时,会得到...
  9. ~/ $ echo $DISPLAY
  10. localhost:10.0
  11. # 得到这个,说明ssh -Y主动设置了DISPLAY变量
  12. # 当你用VMware直接在有图形界面的Ubuntu里运行终端时,会得到...
  13. ~/ $ echo $DISPLAY
  14. :0
  15. # 得到这个,这是因为用了默认的本地显示器,在本地进行显示
复制代码
当X Server地点的当地主机和X Client地点的远端主机的 $DISPLAY 变量都被正确设置时,X方面就没什么太大的问题了。
Mac:使用X Quartz实现长途窗口

Mac上的X Quartz的使用具有比力鲜明的特色。怎么说呢... 用起来感觉像“访达”。XQuartz自己是一个程序,而远端的X Client所产生的窗口则是属于这个程序的子窗口。
使用X Quartz在Mac上实现远端窗口的基本步骤如下:
值得注意的是,其中的 ssh -Y 在man手册中被指出是 “Trusted”。我一开始以为是通过 -Y 的话要额外经过身份验证之类的,后来细究了一下发现 -Y 类似裸奔模式: -X 只允许部门X Client的操纵,而 -Y 则没有这种限制。因此比力正经的教程通常会告诉你应该多用 -X 避免安全问题,而网上的文章通常都会发起你用 -Y 避免在奇怪的地方被莫名其妙地拦住。
如许的步骤只是让读者快速相识实现远端窗口的全部流程,细究起来照旧有很多问题,比如:
此外,如许做的延时是比力恐怖的。固然绘制的效果不错,但是上面谁人示意图中xeyes对鼠标的跟踪效果的延时高达800ms;我通过终端启动QtCreator之后,有关操纵的延时可以高达13.92s。如许的延时多少有点不可担当了。
有机会再做个对比实验,看看网络链路在其中的影响有多大。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4