台甫鼎鼎的 X Window 大家必定不陌生。都知道它是 Unix/Linux 下面的窗口系统,也都知道它基于 Server/Clinet 架构。在网上随便搜一搜,也可以找到不少 X Window 的介绍。有不少文章为了给用户留一个直不雅观的印象,往往先让系统进入纯文本界面,然后使用 startx 来启动图形界面,或者直接使用 X 来启动 X Server,,再然后运行一个 xterm 来做示范。我感受以上这些文章对 X Window 的理解有限,不够深入,而且也不够新。所以,我这里写一篇《X Window 的奥密》,以最新的 Ubuntu-14.04 Desktop 为例,展示如何学习 X Window。
先说一点题外话。在上一篇《打造属于本身的Vim》发表后,评论中有人让共享一下配置文件。其时我说:配置文件又不长,本身照着图片敲一下代码嘛。功效这个“照着图片敲代码”的工作我今天本身干了一遍,好在没花几多时间,几分钟而已。原因是因为我今天折腾 X Window 的时候,把系统给挂失了,然后重装系统,然后,就只好再设置一遍 Vim 了。
了解本身机器上的 X Window X Window 其实是一种规范,它有很多差此外实现,在 Linux 系统下最风行的是实现 Xorg 和 XFree86,微软 Windows 系统下也有 X Window 的实现,苹果的Mac 也是 X Window 的一种。要了解本身机器上运行的 X Window 究竟是哪一个,可以使用检察进程的ps命令,如下图:
从上图可以看出,Ubuntu 14.04 使用的 X Window 是 Xorg。如果使用 ps -ef 命令,还可以看到 Xorg 运行时的命令行参数。
想了解 X Window,下面这些文档需要看一遍先:
下面来说一下也许是众所周知的根本常识:X Window 是一个分层的架构,它分为 Serve 和 Client。X Server 卖力图形界面的显示,(也卖力用户的输入),而Client 措施需要连接到 X Server,然后请求 X Server 绘制图形界面,同时从 X Server 接受用户的输入。在桌面系统上,X Server 和 Client 措施往往安置在同一台机器上,日常使用根基觉得不到它是分层的。但是很显然,X Server 和 Client 也可以分袂运行在差此外机器上,在一台机器上运行措施,而在此外一台机器上显示图形界面。
X Window 中的 Server 和 Client 的观点和我们平时接触到的“Server/Client”观点恰好相反。很多熟悉 Internet 道理的人,第一次接触 X Window 的这两个观点城市搞错。好比,我在一台本地机器上运行 Ubuntu 14.04 桌面版,而在此外一台长途机器上运行 CentOS 5.10(纯字符界面),当我用 ssh 从 Ubuntu 连接到 CentOS 的时候,Ubuntu 是 Client,而 CentOS 是 Server。在 X Window 中,Server 偏偏是我面前的这台 Ubuntu,X Server 运行在 Ubuntu 上。我可以在 CentOS 中运行 GVim,但是窗口显示在 Ubuntu 中,这时,GVim 是一个 Client 措施,它在长途机器上运行,而它的窗口显示在本地。
理解 display 和虚拟控制台前面提到网上很多介绍 X Window 的文章都是先让系统进入字符界面,然背工动启动一个 X Server。其实这完全没有须要,因为在同一台机器上完全可以运行多个 X Server,只需要让每个 X Server 的 display 差别即可。那么 display 究竟是什么?
在 X Window 中,可以通过 hostname:display_number.screen_number 来指定一个屏幕。可以这样理解:一台计算机可以有多个 display,一个 display 可以有多个屏幕。所以,display 相当于是计算机配备的一套输入输出设备,一般情况下,一台电脑只配一套键盘鼠标和一个显示器,特殊情况下,可以配多个显示器。
此刻问题出来了,我的电脑只有一套键盘鼠标和一个显示器,也就是只有一个 display,那又怎么能运行多个 X Server 呢?那是因为在 Linux 中,还有虚拟控制台这样的高级特性。只需要同时按下 Ctrl+Alt+F1、Ctrl+Alt+F2、...、Ctrl+Alt+F7,就可以在差此外虚拟控制台中进行切换。在 Ubuntu 14.04 中,虚拟控制台 1 到 6 运行的getty,也就是字符界面,虚拟控制台 7 运行的是 Xorg。(Fedora 中不一样,虚拟控制台 1 运行的是图形界面,其它的是字符界面。)
我们可以直接运行 X Server 措施来启动 X Server。/usr/bin/X 和 Xorg 都是 X Server 措施。其实 /usr/bin/X 是 Xorg 的标记链接,用哪一个都是一样的。
启动 X Server 的时候可以指定 display 参数,因为可以省略失 hostname 和 screen_number,所以可以用 :0,:1 这样的格局来指定 display。在我的机器上,原来就有一个 X Server 在运行,display :0 已经被占用了,所以我使用 sudo X :1 -retro 来在 display :1 上再运行一个 X Server,如下图: