当前位置: 首页 > Linux

macOS使用XQuartz支持X11实现Linux图形界面显示

时间:2023-04-07 01:45:53 Linux

前言相信大家已经熟悉在Windows中使用Xmanager(Xshell)、MobaXterm、SecureCRT通过X11实现Linux图形界面显示。我的需求是在macOS下使用iTerm2作为终端实现X11图形界面显示,网上的教程大多只提到安装Xquartz而没有给出完整的解决实际问题的方法。我把实践过程做了详细记录,方便大家按照最简单的步骤实现Linux图形。显示效果。更新历史November20,2020-阅读初稿原文-https://wsgzao.github.io/post...X11简介出于性能和效率的考虑,一些Linux服务器通常不会安装图形界面。那么图形化程序在服务器上根本无法运行,或者无法直接显示,非常尴尬!那么如何解决这个问题呢?基于X11Forwarding技术+MobaXterm/Xshell/SecureCRT/XQuartz等第三方工具,轻松搞定,是不是很简单?X协议的Linux本身是没有图形界面的,所谓的图形界面系统只是Linux下的一个应用程序。这与Windows不同。Windows从Windows95开始,图形界面直接在系统内核中实现,是操作系统不可或缺的一部分。Linux的图形界面底层是基于X协议的。X协议由X服务器和X客户端组成:X服务器管理与显示相关的硬件设置(如显卡、硬盘、鼠标等)的动作通知X客户端。X客户端(即X应用程序)主要负责事件处理(即程序的逻辑)。比如用户点击鼠标左键,因为鼠标是由Xserver管理的,Xserver捕获鼠标点击,然后把这个动作告诉Xclient,因为Xclient负责程序逻辑,所以X客户端会根据程序预设的逻辑(比如画一个圆),告诉X服务器:“请在鼠标点击的位置画一个圆”。最后,X服务器响应X客户端的请求,在鼠标点击的位置绘制并显示一个圆。X11转发这样绕来绕去有什么意义?当然有!很多时候X服务器和X客户端都在同一台主机上,这看起来没什么大不了的。但是,Xserver和Xclient可以运行在不同的机器上,只要它们之间通过X协议进行通信即可。因此,我们可以做一些“神奇”的事情,比如本文开头提到的本地显示(Xserver)和在服务器上运行GUI程序(Xclient)。这样的操作可以通过SSHX11Forwarding(转发)来实现。X11中的X指的是X协议,11指的是使用X协议的第11个版本。macOS实现X11图形界面显示#macOSinstallxquartzbrewcaskinstallxquartz#启动xquartz,实测`Allowconnectionsfromclients`选项不是必要条件RunApplications>Utilities>XQuartz.app#设置DISPLAY环境变量exportDISPLAY=:0#Notusedxquartz中的terminal不会自动设置DISPLAY环境变量,可能会出现如下错误[root@VM-2-11-centos~]#firefoxFailedtoopenconnectionto"session"messagebus:Unabletoautolaunchadbus-daemonwithouta$DISPLAYforX11Runningwithouta11ysupport!Error:noDISPLAYenvironmentvariablespecified#sshadd-Yflagtologintoremotehostssh-Yuser@host#登录成功后可能出现如下错误,安装xauthtosolvessh-Yroot@192.168.117.148X11forwardingrequestfailedonchannel0#在远程主机上安装xauth,以centos为例,使用xclock测试图形效果yuminstall-yxauthxclockxclock#如果需要浏览器支持,可以安装firefox或者chromeyuminstallfirefoxfirefoxyuminstallhttps://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm/usr/bin/google-chrome-stable%U--no-sandboxStepsInstallXquartz在MacOS上获得X11支持。你可以谷歌Xquartz并从其官方下载ial站点,或使用HomeBrew.brewcaskinstallxquartzLaunchXquartz安装。转到“首选项”->“安全性”,单击“允许来自客户端的连接”框。注意:每次您想要使用X11转发支持通过ssh连接到远程服务器时,您都必须启动Xquartz并启用允许来自客户端的连接。启动终端或iterm。添加环境DISPLAY.#添加仅在当前终端上工作的环境条目,使用`export`exportDISPLAY=:0#添加在每个终端上工作的环境条目,#将`exportDISPLAY=:0`附加到`.bashrc`或`.zshrc`如果您使用zsh.Lauch终端或iterm,请使用标志-Y而不是-X和ssh.ssh-Yuser@addressFAQ为什么我需要安装Xquartz?来自https://stackoverflow.com/a/5...XQuartz是标准的。它曾经与操作系统捆绑在一起,但Apple在Mavericks周围将其删除。为什么我必须添加环境显示?请参阅https://askubuntu.com/a/43225...为什么我必须使用-Y而不是-X?我得到了f尝试运行使用matplotlib绘制一些曲线的python脚本时出现错误:X失败请求错误:BadAccess(尝试访问私有资源被拒绝)失败请求的主要操作码:18(X_ChangeProperty)失败请求的序列号:12当前序列号在输出流中:15这个问题在使用-Y而不是-X时得到解决。没有足够的时间找到确切的解释,只是为那些好奇的人发布一个链接:Can'trun“ssh-X”onMacOSSierraHowtofixX11forwardingrequestfailedonchannel0?InstallXauthorityfileutilitysudoyuminstallxauthsshreturnsmessage“X11forwardingrequestfailedonchannel0”参考文章EnableX11forwardtoloadimagesfromremoteserveronMacOSMojavelinux服务器通过X11实现图形化界面显示