百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

「洛谷日报第72期」X Window系统简明介绍

bigegpt 2024-08-09 11:12 2 浏览

你能在本文学到什么

首先声明一下,这是一篇蒟蒻中的蒟蒻——我一时灵感来临写的QwQ。如果你有什么不懂的问题以及本文的错误可以在下方评论,或私信我,不保证什么都懂,更多请参阅Google。

本文主旨在于学习关于X的理论知识以及其启动过程,帮助各位在Linux GUI开发中打下基础。本文属于知识框架型,部分内容非特别细致,还需劳烦各位感兴趣的使用搜索引擎。望各位喜欢!

注意:本文大部分命令需要root权限,请用sudo或在root下执行!

X是什么

X Window系统(X Window System,也常称为X11或X)是一种以位图方式显示的软体视窗系统。最初是1984年麻省理工学院的研究,之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软体工具套件及显示架构的运作协定。X Window系统透过软体工具及架构协定来建立作业系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他作业系统上。现在几乎所有的作业系统都能支援与使用X。更重要的是,今日知名的桌面环境——GNOME和KDE也都是以X Window系统为基础建构成的。

由于X只是工具套件及架构规范,本身并无实际参与运作的实体,所以必须有人依据此标准进行开发撰写。如此才有真正可用、可执行的实体,始可称为实现体。目前依据X的规范架构所开发撰写成的实现体中,以X.Org最为普遍且最受欢迎。X.Org所用的协定版本,X11,是在1987年9月所发布。而今最新的参考实作(参考性、示范性的实作体)版本则是X11 Release 7.7(简称:X11R7.7),而此专案由X.Org基金会所领导,且是以MIT授权和相似的授权许可的自由软体。 ——引自维基百科

总而言之,如果你在使用*nix系统的桌面环境,那么你就与X Window系统的关系十分密切,包括Linux。你所使用的桌面环境和带有GUI的应用程序的绝大部分都依靠着X Window系统。

注意:不包括直接调用硬件的游戏或软件!

X在经过MIT(麻省理工学院)及各厂商大学等的无数版本迭代后,1987年,X的版本来到了X11,这是一个具有明显进步的版本,并取得了明显成功,几乎后来所有的分支都是基于X11开发的。时至今日,X开发的主导者有MIT、MIT X协会、X协会公司、X.Org、XFree86项目、X.Org基金会等等(依照时间排序),期间有许多授权纠纷等各种各样的问题。为了避免太长不看,此部分感兴趣的可以查看参照中维基百科的条目。

主要部分

X的结构

X采用C/S架构(Client/Server,主从式架构),分为X服务器(X Server)和X客户端(X Client)。与我们的常识稍有不同,X服务器是属于控制方面的,控制显示器、鼠标、键盘等甚至显卡都属于X服务器的职责,显示的内容与X窗口管理器(X Window Manager)却属于X客户端。所以应服务器运行X客户端程序,客户机运行X服务器,正好相反。

X客户端可以通过网络明文与X服务器联系,于是你甚至可以在Windows机器运行X 服务器与Linux机器,我就可以说我的Windows正在运行Linux程序啦(然而是事实可以的)!你只需在准备打开X客户端的终端输入export DISPLAY=[X服务器地址]:[显示界面号]即可。

(本图来自鸟哥的私房菜)

为什么我要强调明文呢?明文代表着隔壁老王能很轻松并很清楚地知道你与远程服务器的PY交易在干什么,甚至银行密码等需要键盘输入的东西都能被截获!还可以发起中间人攻击!于是现在你可以通过ssh、telnet(这玩意也是明文)等远程终端进行转发,得到不被老王监控的环境。

X服务器

X服务器作为X的重要部分,掌管着显示图形界面、接受用户输入、字体渲染的重任,Xorg是一种常见的X服务器。简而言之,其流程如下:

输入:

  • 接受来自用户的信号(鼠标、键盘、触摸屏等);

  • 通过网络明文传送给X客户端;

  • 需要时传送给中转单位(ssh等应付加密需求)。

输出:

  • 需要时从中转单位获得信息;

  • 通过网络明文接收X客户端数据;

  • 显示X客户端的内容。

很容易就能发现流程基本上是相反的,所以其实X服务器和X客户端是双向、相互依存、不可分割的。

