更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io

前言

在 Windows 中相信大家已经很熟悉使用 Xmanager(Xshell), MobaXterm, SecureCRT 通过 X11 实现 Linux 图形化界面显示,我的需求是在 macOS 下使用 iTerm2 作为 Terminal 实现 X11 图形化界面显示,网上大部分教程只提到安装 Xquartz 但并没有结合实际问题给出完整的解决步骤,我把实践过程做了详细的记录方便大家按照最简单的步骤实现 Linux 图形化显示效果。

1. 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 个版本。

2. 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
firefoxyum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
/usr/bin/google-chrome-stable %U --no-sandbox

3. FAQ

  1. Why do I need to install Xquartz?

    From https://stackoverflow.com/a/50182736/6769366

    XQuartz is standard. It used to come bundled with the OS, but Apple removed it back around Mavericks.

  2. Why do I have to add environment DISPLAY?

    Please see https://askubuntu.com/a/432257/745885[1]

  3. 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:

X Error of failed request:  BadAccess (attempt to access private resource denied)
Major opcode of failed request:  18 (X_ChangeProperty)
Serial number of failed request:  12
Current serial number in output stream:  15

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[2]

  1. How to fix X11 forwarding request failed on channel 0?

    Install X authority file utility

$ sudo yum install xauth

参考资料

[1]

https://askubuntu.com/a/432257/745885: https://askubuntu.com/a/432257/745885

[2]

Can’t run “ssh -X” on MacOS Sierra: https://stackoverflow.com/q/39622173/6769366

原文链接:https://wsgzao.github.io/post/x11/

你可能还喜欢

点击下方图片即可阅读

在 k8s 中使用 Kubevirt 运行管理 Windows 10 操作系统

云原生是一种信仰 ????

码关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

点击 "阅读原文" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️

macOS 使用 XQuartz 支持 X11 实现 Linux 图形化界面显示相关推荐

  1. xclock 不出来界面_macOS 使用 XQuartz 支持 X11 实现 Linux 图形化界面显示

    更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io 前言 在 Windows 中相信大家已经很熟悉使用 Xmanager(Xshell), MobaXterm, Secur ...

  2. jtessboxeditorfx 界面显示不出来_macOS 使用 XQuartz 支持 X11 实现 Linux 图形化界面显示...

    更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io 前言 在 Windows 中相信大家已经很熟悉使用 Xmanager(Xshell), MobaXterm, Secur ...

  3. linux远程图形操作系统,二、Linux操作系统之操作篇-Xmanager 远程访问Linux图形化界面...

    2.Linux操作系统之操作篇-Xmanager 远程访问Linux图形化界面 红帽配置Xmanager 远程访问Linux: 1. 修改gdm配置文件,修改内容为粗体部分. /etc/gdm/cus ...

  4. linux图形化应用程序快捷方式制作方法

    linux图形化应用程序快捷方式制作方法 准备 一个Linux系统[传统Unity桌面环境,应用程序启动器的容器--Launcher] 说明 linux的.desktop文件是一种菜单和快捷方式的描述 ...

  5. oracle linux 图形化,Linux7图形化安装Oracle11g教程,亲测实用有效!

    linux图形化安装Oracle11g和静默安装Oracle11g前面步骤是一样的,可以参考Linux7静默安装Oracle11g教程,亲测实用有效!的前11步骤,接下来: 12.开始安装 切换到or ...

  6. Linux图形化磁盘管理工具gparted

    Linux图形化磁盘管理工具gparted 有时候想要对磁盘扩容.重新分区等.又不想用复杂的命令,也记不住. 此时一般是希望一个比较方便的.类似于Windows上disk genius的工具. gpa ...

  7. 麦昆mciro:bit开发板机器人小车——支持makecode图形化编程,支持基于Mind+的图形化编程及python编程

    麦昆4.0中文版 随着时代发展的趋势,以及各个政策的出台,市场上的机器人兴趣班.编程兴趣班越来越火爆,编程课也慢慢走进了学校的课堂.但是作为工薪阶层的普通家庭来说连续数年的学习一定有很大的经济压力.所 ...

  8. Linux图形化界面如何全屏

    将鼠标定位到Linux图形化界面中,点击快捷键:Ctrl+Alt+Enter,退出全屏也是该快捷键,如果全屏效果依然不符合你的要求,你可以选择图形界面上方的系统>首选项>显示中来设置分辨率 ...

  9. 使用Putty+Xming登录Linux图形化界面

    有些Linux程序需要依赖图形界面才能启动,例如Kettle的配置页面.之前都是使用VNC,通过在服务器和客户端分别安装VNCServer和VNCViewer来完成.今天介绍另外一种方式,在客户端利用 ...

最新文章

  1. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)
  2. 一起谈.NET技术,云计算和数据
  3. DOM中的setInterval方法
  4. linux-centos下源代码安装subversion (svn)
  5. [云炬创业学笔记]第一章创业是什么测试13
  6. 浮点数赋值给整数_初学者专题:变量和赋值
  7. jQuery 判断div是否shown
  8. 数学基础加强1---机器学习与数学分析
  9. window10刷新卡顿
  10. 苹果服务器装系统教程视频教程,苹果“雪豹”服务器系统安装傻瓜教程(多图)...
  11. 【魔兽世界插件】魔兽世界插件实战笔记从入门到放弃的心理历程 第六节 窗体对象的锚定
  12. 如何对自己定义的目标进行分解
  13. 当下既是上天赐予的礼物 ——《心灵奇旅》影评
  14. 《数字图像处理》手动实现最佳陷波滤波
  15. Hive查询问题(卡住)
  16. 【深度学习入门】- 神经网络
  17. 直接最小二乘法拟合椭圆
  18. 短视频抖音电商编导剧本分镜拍摄内容策划脚本计划表格方案模板
  19. TradingView - K线 使用详解
  20. TMS320C6678开发板( DSP+Zynq )RTOS综合功能案例,嵌入式必看!

热门文章

  1. Windows Vista Ultimate OEM 21in1 简体中文版(终结版)
  2. 游戏画面的印象判断价值和审美属性分析
  3. Ubuntu 暂时不能解析域名及解决办法
  4. 天津Java开发培训班哪家好?选机构攻略
  5. 【HTML】在图标上绘制圆圈数字提示符
  6. jupyter lab 相关
  7. 精品连载丨安卓 App 逆向课程之二逆向神器 frida 的介绍
  8. 8.20PHP所学知识总结
  9. 基于机器学习之模型树短期负荷预测(Matlab代码实现)
  10. 公交车站台_公交候车亭_候车亭厂家_广告垃圾箱_指路牌_公交车站台