亲手打造自己的 Linux 桌面环境

2015-10-21 08:24


要是 KDE、Gnome 和 Xfce 都没法让你来劲,该怎么办?当然是亲手打造自己的桌面环境喽!

Linux 的最大好处是什么?安全性、稳定性、高性能,还是它带来的自由?它在所有这些方面都表现不赖,但是我们想着重强调的另一个特点是其模块性。作为一款深受 Unix 影响的操作系统,GNU/Linux 被设计成容易拆开来,又容易装回去——如果一切顺利的话。系统的各个主要组件都是用小组件起来的,这些小组件可以忽略或更换,这就是为什么我们会有如此多不同的 Linux 发行版的原因之一。

当然,这种模块性有时增添了复杂性。不过它也增添了可靠性,因为各组件被设计成可以独自运行;如果某个组件崩溃或遇到了某种软件错误,其余组件在理想情况下会继续正常运行。所以,你可以用另一个外壳来代替 Bash,或者改用一个替代的 SSL 库,或者甚至更换整个初始化系统――我们从主流发行版迁移到 Systemd 见到了这一幕。

但是桌面环境方面又如何呢?KDE、Gnome 和 Xfce 不都是大型的整体式项目吗?实则不然。它们是由彼此高度依赖的较小的程序和库组建起来的,但是可以去掉某些组件,或者把它们换成其他组件。如果更进一步,还可以完全从头开始构建一个桌面环境,你只要精心挑选几个特定的程序,把它们连接起来,然后确保它们可以同时运行。

从头开始构建一个桌面环境其实相当好玩,也是一次很好的学习过程,所以我们在下面就介绍这方面。你可以选择适合自身工作流程的组件,最终结果就是,比像 Gnome 和 KDE 这些“重量级”桌面环境轻盈得多、快速得多。另外,你在参加下一次 Linux 用户组会议时可以向朋友吹嘘,你才不用那些普通的预装的桌面环境,而是构建了自己的定制桌面,显摆一下你在 Linux 这条路上比别人走得更远。

下面是我们将要使用Openbox、PCManFM和Docky创建的定制桌面,但是可以把所有组件完成其他的东西!

一、桌面环境是什么?

启动你的常规桌面,看一下:上面可能有面板、通知区、窗口标题栏以及其他界面元素。这些都是桌面环境所提供的,但是如果我们更深入地探究一下,还会找到其他功能。桌面环境还处理实现应用程序之间切换和关闭应用程序等操作的键盘快捷方式,另外还处理桌面墙纸、小应用程序(比如处理器监视工具)和花哨的窗口效果。

现在,这些特性并不是由单单一个程序提供的,而是由一批程序提供的。比如在 Xfce 中,在终端中运行ps ax | grep xfce会显示名称中有 xfce 的所有进程,这样的进程有好多个。大多数名称显而易见,所以你可能明白,xfce4-panel 提供了位于屏幕边缘的面板,而 xfce4-power-manager 监视你的电池电量,处理电源事件(比如合上盖子)。

Gnome 和 KDE 的工作方式几乎如出一辙。你会忍不住想使用来自各种桌面的每个组件,然后组合起来,以此构建某种极其出色的混合桌面,但是最终结果实际上不是那么理想。如上所述,每个桌面环境下的程序旨在协同工作,具体来说是在那些桌面环境下工作,所以如果你使用来自 KDE 的面板、来自 Xfce 的电源管理器,以及来自 Gnome 的窗口管理器,最后得到的将是一种大杂烩式的桌面,耗用大量内存。毕竟,你要装载来自每个桌面环境的库及其他进程,所以这就好比同时在运行这三个桌面环境。

我们可不想这样。我们要做的是,选择小巧的、占用内存少的独立式组件,它们不依赖其他东西,但是可以顺利地协同运行。如往常一样,在自由软件领域有一大堆组件可供选择,所以不妨看一下主要的组件。

二、选择窗口管理器

尽管我们要使用单个的独立式程序来打造定制的桌面环境,但是 X Windows System(桌面的基本图形层)里面还是有一些标准,可以确保它们能够顺利地协同运行。首先,不妨看一看窗口管理器方面的几个选择。

1.名称:Openbox

网址: http://www.openbox.org 

Openbox 被设计成小巧、快速,大概是最出色的全面的独立式窗口管理器。完全可以单独使用它,但通常与其他工具结合使用。拿 LXDE 来说:这是一种使用 Openbox 来管理窗口的轻量级桌面环境,也是流行的 Lubuntu 发行版的桌面。Openbox 还是现已销声匿迹的 CrunchBang 发行版(但凭借 CrunchBang++ 迎来了新生)和 ArchBabg 的默认窗口管理器。

甚至可以在 Gnome 或 KDE 里面使用 Openbox,更换其原生窗口管理器。Openbox 出现在几乎各大发行版的软件库中,可以用“crunchbang”命令从脚本来启动(后文会有介绍)。

2.名称:i3

网址: http://i3wm.org 

