Linux(22):X Window 设定介绍

X Window System

X Window System 是个非常大的架构,他还用到网络功能。也就是说,其实 X 窗口系统是能够跨网络与跨操作系统平台的。

X Window系统最早是由 MIT (Massachusetts Institute of Technology,麻省理工学院) 在1984年发展出来的,当初 X 就是在 Unix 的 System V这个操作系统版本上面开发出来的。
在开发 X 时,开发者就希望这个窗口接口不要与硬件有强烈的相关性,这是因为如果与硬件的相关性高,那就等于是一个操作系统了,如此一来的应用性会比较局限。因此 X 在最初就是以应用程序的概念来开发的,而非以操作系统来开发。

需要大概知道的有:
在 Unix Like 上面的图形用户接口(GUI) 被称为 X 或 X11;
X11 是一个【软件】而不是一个操作系统;
X11 是利用网络架构来进行图形接口的执行与绘制;
较著名的X版本为 X11R6 这一版,目前大部分的 X 都是这一版演化出来的(包括X11R7);
现在大部分的 distribution 使用的 X 都是由 Xorg 基金会所提供的 X11 软件;
X11 使用的是 MIT 授权,为类似 GPL的 开放原始码授权方式。

主要组件:X Server/X Client/Window Manage/Display Manager

X Window system 是个利用网络架构的图形用户接口软件,这个架构基本上是分成 X Server 与 X Client两个组件而已。其中 X Server在管理硬件,而 X Client 则是应用程序。
在运作上,X Client 应用程序会将所想要呈现的画面告知 X Server,最终由 X server 来将结果透过他所管理的硬件绘制出来。
在这里插入图片描述
在客户端想要取得来自服务器的图形数据时,客户端使用的当然是客户端的硬设备,所以,X Server 的重点就是在管理客户端的硬件,包括接受键盘/鼠标等设备的输入信息,并且将图形绘制到屏幕上。
X Client (就是X应用程序)用来告知 X Server要绘制啥东西。远程服务器提供的是 X client 软件。

X Server:硬件管理、屏幕绘制与提供字型功能:

X Window System是要显示图形接口,因此需要一个组件来管理主机上面的所有硬设备才行,这个任务就是 X Server所负责的。
X Server管理的设备主要与输入/输出有关:包括键盘、鼠标、手写板、显示器(monitor)、屏幕分辨率与颜色深度、显示适配器(包含驱动程序)与显示的字型等等;

X Window 在 Linux 里面仅能算是【软件】,所以 X Window 有自己的配置文件,必须要针对他的配置文件设定妥当才行。也就是说,Linux 的设定与 X Server 的设定不一定要相同的。总之,X Server 的主要功能就是在管理【主机】上面的显示硬件与驱动程序。

每部客户端主机都需要安装 X Server,而服务器端则是提供 X Client 软件,以提供客户端绘图所需要的数据数据。

X Server / X Client 的互动并非仅有 client --> server,两者其实有互动的。 X Server 还有一个重要的工作,那就是将来自输入设备(如键盘、鼠标等)的动作告知 X Client。X Server 既然是管理这些周边硬件,所以,周边硬件的动作当然是由 X Server来管理的,但是 X Server 本身并不知道接口设备这些动作会造成什么显示上的效果,因此 X Server 会将接口设备的这些动作行为告知 X Client。

X Client:负责 X Server 要求的【事件】之处理:

X Server 主要是管理显示接口与在屏幕上绘图,同时将输入设备的行为告知 X Client,此时 X Client 就会依据这个输入设备的行为来开始处理,最后 X Client 会得到【这个输入设备的行为会产生某个图示】,然后将这个图标的显示数据回传给 X Server , X server 再根据 X Client 传来的绘图资料将他描图在自己的屏幕上,来得到显示的结果。
也就是说,X Client 最重要的工作就是处理来自 X Server 的动作,将该动作处理成为绘图数据,再将这些绘图数据传回给 X Server。由于 X Client 的目的在产生绘图的数据,因此也称呼 X Client 为 X Application (X应用程序)。
而且,每个X Client并不知道其他 X Client 的存在,意思是说,如果有两个以上的 X Client 同时存在时,两者并不知道对方到底传了什么数据给 X Server ,因此 X Client的绘图常常会互相重迭而产生困扰。
最大的好处是,X Client 不需要知道 X Server 的硬件配备与操作系统。因为 X Client 单纯就是在处理绘图的数据而己,本身是不绘图的。

