亲手打造自己的Linux桌面环境
当然,这种模块性有时增添了复杂性。不过它也增添了可靠性,因为各组件被设计成可以独自运行;如果某个组件崩溃或遇到了某种软件错误,其余组件在理想情况下会继续正常运行。所以,你可以用另一个外壳来代替Bash,或者改用一个替代的SSL库,或者甚至更换整个init系统DD我们从主要的发行版迁移到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来管理窗口的轻量级桌面环境,也是流行的ubuntu发行版的桌面。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脚本语言来进行扩展。其开发人员称之为“框架窗口管理器”DD换句话说,你可以在此基础上,使用Lua定制及其他附件,定制一个功能更强大的窗口管理器。
4.名称:JWM
网址:http://www.joewing.net/projects/jwm/
JWM是用普通C编写而成的,使用基本的X库,所以它的依赖项非常少,很容易编译。它旨在最大限度地利用内存有限的旧计算机,但是如果你就想挑战一下自己,它是个不错的选择。JWM含有自己的简单面板,但是你可能想要更易配置、外观更漂亮的面板,稍后我们会探讨。
好了,以上就是市面上几个最出色的窗口管理器。不过还有更多的窗口管理器值得探究,如往常一样,Arch Linux维基(https://wiki.archlinux.org/index.php/Window_manager)是个很好的资源,值得一读。
三、面板、文件管理器和额外组件
一旦你选择好了窗口管理器,就需要为它添加一些额外组件来美化,比如漂亮的面板(用于启动和管理程序),以及文件管理器。如果你是个经验丰富的Linux用户,可能很高兴在终端上处理所有的文件工作,但是我们还是会介绍几个选择。
1.名称:Cairo-Dock
网址:http://glx-dock.org
Cairo-Dock提供的面板在外观上酷似Mac OS X的停靠栏DD至少,在10.10(Yosemite)采用扁平化设计之前是这样。它的“3D平面”模式看起来很眩,光滑的图标驻留在玻璃托盘上;你将鼠标移到图标上后,它们的大小会稍稍变大。右击图标,就可以定制图标,或者选择一直存在的Cairo-Dock子菜单,该子菜单让你可以配置整个面板。默认情况下,Cairo-Dock显示了最流行的FOSS程序(假设你已安装)的对应图标,比如火狐和Thunderbird等程序。
如果你要在虚拟机中测试定制桌面,请注意:首次启动后,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,还可以添加额外组件,比如天气小应用程序和电池监视工具DD点击锚图标,即可调出配置方框,然后选择Docklets标签即可显示列表。选择一个你喜欢的,然后点击加号(+)按钮,就可以将它添加到停靠栏的右边。
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(https://github.com/chjj/compton)。它还非常易于使用:只要启动你的窗口管理器,然后启动Compton,即可开始使用特效。
要考虑的另一个方面就是桌面墙纸。大多数轻量级窗口管理器并不直接提供添加桌面墙纸的方法,所以你需要找到另一个墙纸工具。这方面一个特别有用的工具就是Feh(http://feh.finalrewind.org),这个命令行驱动的图像查看器还能设置“根窗口”(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。
请注意:Docky并不包括一个传统的“开始”程序菜单;相反,可以在桌面上右击鼠标,选择“终端”,打开命令行窗口。输入你想添加到面板中的某个程序(比如“firefox”或“libreoffice”),该程序启动后,相应图标就会出现在面板上。右击图标,选择“固定”,那样即使该程序没有运行,启动器也依然在那里。想要退出定制桌面,只要在桌面上任何地方右击鼠标,选择“退出”。(想对Openbox窗口管理器实行精细控制,有必要安装Obconf,然后从右击桌面菜单中选择它。)
而这仅仅是个开始!这只是你能创建的桌面的一个例子。你可以试着在/usr/local/bin/mydesk脚本中运行cairo-dock &,而不是docky &,尝试另一种停靠栏,或者更换窗口管理器。这点很重要:窗口管理器是脚本中的最后一行,并不以“&”符号结束,那样你退出窗口管理器时,它同时退出了整个会话,让你回到登录屏幕。