Linux桌面概述
概述
跟Linux的其他部分(如存储和网络)不同,桌面结构没有太多层级。桌面的每个组件都只对应特定的任务,只在必要时才与其他组件沟通。有些组件会共享通用的库(特别是图形工具库)
Linux开发者往往有不同喜好,这使得开发出来的产品有很多花样。为了能协同工作,各种应用就需要有一些共性,而在几乎所有的Linux桌面组件中,这种共性就是X服务器(即X Window系统服务器)。你可以把它想象为桌面的“内核”,管理着窗口功能和显示配置,并处理来自键盘和鼠标等设备的输入。
X Window系统
一、网址
http://www.x.org/
二、功能
因为GNOME和KDE等桌面环境的出现,X发行版的角色也一直在变换。现在它的关注点主要在核心服务器(即管理渲染和输入设备的部分)和简化的客户端库。
三、介绍
X服务器的运行不难识别。它就叫X

四、显示管理器
一般你是不会从命令行启动X服务器的,因为这么做不会启动任何客户端来连接到这个服务器,结果只会得到一个空白的屏幕。
通常的做法是用显示管理器来启动X服务器,它会在屏幕上放置一个登录框。当你登录之后,显示管理器就会启动一系列的客户端诸如窗口管理器和文件管理器,以便你使用机器。
显示管理器有很多种,例如gdm(用于GNOME)和kdm(用于KDE)。

想从虚拟控制台而非显示管理器开启X会话,你可以运行startx或xinit命令。然而,这样获取的会话相当简单,与显示管理器的会话完全不同,因为它们的机制以及启动文件都不同。
五、探索X客户端
虽然一般人不会从命令行的角度来思考GUI的运作,但还是有一些工具这么做。借助它们,你可以监控客户端的运行。


X事件
X客户端通过事件系统获取输入和服务器状态等信息。X事件的工作方式类似于其他异步进程间通信(如udev事件和D-Bus事件)



D-Bus
一、简介
D-Bus(即桌面总线)是Linux桌面系统的最重要的产物之一,它是一个消息传递系统。D-Bus之所以重要,是因为它作为一种进程间通信的机制,使得各种桌面应用能够相互沟通。同时,大多数的Linux系统都是用它来把系统事件(例如插入USB设备)通知给进程的。
二、功能
D-Bus在Linux中正变得越来越重要,而且它的用途不只在桌面。systemd和Upstart也使用它来通信。然而,在核心系统中加入对桌面工具的依赖,这有违Linux的设计宗旨。
为了解决这个问题,我们将dbus-daemon实例(进程)分为两种。一种叫系统实例,它在开机时由init启动,并带上--system选项。这种实例通常作为D-Bus用户来运行,它的配置文件是/etc/dbus-1/system.conf(一般你不应该修改这个文件)。进程可以通过/var/run/dbus/system_bus_socket的Unix域套接字连接到该实例。另一种叫会话实例。与系统实例不同的是,会话实例只在你打开桌面会话时才会运行。你运行的桌面应用会连接这种实例。
三、监视D-Bus消息

打印
一、步骤
1.打印程序通常会先将文档转成PostScript格式。不过也可以不这么做。
2.程序将文档发给打印服务器。
3.打印服务器收到文档后,将其放到打印队列中。
4.当轮到该文件时,打印服务器会将其发送到打印过滤器。
5.如果发现该文档不是PostScript格式,打印过滤器可以对其进行转换。
6.如果目标打印机不能识别PostScript,打印机驱动会将该文档转换成打印机能识别的格式。
7.打印机驱动可在文档上加一些额外的指令,例如纸匣和复件数。
8.最后打印服务器将文档发给打印机。
这里面最让人困扰的,就是要在PostScript上绕来绕去。其实,PostScript是一种编程语言,所以如果你用它来打印文件,那么你实际上就是将一段程序发给了打印机。PostScript是类Unix系统中的打印标准,就像.tar是打包标准一样。(现在有些应用用到的PDF格式,也是能转成PostScript的。)
二、CPUS
1.介绍
http://www.cups.org/
CUPS是Linux和Mac OS X的标准打印系统。它的服务器守护进程是cupsd,你可以用lpr命令作为客户端来发送文件给这个守护进程。
CUPS有个突出的功能是实现了互联网打印协议(Internet Print Protocol,以下简称IPP),使得它允许客户端与服务器端通过TCP端口631进行类HTTP的事务处理。事实上,如果你系统上运行着CUPS,你就可以连接http://localhost:631/去看看你的打印配置和打印任务。大多数的网络打印机和打印服务器都支持IPP,就连Windows也是。IPP简化了建立远程打印机的任务。

三、格式转换与打印过滤器
很多打印机,包括几乎所有低端型号的,都无法识别PostScript或PDF。为使Linux支持这些打印机,我们必须将文档转换成它们能识别的格式。CUPS把文档送给RIP(即光栅图像处理器)以生成位图。而RIP几乎总是使用Ghostscript(gs)程序来实现这个过程。但是,要让生成的位图能适应打印机的格式,还是有点麻烦的。所以,CUPS使用的打印机驱动会参考特定打印机的PostScript打印机定义(PostScript PrinterDefinition,以下简称PPD)文件,以解决分辨率和纸张大小之类的问题。
如果有建议和看法,可以在文末留言,谢谢。