X Server 客户端的操作系统与 X Client 的沟通示意:
在这里插入图片描述

X Window Manager:特殊的 X Client ,负责管理所有的 X Client 软件

X Client 的主要工作是将来自 X Server 的数据处理成为绘图数据,再回传给X server而已,所以 X Client 本身是不知道他在 X Server 当中的位置、大小以及其他相关信息的。
XWindow Manager (WM,窗口管理员)也是 X client ,只是他主要在负责全部 X Client 的控管,还包括提供某些特殊的功能,例如:
1.提供许多的控制元素,包括任务栏、背景桌面的设定等等;
2.管理虚拟桌面(virtual desktop);
3.提供窗口控制参数,这包括窗口的大小、窗口的重迭显示、窗口的移动、窗口的最小化等等。

在Linux底下,每套 Window Manager 都是独特存在的,不是换了桌面与显示效果而已,而是连显示的引擎都不会一样。

X Server / X client / window manager 的关系:举CentOS预设的GNOME为例,由于我们要在本机端启动X Window system ,因此,在我们的 CentOS主机上面必须要有 Xorg 的 X server核心,这样才能够提供屏幕的绘制;然后为了让窗口管理更方便,于是就加装了 GNOME 这个计划的 window manager ,然后为了让自己的使用更方便,于是就在 GNOME 上面加上更多的窗口应用软件,包括输入法等等的,最后就建构出我们的 X Window System。所以,X server/X client/Window Manager是 同时存在于我们一部Linux 主机上头的。

Display Manager:提供登入需求
在本机的文字接口底下可以输入 startx 来启动 X 系统,此时由于已经登入系统了,因此不需要重新登入即可取得 X 环境。但如果是 graphical.target 的环境呢,会发现在 tty1 或其他 tty 的地方有个 Display Manager 可以让你使用图形接口登入(输入账号密码)。
Display manager 最大的任务就是提供登入的环境,并且加载使用者选择的 Window Manager 与语系等数据。
几乎所有的大型窗口管理员项目计划都会提供 display manager 的,在CentOS 上面我们主要利用的是 GNOME 的 GNOME Display Manager (gdm) 这支程序来提供 ttyl 的图形接口登入。至于登入后取得的窗口管理员,则可以在 gdm 上面进行选择的。

X Window 的启动流程

要启动 X Window System 时,必须要先启动管理硬件与绘图的X Server,然后才加载 X Client。
基本上,目前都是使用 Window Manager 来管理窗口接口风格的。可以透过登入本机的文字接口后,输入 startx 来启动 X 窗口;也能够透过 display manager(如果有启动graphical.target)提供的登入画面,输入账号密码来登入与取得X窗口的。

在文字接口启动X:透过 startx 指令
Linux是个多人多任务的操作系统,所以 X 窗口也是可以根据不同的使用者而有不同的设定。也就是说,每个用户启动 X 时,X server 的分辨率、启动 X client 的相关软件及 Window Manager 的选择可能都不一样。
但是,如果是首次登入X,还没有建立自己的专属 X 画面时,在纯文本接口且并没有启动X窗口的情况下来输入 startx 。
startx 其实是一个 shell script ,会主动的帮忙使用者建立起他们的 X 所需要引用的配置文件。
startx最重要的任务就是找出用户或者是系统默认的 X server 与 X client 的配置文件,而使用者也能够使用 startx 外接参数来取代配置文件的内容。这个意思是说: startx可以直接启动,也能够外接参数。

