以Funtoo为基础的Linux桌面系统(3)

「見上げた坂の上にたなびく一筋の雲を見て、手が届くと信じてひたすら登っていく」
                                 司馬遼太郎

我向一位朋友介绍了Funtoo Linux。但是当他开始尝试Funtoo的时候,回给我的消息却充满了受挫感。很多用户,会在X系统安装配置这个地方卡壳。一个黑乎乎的屏幕让跟随GUI的发展一起长大的用户有点束手无策。当你面临如此“窘境”的时候,你会提出一大堆问题。比如,究竟如何通过命令行访问互联网。毕竟有了互联网,你就会可以google一切了。答案就是,

USE='-X' emerge elinks

elinks是一款非常优秀的浏览器,使用它来访问文档类型的网站甚至比GUI基础的浏览器有更好的体验。当你的X还不能启动的时候,可使用它来帮助你配置图形系统。Linux启动之后会提供给用户7个tty终端,用户可以使用Ctrl + Alt + 数字1-7在它们之间切换。你可以在tty1打开elinks查找资料,而同时在tty2使用bash操作计算机。

是否能够成功的安装X系统这个命题几乎是考察Linux操作系统管理能力的一道很好的考题。首先,这个过程迫使你必须弄清楚从应该程序(窗口管理模拟终端)到中间服务(驱动程序和图形库)再到系统内核之间的交互到底是如何进行的。第二,在没有图形界面的情况下使用编辑器(nano或者vim)来编辑X系统配置文件也是一个考验。第三,如何检查安装的正确与否同样是一道关卡,而这一关会为用户打开另一扇门——就是得到一个难得机会来一窥桌面系统基础组件的构成。

Funtoo网站的Wiki中提到安装X系统的起点是编辑/etc/make.confVIDEO_CARDS变量。图形用户配置的复杂性正是由于同Windows一起制造封闭软件的那些硬件厂商和软件厂商送给Linux用户的“礼物”。Funtoo沿用了Gentoo的方法用VIDEO_CARDS变量来区别不同的显卡,收下这份大礼。这样,在编译与图形,视频还包括一些声音软件的时候emerge系统才能正确的配置或者优化编译结果。比如,在编译xorg-drivers这个软件包的时候,系统会提示它使用了哪个VIDEO_CARDS变量。同样,INPUT_DEVICES也是为了相似的目的,用以区分不同的输入设备。这是一个关于这两个变量的例子。

/* file: /etc/make.conf */
...
INPUT_DEVICES="evdev keyboard mouse"
VIDEO_CARDS="nvidia"
...

需要注意的是,在使用VMWare等虚拟机安装Funtoo的时候,VIDEO_CARDS变量不一定就是你的硬件上的显卡芯片品牌。如何确定你使用的究竟是哪一款VIDEO_CARDS

$ emerge sys-apps/pciutils
$ /usr/sbin/lspci | grep -i "vga"
01:00.0 VGA compatible controller: NVIDIA Corporation GF108 [Quadro 600] (rev a1)

特别要提出注意的是,Funtoo系统提供两个截然不同的驱动程序——一个是开源驱动,另一个是Nvidia官方驱动——给Nvidia显卡用户选择,所以在安装nvidia-drivers这个包的时候必须注意避开开源驱动和NVIDA官方驱动的冲突。如果你使用的是sys-kernel/sysrescue-std-sources,并且使用了USE="binary"来编译这份内核代码,那么你得到的内核模块中就已经包含开源驱动了。如果需要安装官方驱动,那么必须屏蔽掉开源驱动,以避免冲突。其方法就是在modprobe的配置程序中将nouveau模块加入黑名单。这样,系统在启动的时候就不会加载开源驱动了。

blacklist nouveau

NVIDIA为了保护自己的知识产权,它们采用了一种相当特别的驱动程序结构来避开GPL协议的限制。NVIDA官方驱动实际上有两大部分组成,一部分在内核之中以内核模块的形式存在(nvidia)提供操作显卡的接口,而另一部分在用户空间提供了怎样操作显卡的策略。驱动程序包nvidia-drivers包含了这两个部分。

emerge nvidia-drivers

这份驱动提供安装结束后,你会得到信的openGL和openCL接口。虽然安装程序会自动帮你切换到使用这些新的接口,但是确认一下这两个接口也是很有趣的。

$ eselect opengl list
Available OpenGL implementations:
  [1]   nvidia *
  [2]   xorg-x11
$ eselect opencl list
Available OpenCL implementations:
  [1]   nvidia *

虽然,利用emerge可以得到版本非常新的nvidia驱动。但是官方建议目前最新版本是295.20。所以,你可以在/etc/portage/package.mask之中加入mask来限制更快更新的升级以保持系统的稳定性。

$ su -c 'echo ">media-video/nvidia-settings-295.20" >> /etc/portage/package.mask'

因为显卡又是系统图形和视频处理的关键部件,为了然其他软件更好得通过应用程序于显卡打交道,你还需要在/etc/make.conf文件中把其他一些编译选项设置成有效。比如,对于nvidia显卡,在/etc/make.conf之中加入vdpau选项可以将视频解码时的CPU workload降低40%左右(依据编码的情况有变化)。可以通过这个命令查找到每个USE变量的具体内容。

grep -R vdpau /usr/portage/profiles/use.*

参考文档:

发表评论