大家好,欢迎来到IT知识分享网。
转自: macOS使用XQuartz支持X11实现Linux图形化界面显示 – 知乎
前言
在Windows中相信大家已经很熟悉使用Xmanager(Xshell), MobaXterm, SecureCRT通过X11实现Linux图形化界面显示,我的需求是在macOS下使用iTerm2作为Terminal实现X11图形化界面显示,网上大部分教程只提到安装Xquartz但并没有结合实际问题给出完整的解决步骤,我把实践过程做了详细的记录方便大家按照最简单的步骤实现Linux图形化显示效果。
更新历史
2020年11月20日 – 初稿
阅读原文 – https://wsgzao.github.io/post/x11/
X11介绍
有些Linux服务器出于性能和效率的考虑,通常都是没有安装图形化界面的,那么图形化程序在服务器上压根儿就跑不起来,或者无法直接显示出来,这就很尴尬了!那么如何解决这个问题呢?可以基于X11 Forwarding技术 + MobaXterm/Xshell/SecureCRT/XQuartz 等第三方工具,就可以轻松搞定,是不是很简单?
X协议
Linux 本身是没有图形化界面的,所谓的图形化界面系统只不过中 Linux 下的应用程序。这一点和 Windows 不一样。Windows 从 Windows 95 开始,图形界面就直接在系统内核中实现了,是操作系统不可或缺的一部分。Linux 的图形化界面,底层都是基于 X 协议。
X 协议由 X server 和 X client 组成: – X server 管理主机上与显示相关的硬件设置(如显卡、硬盘、鼠标等),它负责屏幕画面的绘制与显示,以及将输入设置(如键盘、鼠标)的动作告知 X client。 – X client (即 X 应用程序) 则主要负责事件的处理(即程序的逻辑)。
举个例子,如果用户点击了鼠标左键,因为鼠标归 X server 管理,于是 X server 就捕捉到了鼠标点击这个动作,然后它将这个动作告诉 X client,因为 X client 负责程序逻辑,于是 X client 就根据程序预先设定的逻辑(例如画一个圆),告诉 X server说:“请在鼠标点击的位置,画一个圆”。最后,X server 就响应 X client 的请求,在鼠标点击的位置,绘制并显示出一个圆。
X11 Forwarding
这么绕,有啥意义呢?当然有!
许多时候 X server 和 X client 在同一台主机上,这看起来没什么。但是, X server 和 X client 完全可以运行在不同的机器上,只要彼此通过 X 协议通信即可。于是,我们就可以做一些“神奇”的事情,比如像本文开头谈到的,在本地显示 (X server),运行在服务器上的 GUI 程序 (X client)。这样的操作可以通过 SSH X11 Forwarding (转发) 来实现。
X11 中的 X 指的就是 X 协议,11 指的是采用 X 协议的第 11 个版本。
macOS实现X11图形化界面显示
# macOS安装xquartz brew cask install xquartz # 启动xquartz,实测`Allow connections from clients`选项非必须条件 Run Applications > Utilities > XQuartz.app # 设置DISPLAY环境变量 export DISPLAY=:0 # 没有使用xquartz中terminal的话不会自动设置DISPLAY环境变量,可能会出现以下错误 [root@VM-2-11-centos ~]# firefox Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 Running without a11y support! Error: no DISPLAY environment variable specified # ssh添加-Y flag登录远程主机 ssh -Y user@host # 登录成功后可能出现以下错误,安装xauth即可解决 ssh -Y root@192.168.117.148 X11 forwarding request failed on channel 0 # 远程主机安装xauth,以centos为例,使用xclock可以测试图形化效果 yum install -y xauth xclock xclock # 如果需要浏览器支持安装firefox或者chrome即可 yum install firefox firefox yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm /usr/bin/google-chrome-stable %U --no-sandbox
参考文章
Enable X11 forward to load images from remote server on MacOS Mojave
Steps
- Install Xquartz to get X11 support on MacOS. You can google Xquartz and download it from its official site, or install using HomeBrew.
brew cask install xquartz
- Launch Xquartz. Go to Preference -> Security, click the box Allow connections from clients. NOTE: You have to lauch Xquartz with Allow connections from clients enable everytime you want to ssh to remote server with X11 forwarding support.
- Lauch terminal or iterm. Add environment DISPLAY.
- Lauch terminal or iterm, use flag -Y instead of -X with ssh.
ssh -Y user@address
FAQ
- Why do I need to install Xquartz?
From https://stackoverflow.com/a//
- Why do I have to add environment DISPLAY?
Please see https://askubuntu.com/a//
- Why do I have to use -Y instead of -X?
I got the following error when trying to run a python script which draws some curves using matplotlib:
This problem is sovled when using -Y instead of -X. Haven’t got enough time to find exact explanation, just post a link for those who are curious:
Can’t run “ssh -X” on MacOS Sierra
- How to fix X11 forwarding request failed on channel 0?
Install X authority file utility
sudo yum install xauth
ssh returns message “X11 forwarding request failed on channel 0”
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/124504.html