startx [X client 参数] -- [X server 参数]

事实上启动 X 的是 xinit 这支程序,startx 仅是在帮忙找出设定值而已。
startx 找到的设定值可用顺序基本上是这样的:
x server的参数方面:
1.使用 startx 后面接的参数;
2.若无参数,则找寻用户家目录的文件,亦即~/.xserverrc;
3.若无上述两者,则以 /etc/X11/xinit/xserverrc;
4.若无上述三者,则单纯执行 /usr/bin/X(此即X server执行档);
x client 的参数方面:
1.使用 startx 后面接的参数;
2.若无参数,则找寻用户家目录的文件,亦即~/.xinitrc;
3.若无上述两者,则以 /etc/X11/xinit/xinitrc;
4.若无上述三者,则单纯执行xterm(此为X底下的终端机软件)

根据上述的流程找到启动 X 时所需要的 X server / X client 的参数,接下来 startx 会去呼叫 xinit 这支程序来启动所需要的X窗口系统整体。

由 startx 呼叫执行的 xinit
事实上,当 startx 找到需要的设定值后,就呼叫 xinit 实际启动 X 的。他的语法是:

xunit [client option] -- [server or display option]

那个 client option 与 server option 是由刚刚 startx 去找出来的。
在透过 startx 找到适当的 xinitrc 与 xserverrc 后,就交给 xinit 来执行。在预设的情况下(使用者尚未有 ~/.xinitrc 等文件时),输入 startx,就等于进行 xinit /etc/X11/xinit/xinitrc – /etc/X11/xinit/xserverrc 这个指令一般。但由于 xserverrc 也不存在因此实际上的指令是: xinit /etc/X11/xinit/xinitrc – /usr/bin/X。

不要直接执行 xinit 而是使用startx来呼叫 xinit 是因为必须要取得一些参数,startx 可以帮我们快速的找到这些参数而不必手动输入的。因为单纯只是执行 xinit 的时候,系统的默认X Client 与 X Server的内容是这样的:

xinit xterm -gemotry +l+l -n login -display :0 -- X :0

在 X client 方面:那个 xterm 是 X 窗口底下的虚拟终端机,后面接的参数则是这个终端机的位置与登入与否。最后面会接一个【-display :0】表示这个虚拟终端机是启动在【第:0号的X显示接口】的意思。
至于X Server方面,而我们启动的 X server 程序就是X。其实 X 就是 Xorg 的连结档,亦即是 X Server的主程序。同时还指定X启动在第:0 个 X 显示接口。
xinit 主要在启动 X server 与加载 Xclient ,但这个xinit 所需要的参数则是由 startx去 帮忙找寻的。因此,最重要的当然就是 startx 找到的那些参数: /etc/X11/xinit/ 目录下的 xinitrc 与 xserverrc。

启动 X serve 的文件:xserverrc
X 窗口最先需要启动的就是 X server,那 X server 启动的脚本与参数是透过 /etc/X11/xinit/ 里面的xserverrc。
在启动X Server 时,Xorg 会去读取 /etc/X11/xorg.conf 这个配置文件。如果一切顺利,那么 X 就会顺利的在 tty2 以后终端环境中启动了 X。单纯的X启动时,你只会看到画面一片漆黑,然后中心有个鼠标的光标而已。
X 启动的时候还可以指定启动的接口。那就是:0这个参数。事实上 Linux可以【同时启动多个 X】。第一个 X 的画面会在 :0 亦即是tty2,第二个X则是 :1 亦即是tty3。

启动 X Client 的文件:xinitrc
假设家目录并没有 ~/.xinitrc ,则此时 X Client 会以 /etc/X11/xinit/xinitrc 来作为启动 X Clien t的预设脚本。xinitrc 这个文件会将很多其他的文件参数引进来,包括 /etc/X11/xinit/xinitrc-common 与 /etc/X11/xinit/Xclients 还有 /etc/sysconfig/desktop。