X服务器的硬件决定了图形的渲染,例如:X服务器的显卡没有3D图形加速,那么X客户端就无法使用这项技术了。但是,许多高性能应用及显卡驱动决定直接控制本机显卡,此时X服务端就不会受到这些信息了!

X客户端

X客户端也是X的重要组成部分,每一个需要在X服务器显示的程序都可以称之为X客户端(有时甚至会有许多个!)。

其流程与X服务端相反,不必多说,以免有人说我水文章。X客户端有一个特性,他们之间其实是相互隔离、不知道其它X客户端的存在的!好处就是不需要管X服务器的硬件如何、不需要管其它X客户端在干什么,只用管好自己的事就可以了。缺点也很明显,X客户端就不知道有没有其它东西覆盖在自己上面,十分被动,更不要讲什么根据手机壳颜色改变用户主题了(然而可以让X服务器告诉你)。

怎么处理这种问题呢,并且窗口全部叠在一起怎么用啊,那么就有了下面这个东西——X窗口管理器(X Window Manager)。

X窗口管理器

X窗口管理器是现代X的控制管理者——但它其实是一种特殊的X客户端!我们常见的X窗口管理器有:GNOME、KDE、KFCE、Unity、twm等。X不需要X窗口管理器也能正常运作。X窗口管理器提供以下功能:

  • 提供各种奇奇怪怪的主题样式给X服务器;

  • 管理虚拟桌面(Virtual Desktop);

  • 提供窗口管理工具,还有类似Dock、任务栏之类的东西;

  • 提供X客户端的各种参数,窗口大小等等的数据;

借助X窗口管理器,能够提供Linux很多桌面电脑的功能,让Linux也能成为生产力工具。PS:桌面不一定是由X窗口管理器提供的。

(twm窗口管理器,来自鸟哥的Linux私房菜)

X显示管理器

X显示管理器(XDM, X Display Manager)提供显示的第一界面,也就是登录用户的地方。往往有两种方式能在本地计算机启动X——在tty里输入startx或开机后我们看到的登录界面,这就是X显示管理器的作用。常见的有GNOME内置的gdm等。

X终端

X终端(XTerm)就是在X界面中虚拟终端(Virtual Terminal)的一种实现。这一点没什么好说的,就是我们打开的“终端”。

X的启动

下文将会教授X的启动方式和原理,及其相关基础知识。

TTY是什么

TTY原指电传打字机(Teletype),在这里指虚拟控制台,也就是不启动X时的只有文本的界面。Debian系发行版默认开启tty1~tty6六个TTY,你可以使用Ctrl+Alt+F1~F6进行切换。(各发行版会有不同,根据实际操作)

运行级别

Linux拥有7个运行级别(runlevel):

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

  • 运行级别2:多用户状态(没有NFS)

  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式

  • 运行级别4:系统未使用,保留

  • 运行级别5:X11控制台,登陆后进入图形GUI模式

  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

我们启动X便就是从运行级别3启动X服务器,转至运行级别5。

启动X需要在运行级别3(默认),切换运行级别:init [运行级别],查看运行级别:runlevel

DISPLAY

我们在桌面环境运行shell,输入set查看当前变量,可以发现有一个是DISPLAY=:0.0的变量,这决定了当前环境下X客户端在哪个X服务器上显示——这对于想要远程控制的朋友是很重要的(但是本文暂时不讲)。格式是DISPLAY=[主机名]:[显示界面号].[屏幕号]。主机名不需要多讲,可以为IP地址,为空代表本地主机;显示界面号是每个X服务器对应的号码,从0数起;屏幕号正如其名,多数情况不用管,常为0。

PS:在原用户使用xhost +可允许其它用户将X客户端连接原用户的X服务器。

startx与xinit

startx、xinit和X(本体)均是启动X的方式,理论上startx是xinit的壳子,而xinit又是X的壳子。startx能自动帮你读取配置文件的参数。这些参数决定了X服务器的呈现方式、DPI、显示界面号等,决定了需要启动的X客户端(包括桌面环境)。以下是命令参数:

startx[X客户端参数]--[X服务端参数]
xinit[X客户端参数]--[X服务端参数]

是的,这两个命令的参数是一致的,参数各有优先级,如下(顺序排列):

X服务器:

  • 命令后接的参数;

  • ~/.xserverrc;

  • /etc/X11/xinit/xserverrc;

无参数则直接执行X。

(只启动X的样式,来自鸟哥的Linux私房菜)

