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

f678afb71702817e6242dc749ccba3b7.gif

更多奇技淫巧欢迎订阅博客: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 协议

b172d2a1717f4d9613fd2e0b222385c4.png

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

c06260e286ebf264724c7f61117b2539.png

这么绕,有啥意义呢?当然有!

许多时候 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
firefox

yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
/usr/bin/google-chrome-stable %U --no-sandbox
e3b9e9e50d171a363b6f916015994510.png
62e79d56e777bc74add5dff3e62131b3.png

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/

4586ad9b08afeabfded068d67cf06a1d.gif

9a418698979624ee5d64b1d0a50ada02.png

你可能还喜欢

点击下方图片即可阅读

7f0c8fbb5ae3c04b7dae37c02e45d2cf.png

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

b2002bbd81876ab618ffb1fc9b0ea69b.gif

云原生是一种信仰 ?

0dde940e4ed0dcd6cfaf04305605d1b6.png

码关注公众号

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

8d90ffcd9286fa3dee9d4fe84222a9b9.gif

7c305bcdf30dc0ffa35e40941c0b0150.gif

点击

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

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

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

相关文章

命令设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试 原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试第一篇、GP降雨量等值线建模、发布及测试在水利、气象等行业中,要在WebGIS中实现空间分析功能,如绘制等…

win10企业版更新和安全中没有 “恢复”这个选项_通知:微软已强制对Windows 10更新升级...

最近,微软发布了Windows10的强制升级。从本月开始,如果您的个人电脑、笔记本电脑和其他设备没有手动升级,微软将强制部分用户升级到Windows10 1909或2004版本。原因很简单。微软已经停止支持Windows10 1903版(包括家庭版和专业版&…

Oracle数据库之数据类型

Oracle数据库之数据类型 Oracle基本数据类型(亦叫内置数据类型,internal datatypes或built-in datatypes)可以按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW&RAW类型、ROWID&UROWID类型。 下面介绍常用的Oracle数据…

docker 多个mysql_mysql8.0 利用docker容器安装配置多主多从集群

1. 在/user/local/share/下创建mysql文件夹,在mysql文件夹目录下创建4个文件夹分别是:master1, master2, slave1, slave2分别在每个目录下建立data, conf, logs用于数据持久化创建后如下2.创建容器:1)创建一个名为master1的mysql容器(主 mysql)docker ru…

JavaFX 2.0和Scala,例如牛奶和饼干

JavaFX 2.0和Scala都是很好的技术,但是一起使用时效果会更好。 JavaFX 2.0是一种功能强大的富客户端技术,具有先进的图形,动画和媒体功能。 Scala是一种简单但功能强大的语言,具有用于编写特定于域的语言(DSL&#xff…

两张图片互相切换

图片切换 $(.selectarea img).click(function () { if ($(this).attr("src") "/Content/images/persornalZL/select01.jpg") { $(this).attr("src", "/Content/images/persornalZL/select02.jpg"); } else { $(this).attr("src&…

thinkphp+mysql+join+where_thinkphp5.0 多join时where无法between

情况类似于这个链接,这帖子的老哥没有答案,现在遇到一样的问题了,下面贴上代码$map [products.insurance_status>1];//是否计算下线的产品if( input(get.times) && input(get.times) < 7 ){$time return_times(input(get.times));//此处有bug$map[order.pay_ti…

访客设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

console.log()与alert()的区别

1、alert() a、有阻塞作用&#xff0c;不点击确定&#xff0c;后续代码无法继续执行 b、alert只能输出string&#xff0c;如果alert输出的是对象&#xff0c;会自动调用toString()方法 eg&#xff1a;alert([1,2,3]);//1,2,3 c、alert不支持多个参数的写法&am…

报名照片审核处理工具_太浦军考|2020年文职人员报名照片审核程序,照片处理工具应该如何使用?...

考文职 找太浦 最靠谱照片处理工具使用说明01注意&#xff1a;一、本工具是报名照片审核处理工具&#xff0c;只有通过该审核工具审核通过的照片才能在注册时正常上传。照片将应用在准考证和合格证书中。二、源文件必须是标准证件数字照片&#xff0c;JPG或JPEG格式&#xff0c…

ANT基本操作

1.输入输出 1.1 输入   不能执行交互式操作。只能采取下面的形式&#xff1a; 1.1.1 变量 ① 其中已经预定义的变量有&#xff1a; 属性 解释 ant.file 该构建文件的完整地址 ant.version 安装的 Apache Ant 的版本 basedir 构建文件的基目录的绝对路径&#xff0c;作…

hadoop伪分布式模式_Hadoop模式介绍-独立,伪分布式,分布式

hadoop伪分布式模式了解了什么是Hadoop之后&#xff0c;让我们在单机上启动Hadoop&#xff1a; 这篇文章包含在ubuntu上安装Hadoop的说明。 这是Hadoop安装的快速分步教程。 在这里&#xff0c;您将获得以独立模式 &#xff08;单节点集群&#xff09;安装Hadoop所需的所有命令…

SSH面试题【转】

SSH面试题整理 http://blog.csdn.net/xuyuxin8145/article/details/6638084 1. BeanFactory的作用是什么&#xff1f; [中] BeanFactory是配置、创建、管理bean的容器&#xff0c;有时候也称为bean上下文。Bean与bean的依赖关系&#xff0c;也是由…

python 比赛成绩预测_Python预测NBA比赛结果

下载W3Cschool手机App&#xff0c;0基础随时随地学编程导语利用Python简单地预测一下NBA比赛结果。。。这大概就叫蹭热度吧。。。毕竟貌似今天朋友圈都在刷NBA相关的内容。。。虽然我并不能看懂。。。但这并不妨碍我瞎预测一波。。。So,以下内容纯属瞎玩&#xff0c;如有雷同&a…

ffmpeg摄像头推流

ffmpeg -f dshow -i video"Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f mpegts udp://230.0.0.1:6000 默认是640x480 我I5的机器用了10%的CPU -r 25 设置帧率 -s 1280x720 指定分辨率 默认640x480 -g 1 -keyint_min 2 设置关键帧…

python简单实用案例_Ajax的简单实用实例代码

细说SSO单点登录(转)OAuth2.0:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-security.html#boot-features-security-oauth2-resource-serverhttp...文章developerguy2016-07-131080浏览量怎样在不使用框架的基础上开发一个 Javascript 组件本…

适配器设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

[转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)

在windows环境下&#xff0c;我们通常在IDE如VS的工程中开发C项目&#xff0c;对于生成和使用静态库&#xff08;*.lib&#xff09;与动态库&#xff08;*.dll&#xff09;可能都已经比较熟悉&#xff0c;但是&#xff0c;在linux环境下&#xff0c;则是另一套模式&#xff0c;…

cesium鼠标控制键盘_Cesium中级教程3 - Camera - 相机(摄像机)

CameraCesiumJS中的Camera控制场景的视图。有很多方法可以操作Camera&#xff0c;如旋转(rotate)、缩放(zoom)、平移(pan)和飞到目的地(flyTo)。CesiumJS有鼠标和触摸事件用来处理与Camrea的交互&#xff0c;还有API来以编程方式操作摄像机。了解如何使用Camera API和自定义相机…