不过分析到最后,其实最终就是载入 KDE 或者是 GNOME 而已。可以发现最终在 XClient 文件当中会有两个指令的搜寻,包括 startkde 与 gnome-session这两个,这也是CentOS预设会提供的两个主要的 Window Manager 。而你也可以透过修改 /etc/sysconfig/desktop 内的 DESKTOP=GNOME 或 DESKTOP=KDE 来决定默认使用哪个窗口管理员的。如果并没有安装这两个,那么 X 就会去使用 twm 这个窗口管理员来管理环境。

X 启动的埠口
在文字接口底下启动 X 时,直接使用 startx 来找到 X server 与 X client 的参数或配置文件,然后再呼叫 xinit 来启动 X 窗口系统。xinit 先载入 X server 到预设的 :0 这个显示接口,然后再加载 X client 到这个 X显示接口上。而 X client 通常就是 GNOME 或 KDE,这两个设定也能够在 /etc/sysconfig/desktop 里面作好设定。
CentOS 由于考虑 X 窗口是在本机上面运作,因此将埠口改为插槽档(socket)了,因此无法观察到 X 启动的埠口的。事实上,X server 应该是要启动一个 port 6000 来与X client进行沟通的。由于系统上面也可能有多个 X 存在,因此就会有 port 6001, port 6002…等等。这也就是说:(假设为 multi-user.target 模式,且用户仅曾经切换到 tty1 而已)。

在这里插入图片描述

在 X Window System 的环境下,称 port 6000 为第 0 个显示接口,亦即为 hostname:0 ,那个主机名通常可以不写,所以就成了:0即可。在预设的情况下,第一个启动的 X(不论是启动在第几个port number)是在 tty2 ,亦即按下[ctrl]+[Alt]+[F2]那个画面。而启动的第二个 X (可以有多个 X 同时启动在系统)。则预设在tty3 亦即[ctrl]+[Alt]+[F3]那个画面。
因为主机上的 X 可能有多个同时存在,因此,在启动 X Server / Client 时,应该都要注明该 X Server / Client 主要是提供或接受来自哪个 display 的 port number才行。

X Server 配置文件解析与设定

基本上,X Server 管理的是显示适配器、屏幕分辨率、鼠标按键对应等等,尤其是显示适配器芯片的认识。此外,还有显示的字体也是 X Server 管理的一环。基本上,X server 的配置文件都是预设放置在/etc/X11 目录下,而相关的显示模块或总总模块,则主要放置在 /usr/lib64/xorg/modules 底下。
比较重要的是字型文件与芯片组,主要放置在:
1.提供的屏幕字体:/usr/share/X11/fonts/
2.显示适配器的芯片组:/usr/lib64/xorg/modules/drivers/

解析 xorg.conf 设定

在这里插入图片描述
如果只想要加入或者是修改部份的设定,并不是每个组件都要自行设定的话,那么可以在 /etc/X11/xorg.conf.d/ 这个目录下建立文件名为 .conf 的文件,将需要的额外项目加进去即可。

在修改这个文件之前,务必将这个文件给它备份下来,免的改错了甚么东西导致连 X server 都无法启动的问题啊。这个文件的内容是分成数个段落的,每个段落以 Section 开始,以 EndSection结束,里面含有该Section (段落)的相关设定值,例如:
在这里插入图片描述

至于常见的 section name 主要有:

  1. Module:被加载到 X Server 当中的模块(某些功能的驱动程序);
  2. InputDevice:包括输入的1.键盘的格式2.鼠标的格式,以及其他相关输入设备;
  3. Files:设定字型所在的目录位置等;
  4. Monitor:监视器的格式,主要是设定水平、垂直的更新频率,与硬件有关;
  5. Device:这个重要,就是显示适配器芯片组的相关设定;
  6. Screen:这个是在屏幕上显示的相关分辨率与颜色深度的设定项目,与显示的行为有关;
  7. ServerLayout:上述的每个项目都可以重复设定,这里则是此一 X server 要取用的哪个项目值的设定。