Openbox 是一种传统的鼠标操作的窗口管理器,相比之下,i3 完全离不开键盘快捷方式。这让用户一开始有点难以掌握,因为你得花点时间阅读说明文档,才能适应它。不过一旦你记住了键盘快捷方式,就会爱不释手。i3 在想要经常使用键盘、而不是操作鼠标的编程人员当中特别受欢迎。

另外,i3 是一种平铺式窗口管理器。不像传统的窗口管理器:窗口散布于屏幕四周,一些窗口覆盖在另一些窗口上,在 i3 中,你可以将窗口组织整理成屏幕上不同大小的图块(区域)。所以在宽屏显示器上,你可以让火狐占用屏幕左边50%的区域,两个终端窗口占用右边的上下两部分。如果你有一块大屏幕,会发觉平铺式方法的效果确实很好。

3.名称:Awesome

网址: http://awesome.naquadah.org 

Awesome 是另一种设计时就想到键盘使用的轻量级窗口管理器。它还旨在与各种 X 标准兼容,可通过 Lua 脚本语言来进行扩展。其开发人员称之为“框架窗口管理器”――换句话说,你可以在此基础上,使用 Lua 定制及其他附件,定制一个功能更强大的窗口管理器。

4.名称:JWM

网址: http://www.joewing.net/projects/jwm/ 

JWM 是用普通 C 编写而成的,使用基本的 X 库,所以它的依赖项非常少,很容易编译。它旨在最大限度地利用内存有限的旧计算机,但是如果你就想挑战一下自己,它是个不错的选择。JWM 含有自己的简单面板,但是你可能想要更易配置、外观更漂亮的面板,稍后我们会探讨。

好了,以上就是市面上几个最出色的窗口管理器。不过还有更多的窗口管理器值得探究,如往常一样,Arch Linux 的维基是个很好的资源,值得一读。

三、面板、文件管理器和额外组件

一旦你选择好了窗口管理器,就需要为它添加一些额外组件来美化,比如漂亮的面板(用于启动和管理程序),以及文件管理器。如果你是个经验丰富的 Linux 用户,可能很高兴在终端上处理所有的文件工作,但是我们还是会介绍几个选择。

1.名称:Cairo-Dock

网址: http://glx-dock.org 

Cairo-Dock 提供的面板在外观上酷似 Mac OS X 的停靠栏――至少,在10.10(Yosemite)采用扁平化设计之前是这样。它的“3D平面”模式看起来很眩,光滑的图标驻留在玻璃托盘上;你将鼠标移到图标上后,它们的大小会稍稍变大。右击图标,就可以定制图标,或者选择总会出现的 Cairo-Dock 子菜单,该子菜单让你可以配置整个面板。默认情况下,Cairo-Dock 显示了最流行的 FOSS 程序(假设你已安装)的对应图标,比如火狐和雷鸟等程序。

如果你要在虚拟机中测试定制桌面,请注意:首次启动后,Cairo-Dock 会询问你是否想使用 OpenGL。这在物理硬件上很有用,让停靠栏的效果显得更流畅,但是在 VirtualBox 里面,它会带来问题,所以这种情况下最好还是让它处于被禁用的状态。

Cairo-Dock随带丰富的漂亮效果,非常酷似Mac OS X

2.名称:Docky

网址: http://wiki.go-docky.com 

Docky 非常类似 Cairo-Dock,不过它使用 Mono,因此增添了一点额外开销。但是它也非常完善和漂亮,能够获得上述类似 OS X 的 3D 外观。Docky 出现在各大发行版中;安装完毕后,只要在命令提示符下输入“docky”,就可以启动它。其默认配置相当简单;你只会看到用来配置 docky 的锚图标,以及运行中的程序图标。不过,可以将这些图标变成启动器,只需右击图标,选择将它们固定到停靠栏上。然后,即便程序没有运行,它们也依然在那里。

有了 Docky,还可以添加额外组件,比如天气小应用程序和电池监视工具――点击锚图标,即可调出配置框,然后选择 Docklets 标签即可显示列表。选择一个你喜欢的,然后点击加号(+)按钮,就可以将它添加到停靠栏的右边。

Docky

3.名称:PCManFM

网址: http://wiki.lxde.org/en/PCManFM 

文件管理器在 Linux 界多得可以抓一把随便挑;大多数提供了很少的功能。PCManFM 用于 LXDE 桌面中,它是名气最大的文件管理器之一:它比 Gnome 和 KDE 中所用的“重量级”文件管理器来得轻便,但是功能仍相当强劲,能够处理你需要的 99% 的任务。它在设计方面也不想试图过于标新立异,而是选择了一种熟悉的布局,谁都可以迅速上手。另外,它几乎无所不在,出现在各大发行版中。

4.名称:XFE

网址: http://roland65.free.fr/xfe/ 

这与 Xfce 没有半毛关系;它其实是一种非常轻巧的文件管理器,使用 FOX 图形化工具包。开发人员称之为“所有喜欢轻巧快速的 Unix 爱好者首选的文件管理器”;虽然与同样占用很少资源的其他程序相比,XFE 并不提供许多功能特性,可是它有一个好处:仍在不断开发之中。因而,它不难编译,也很容易在主流的 Linux 发行版中找到。

