索尼的 PlayStation 3(PS3)能运行 Linux®,但是要运行良好,还需要做些调整。在本 系列 的第三篇文章中,Peter Seebach 介绍了如何为 X11 瘦身,使之能适合更小的内存预算。
在 第 1 和第 2 部分 中,您看到了如何使用 runlevel 系统和相关工具显著减少运行 Linux 的 PS3 的内存使用量,以留出更多的内存用于编译和类似的服务。最后,我们再看一些值得去做的事情,至少包括一项相当重要的任务:减少 X11 的内存占用(footprint)。
X11 的问题是,您可能太需要它了。之所以说这是一个问题,是因为我观察到 X 服务器本身在我的 PS3 上的最低内存占用也达到 40MB 左右,其中有太多的内存牺牲在漂亮的图片上。(是的,我的确学过在纯文本终端上使用 UNIX®。为什么要那么奇怪地看着我呢?)尽管如此,有时候它确实非常有用,有些程序离开了图形就不能运行。
在另一台机器上运行 X11
您需要 X11,但是 PS3 又没有足够的内存来恰当地运行它。于是您只有一种选择:通过网络运行。可以通过配置,使 X 客户机在 PS3 上运行,而将 X 服务器放在一个远程系统上。这样做并不能真正获得特别快的速度 — hypervisor 似乎还会使网络速度有所下降,使之略低于硬件理论上具有的千兆比特的性能 — 但是如果您不需要最快的速度,那么这种配置实际上是很不错的。在设置这种配置时,有一些选择。首先,需要在另一台机器上运行一个 X 服务器。
|
一直以来都有这样一个传言,说 OS X 将在 PS3 上运行,因为在一个业内展览上曾在 Mac 上播放过一个 Cell/B.E. 技术演示电影,人们不断张贴这一海报,并坚称那就是证据。现在,这个传闻愈演愈烈。我将使用一台 OS X 机器上的本地 X11 服务器来演示这一点。实际上,X 的可移植性很好,一些基本的技巧在哪里都是一样的。
首先,启动 X 服务器,进入提示符。运行一个终端程序,程序的类型随您喜好而定。我选择 xterm。现在有两种方法可选。一种方法是使用 ssh 的 X 隧道(tunneling)特性将 X 请求从客户机(即 PS3)转发到服务器(即 Mac)。另一种方法是直接通过网络使用 X。两种方法各有优缺点。对于局域网,网络可能更容易解释和使用。首先,弄清楚 X 服务器的 DISPLAY 是什么。在 X 终端中,回显环境变量 DISPLAY。这个变量的值可能是 “:0.0”。这意味着 X 服务器在运行一个名为 “0.0” 的显示器。冒号将主机名与显示器名称分隔开。如果您的笔记本电脑的名称为 “laptop”,那么该显示器的全称为 “laptop:0.0”。(如果不提供这个名称,那么 X 会聪明地以更快的速度访问一个本地显示器。)
|
现在,如果您要转到 PS3 上,将环境变量 DISPLAY 设置为 “laptop:0.0”,然后运行一个 xterm,那么您会发现一个缺陷:许可被拒绝。默认情况下,X 不允许远程主机上的任意客户机在本地显示器上运行。这是一个安全特性;显然,您希望改变这种情况。最简单的方法是允许 PS3 上的客户机访问 X 服务器。在本地机器上,运行命令 xhost +<machine>
,其中 <machine>
是 PS3 的主机名或 IP 地址。我从来不会为不可路由的动态块设置 DNS,所以我使用了 xhost +10.10.10.134
。然后,在 PS3 上就可以运行 X 命令。它们在 Mac 上显示,从而避免了 X 服务器在 PS3 上占用大量的内存开销。
转发 X11 请求
现在,还有另一种选项。ssh
命令(sshd 仍然在运行,对吗?)可以转发 X11 请求。在访问 X 服务器时运行 ssh
,使用 -X
选项将导致转发 X 请求;实际上, -Y
选项可能更可取,因为它会支持 “受信任” 转发,从而绕过更多的安全特性。(您需要绕过这些特性,否则就不能执行一些操作,例如打开窗口。)也可以了解一下 -C
选项,该选项指定数据压缩,包括 X11 包。该选项对于较慢的网络比较有用,但是对于较快的网络则不适合。您可以两种方法都试试看。这个命令的语法更容易一些;其语法为 ssh -X <ps3>
,并在 PS3 上开始运行使用 X 的命令。通过使用这种方法,PS3 不存在服务器的内存开销,而只有客户机的内存开销。是时候启动 konquerer 了,对吗?但是 konqueror 要占大约 20MB 的内存空间,kded 占 7.5MB,klauncher 占 5.8MB,kio_file 占 5MB,kdeinit 占 4.7MB……
当然,这就凸显出第二个问题:即使没有服务器,X 应用程序也会消耗不少内存。去掉服务器的确可以增加可用内存,但是还不能完全解决问题。
|
尝试为服务器瘦身
远程访问可能不够快,或者您可能没有一个便于使用的 X 服务器。其实还有另外一个选项:本地运行服务器,但是不使用 KDE 或 Gnome。为此,很可能必须省略 runlevel 5 X 显示器管理器和登录窗口;但是可以在控制台上登录,并自己启动 X。通常的方法是只运行 xinit
程序,该程序运行 home 目录的 .xinitrc 文件中的命令。注意,这些命令是按顺序运行的;如果想一次运行不止一个程序,那么前几个程序要以后台的方式运行(在行的末尾加一个 &)。例如,可以使用下面的 .xinitrc:
本文转自IBM Developerworks中国
请点击此处查看全文