X客户端:

  • 命令后接的参数;

  • ~/.xinitrc;

  • /etc/X11/xinit/xinitrc;

无参数则直接执行xterm。

(加上xterm的样式,来自鸟哥的Linux私房菜)

至此,你可以自己尝试从tty启动X了,甚至可以体验自己手动启动X。因篇幅限制,相关参数及更详细的技术细节请查询网络,或自行分析。

显示界面号、tty号和监听端口

假设你是Debian系用户,即默认打开了tty1~tty6,那么就有

n可以为任意正整数,我也不知道能多大,可在上篇[X服务器参数]中使用-display :n调整显示界面号;端口等于6000+n;tty则是已有的往后推。

你学到了什么

感谢各位看完了本蒟蒻的文章,有意见与建议或是问题的请联系我,我将会解决掉提出的人。你应该能学习到:

  • X是什么,X Window系统分为什么

  • X服务器和客户端扮演着怎样的角色

  • X使用明文or密文传输

  • 如何防止隔壁老王偷窥

  • 学会如何从tty启动X

  • 学会显示界面号和监听端口的关系

  • 还有更多

参照

  • [X窗口系统-维基百科(https://zh.wikipedia.org/wiki/X_Window%E7%B3%BB%E7%B5%B1)

  • 鸟哥的Linux私房菜 第二十三章、X Window 设置介绍(http://linux.vbird.org/linux_basic/0590xwindow.php

版权声明

本作品以

知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可

http://creativecommons.org/licenses/by-nc-sa/4.0/


本文发布于洛谷日报,特约作者:尘息

原文地址:https://www.luogu.org/blog/chenxijun/x-window-system

相关推荐

10w qps缓存数据库——Redis(redis缓存调优)

一、Redis数据库介绍:Redis:非关系型缓存数据库nosql:非关系型数据库没有表,没有表与表之间的关系,更不存在外键存储数据的形式为key:values的形式c语言写的服务(监听端口),用来存...

Redis系列专题4--Redis配置参数详解

本文基于windowsX64,3.2.100版本讲解,不同版本默认配置参数不同在Redis中,Redis的根目录中有一个配置文件(redis.conf,windows下为redis.windows....

开源一夏 | 23 张图,4500 字从入门到精通解释 Redis

redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。...

redis的简单与集群搭建(redis建立集群)

Redis是什么?是开源免费用c语言编写的单线程高性能的(key-value形式)内存数据库,基于内存运行并支持持久化的nosql数据库作用主要用来做缓存,单不仅仅是做缓存,比如:redis的计数器生...

推荐几个好用Redis图形化客户端工具

RedisPlushttps://gitee.com/MaxBill/RedisPlusRedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows、Linux...

关于Redis在windows上运行及fork函数问题

Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成。微软的一些工程师花费时间在解决在...

你必须懂的Redis十大应用场景(redis常见应用场景)

Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。...

极简Redis配置(redis的配置)

一、概述Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf,linux下的是redis.conf)你可以通过C...

什么是redis,怎么启动及如何压测

从今天起咱们一起来学习一下关于“redis监控与调优”的内容。一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。...

一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI

介绍P3XRedisUI这是一个非常实用的RedisGUI,提供响应式WebUI访问或作为桌面应用程序使用,桌面端是跨平台的,而且完美支持中文界面。Githubhttps://github....

windows系统的服务器快速部署java项目环境地址

1、mysql:https://dev.mysql.com/downloads/mysql/(msi安装包)2、redis:https://github.com/tporadowski/redis/r...

window11 下 redis 下载与安装(windows安装redis客户端)

#热爱编程是一种怎样的体验#window11下redis下载与安装1)各个版本redis下载(windows)https://github.com/MicrosoftArchive/r...

一款轻量级的Redis客户端工具,贼好用!

使用命令行来操作Redis是一件非常麻烦的事情,我们一般会选用客户端工具来操作Redis。今天给大家分享一款好用的Redis客户端工具TinyRDM,它的界面清新又优雅,希望对大家有所帮助!简介Ti...

一个.NET开发且功能强大的Windows远程控制系统

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍SiMayRemoteMonitorOS是一个基于Windows的远程控制系统,完...

Redis客户端工具详解(4款主流工具)

大家好,我是mikechen。Redis是大型架构的基石,也是大厂最爱考察内容,今天就给大家重点详解4款Redis工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集...