XFE是一款结实又小巧的文件管理器,外观并不特别出彩,但是很实用。

四、额外组件:合成器和背景......

可以使用主题,给我们刚才提到的一些窗口管理器(比如 Openbox)增添一点吸引力;但是如果你确实很想要大量的视觉效果,有必要添加一个合成管理器。这样一来,窗口出现时,就能够获得阴影和微妙动画之类的效果。最出色的一个合成管理器就是 Compton。它还非常易于使用:只要启动你的窗口管理器,然后启动 Compton,即可开始使用特效。

要考虑的另一个方面就是桌面墙纸。大多数轻量级窗口管理器并不直接提供添加桌面墙纸的方法,所以你需要找到另一个墙纸工具。这方面一个特别有用的工具就是 Feh,这个命令行驱动的图像查看器还能设置“根窗口”root window图像。没错,这是“根”在 Unix 用语中的另一种用法,另外的用法还有超级管理员用户和文件系统顶层。用 X 术语来说,根窗口实际上就是背景,所以如果你为其应用一个图像,就可以设置桌面墙纸。

五、把一切组件连接起来

好了,不妨开始做有意思的部分!我们现在要把这一堆组件变成一个完全实用的桌面环境。在这里,我们将使用 Openbox 作为窗口管理器、Docky 作为面板、PCManFM 作为文件管理器,然后添加 Compton 和 Feh,让桌面环境看起来可爱、漂亮。

由于这些都是独立的程序,我们需要创建一个脚本,让它们都按正确的顺序来运行。以根用户身份,在 /usr/local/bin/mydesk下创建一个文件,比如:

sudo nano -w /usr/local/bin/mydesk

输入下列内容,使用Ctrl+O组合键保存,然后按Ctrl+X组合键,退出Nano编辑工具。

#!/bin/sh  
docky &  
pcmanfm &  
feh --bg-fill /home/user/desktop.jpg  
compton -c --shadow-exclude 'n:e:Docky' &  
openbox 

你还需要让这个文件成为可执行文件,为此使用sudo chmod +x /usr/local/bin/mydesk。该脚本启动一堆程序,先从 Docky 和 PCManFM 开始。这些程序后面的“&”符号表明,我们想要在后台运行这些程序,而不是让脚本等待每个程序关闭。就 Feh 而言,你需要更改桌面图像的位置的参数,指向你主目录下的某个图片。请注意,Compton 这一行排除了在 Docky 窗口上绘制阴影(因为 Docky 窗口已经有自己的特效)。

现在,在平常的 Linux 桌面会话中,我们根本无法运行这个脚本,只能指望一切都可以正常,因为我们已经在运行着窗口管理器、面板及其他组件。相反,我们需要告诉登录管理器(输入用户名和密码的那个屏幕):我们的脚本启动其自己的桌面环境,我们称之为 MyDesk。以根用户身份,创建含有下列内容的文本文件 /usr/share/xsessions/mydesk.desktop

[Desktop Entry]  
Name=MyDesk  
Comment=Custom desktop  
Exec=/usr/local/bin/mydesk  
TryExec=/usr/local/bin/mydesk  
Type=XSession 

一旦你为会话创建好了启动脚本和 .desktop 文件,它就会出现在登录管理器中。

六、是时候测试一下了

现在退出当前桌面,再登录屏幕,选择 MyDesk 作为你的会话。输入你的用户名和密码,哇!你的定制桌面环境就会出现!看一下文章开始的屏幕截图:在这里,我们点击了左下方的锚图标,选择了选项中的“面板模式”(让它占用屏幕的整个宽度),然后应用了 Matte 主题。我们还在右边添加了一个工作空间切换器 Docklet。

请注意:Dock y并不包括一个传统的“开始”程序菜单;相反,可以在桌面上右击鼠标,选择“终端”,打开命令行窗口。输入你想添加到面板中的某个程序(比如“firefox”或“libreoffice”),该程序启动后,相应图标就会出现在面板上。右击图标,选择“固定”,那样即使该程序没有运行,启动器也依然在那里。想要退出定制桌面,只要在桌面上任何地方右击鼠标,选择“退出”。(想对 Openbox 窗口管理器实行精细控制,有必要安装 Obconf,然后从右击桌面菜单中选择它。)

而这仅仅是个开始!这只是你能创建的桌面的一个例子。你可以试着在 /usr/local/bin/mydesk脚本中运行 cairo-dock &,而不是docky &,尝试另一种停靠栏,或者更换窗口管理器。有一点很重要:窗口管理器是脚本中的最后一行,并不以“&”符号结束,这样当你退出窗口管理器时,它同时退出了整个会话,让你回到登录屏幕。

好好试一试窗口管理器、面板、文件管理器及其他工具的不同组合;如果你打造了特别出色的桌面环境,欢迎留言交流。说不定哪一天某个 Ubuntu 分支就基于你定制的桌面,也许呢。