假设是在 multi-user.targe t的环境下,那就可以这样作来产生 xorg.conf:

Xorg -configure

字型管理

Xorg 所使用的字型大部分都是放置于底下的目录中:
/usr/share/X11/fonts/
/usr/share/fonts/

不过 Xorg 默认会加载的字型则是记录于 /etc/X11/fontpath.d/ 目录中,使用链接文件的模式来进行链接的动作而已。

让窗口管理员可以使用额外的字型
如果想要使用额外的字型的话,可以自行取得某些字型来处理的。

显示器参数微调

测试目前的屏幕搭配显卡所能够处理的分辨率与更新频率(须在X环境下):
在这里插入图片描述
在这里插入图片描述

若想强迫 X server 更改屏幕的分辨率与更新频率,则需要修订xorg.conf 的设定。先来侦测:

gtf 水平像素 垂直像素 更新频率 [-xv]

在这里插入图片描述在这里插入图片描述
将上述的数据输入xorg.conf .d /*.conf 内的 Monitor 项目中。

《鸟哥的Linux私房菜-基础篇》学习笔记

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

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

相关文章

day13 栈与队列(三)

day13 2023.12.11 代码随想录 今天刚出差回来,拉下了很多天的博客,慢慢补吧,每天做当天的任务,再补一篇博客。 1. 239滑动窗口最大值 本题就是每次窗口内容放在一个单调队列中,那么每次直接返回队头元素(最…

Python中的继承:概念、用法与示例

目录 一、引言 二、继承的概念 三、继承的用法 1、继承父类的属性和方法 2、添加新的属性和方法 3、覆盖父类的方法 四、示例代码展示 五、继承中的多态性 六、继承中的封装和抽象 七、继承中的多重继承 总结 一、引言 面向对象编程(OOP)是一…

「完美世界」石昊被诓入至尊道场,修炼无敌道,打跑天仙书院弟子

Hello,小伙伴们,我是拾荒君。 《完美世界》这部国漫,在粉丝的翘首期盼中,终于迎来了第141集的更新。这一集的内容,对于喜欢石昊和至尊道场劫难的观众来说,可谓是扣人心弦,让人目不转睛。 在这一集中&#…

【信息学奥赛】拼在起跑线上,想入道就别落下自己!

编程无难事,只怕有心人,学就是了! 文章目录 1 信息学奥赛简介2 信息学竞赛的经验回顾3 优秀参考图书推荐《信息学奥赛一本通关》4 高质量技术圈开放 1 信息学奥赛简介 信息学奥赛,作为全国中学生学科奥林匹克“五大学科竞赛”之一…

ChatGPT使用:一个发包机器人的提示词

发包机器人: 设想:目前项目组有n条打包线会输出多个包,用户想获取最新的包是比较困难的,难点在于 1. 分支多:trunk,release,outer等,至少有3个分支; 2. 多平台&#x…

Spring+SpringMVC+SpringBoot

Spring bean bean基础配置 bean别名配置 注意事项: 获取bean无论是通过id还是name获取。如果无法获取到,将抛出异常NoSuchBeanDefinitionException bean的作用范围配置 适合交给容器进行管理的bean 表现层对象、业务层对象、数据层对象、工具对象 不…

《opencv实用探索·十九》光流法检测运动目标

前言 光流法(Optical Flow)是计算机视觉中的一种技术,用于估计图像中相邻帧之间的像素位移或运动。它是一种用于追踪图像中物体运动的技术,可以在视频中检测并测量物体的运动轨迹。 光流的直观理解: 光流是一个视频中两…

智能物联网(IoT)VS AI物联网(AIoT)

#IoT# #AIoT# 智能物联网(IoT)和AI物联网(AIoT)区别 概念: 物联网(IoT):即“万物相连的互联网”,是在互联网基础上延伸和扩展的网络,将各种信息传感设备与网…

离散型制造企业MES系统行业应用

离散型制造企业具有产品种类多、生产周期长、生产过程复杂等特点,因此,采用先进的生产管理系统对于提高企业的生产效率和管理水平至关重要。其中,制造执行系统(MES)在离散型制造企业中得到了广泛应用, 一、…

TensorBoard使用和问题解决

一、什么是TensorBoard? TensorBoard 是一组用于数据可视化的工具,它包含在流行的开源机器学习库 Tensorflow 中。TensorBoard 的主要功能包括: 可视化模型的网络架构跟踪模型指标,如损失和准确性等检查机器学习工作流程中权重、偏差和其他…

PDI/Kettle-9.2.0.0-R(对应jdk1.8)源码编译问题记录及源码结构简介

目录 📚第一章 前言📗背景📗目的📗总体方向 📚第二章 代码结构初识基本结构📗代码模块详情 ⁉️问题记录❓问题一:代码分支哪些是发布版本❗答:后缀-R的版本 ❓问题二:50…

Milesight VPN server.js 任意文件读取漏洞(CVE-2023-23907)

0x01 产品简介 MilesightVPN 是一款软件,一个 Milesight 产品的 VPN 通道设置过程更加完善,并可通过网络服务器界面连接状态。 0x02 漏洞概述 MilesightVPN server.js接口处存在文件读取漏洞,攻击者可通过该漏洞读取系统重要文件&#xff…

dockerfite创建镜像---INMP+wordpress

目录 搭建dockerfile---lnmp 创建nginx镜像 运行 创建数据库镜像 运行 ​编辑 创建php镜像 运行 搭建dockerfile---lnmp 在192.168.10.201 服务IP地址nginx 172.111.0.10 dockernginxmysql172.111.0.20dockermysqlphp172.111.0.30dockerphp 创建nginx镜像 路径 vim /…

解锁知识的新大门:自建知识付费小程序的技术指南

在数字化时代,知识付费小程序的崛起为创作者和学习者提供了全新的学习和分享方式。本文将以“知识付费小程序源码”为关键词,从技术角度出发,为你展示如何搭建一个独具特色的知识付费平台。 步骤1:选择适用的知识付费小程序源码…

Android蓝牙协议栈fluoride(七) - 设备管理(bt stack)

前面几篇文章介绍了设备管理对上层的接口和bt profile层的实现,其中涉及到蓝牙开关(初始化)、设备扫描、服务发现、安全管理、功耗管理等等模块,本文将挑选几个模块介绍bt stack层的实现,其他模块(如安全管理)将在后续专门讲述。 使能蓝牙 …

【Java】构建表达式二叉树和表达式二叉树求值

问题背景 1. 实现一个简单的计算器。通过键盘输入一个包含圆括号、加减乘除等符号组成的算术表达式字符串,输出该算术表达式的值。要求: (1)系统至少能实现加、减、乘、除等运算; (2)利用二叉…

Windows更改远程桌面端口并添加防火墙入站规则

1.运行 快捷键winR组合键,win就是键盘上的windows系统图标键。 2.打开注册表 Regedit,在对话框中输入regedit命令,然后回车 3.打开注册表,输入命令后,会打开系统的注册表,左边是目录栏,右边是…

windows安装sqlserver2008后连接失败问题

刚安装好的sqlserver在安装服务器上,直接使用Windows身份认证登录就报错 未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server已配置为允许远程连接。(provider:命名管道提供程序,error:40 -无法打开到SQLS…

GroupMixFormer:基于Group-Mix注意力的视觉Transformer

文章目录 摘要1、简介2、相关工作2.1、视觉转换器2.2、全面的自注意力建模 3、组混合注意力和GroupMixFormer3.1. 动机:从个体到群体3.2. GMA: 混合组以获得更好的注意力3.3. 架构配置 4、实验4.1、实现细节4.2. 与最先进模型的比较4.3. 消融实验 5、结论 摘要 htt…

使用opencv的Sobel算子实现图像边缘检测

1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题,也是经典的技术难题之一。如何快速、精确地提取图像边缘信息,一直是国内外的研究热点,同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…