Linux 笔记本电脑设置优化
在我过去关于笔记本电脑的文章中,我讨论了安装基本 Linux 系统和设置 GNOME 2.2 的步骤。这一次,我将讨论一些零碎的东西,它们不太适合前两篇文章,但绝对值得进一步关注。
无线网络是笔记本电脑计算不可或缺的优势。就我而言,如果无线网络不可用,我永远不会涉足笔记本电脑上的 Linux。没有什么比在你最喜欢的椅子上,一边喝着冰镇饮料一边浏览网页更惬意的事了,所有计算都应该这样完成。在本例中,我将设置 Lucent Orinoco 802.11b PCMCIA 卡。无线世界中有很多新的和旧的标准,但就我所见,802.11b 是迄今为止最流行的。此外,如果您居住在人口稠密地区,您可能会发现有必要实施不同级别的安全措施。已经有很多文章讨论了复杂的 WiFi 安全世界,所以我不会涉足这个领域。如果您想了解更多关于 WiFi 安全的信息,请查看本文末尾的“资源”,您的问题将得到解答。
与大多数网络设备安装一样,您需要做的第一件事是确保为所讨论的硬件安装了内核模块。对于 Orinoco,您应该在内核配置的“网络设备支持”下设置以下选项。如果您没有设置这些选项,您现在需要重新编译并重新安装内核。
已选择 - 无线局域网(非业余无线电)
模块 - Hermes 芯片组 802.11b 支持 (Orinoco/Prism2/Symbol)
模块 - Hermes PCMCIA 卡支持
就我而言,我还必须为 16 位 PCMCIA 卡启用 ISA 总线支持。这在“通用设置”下完成,选项是 [*] ISA 总线支持。据我所知,此选项是 2.4.20 内核的新增功能。在阅读了许多新闻组和网络搜索后,似乎很多人在升级到 2.4.20 内核后遇到了 Orinoco 卡的问题。因此,请确保您启用了 ISA 总线支持。
完成内核修改后,下一步是安装访问 PCMCIA 卡所需的 Debian 软件包。快速执行 apt-get install wireless-tools 和 apt-get install pcmcia-cs 应该可以获取您所需的一切。所有 PCMCIA 的配置文件都可以在 /etc/pcmcia 目录中找到。需要修改的三个文件是 config、network.opts 和 wireless.opts。
让我们从编辑 config 文件开始。向下滚动到 device orinoco_cs 部分,并确保它看起来像下面这样。如果在 device "orinoco_cs" 部分中存在任何其他行,请将其注释掉。
device "orinoco_cs" class "network" module "hermes", "orinoco", "orinoco_cs"
接下来,打开 network.opts 并更改 # Host's IP address, netmask, network address, broadcast address 行下方的 TCP/IP 值。这些值与您配置传统 TCP/IP 网卡时相同。有些可以留空或根据需要填写。例如,以下是我用来配置到本地 LAN 的值
IPADDR="192.168.1.4" NETWORK="192.168.1.0" BROADCAST="192.168.1.255" GATEWAY="192.168.1.1" DNS_1="192.168.9.47" DNS_2="192.168.9.48"
然后,打开 wireless.opts,其中包含许多特定于无线连接的选项。为了简化我的示例,我不打算使用任何安全选项。如果您居住在城市地区,则不建议这样做,但是如果您身处偏远地区,我认为让当地的浣熊种群获得一些免费的互联网访问并没有什么错。唯一需要更改的是两个 ESSID 设置。其中一个在 Lucent Wavelan IEEE 注释部分下,另一个在 Generic example 下。在这两个部分下,将 ESSID 值更改为 any,使其看起来像 ESSID="any"。
如果您尚未重启,那么现在是重启的好时机,以确保 PCMCIA 服务正确启动。在启动过程中,您应该看到类似以下输出。如果启动消息滚动太快,您可以在 /var/log/syslog 中查看。
cardmgr[260]: watching 1 sockets cardmgr[261]: starting, version is 3.2.2
机器启动后,使用 tail -f /var/log/syslog 监视 syslog 并插入 Orinoco 卡。如果设置正确,您应该在日志中看到类似以下内容
cardmgr[279]: socket 0: Lucent Technologies WaveLAN/IEEE Adapter kernel: cs: memory probe 0xa0000000-0xa0ffffff: clean. cardmgr[279]: executing: 'modprobe hermes' kernel: hermes.c: 5 Apr 2002 David Gibson <hermes@gibson.dropbear.id.au> cardmgr[279]: executing: 'modprobe orinoco' kernel: orinoco.c 0.11b (David Gibson <hermes@gibson.dropbear.id.au> and others) cardmgr[279]: executing: 'modprobe orinoco_cs' kernel: orinoco_cs.c 0.11b (David Gibson <hermes@gibson.dropbear.id.au> and others) kernel: eth1: Station identity 001f:0001:0008:0048 kernel: eth1: Looks like a Lucent/Agere firmware version 8.72 kernel: eth1: Ad-hoc demo mode supported kernel: eth1: IEEE standard IBSS ad-hoc mode supported kernel: eth1: WEP supported, 104-bit key kernel: eth1: MAC address 00:02:2D:3A:35:08 kernel: eth1: Station name "HERMES I" kernel: eth1: ready kernel: eth1: index 0x01: Vcc 5.0, irq 3, io 0x0100-0x013f cardmgr[279]: executing: './network start eth1'
当您移除卡时,您应该看到
cardmgr[279]: executing: './network stop eth1' cardmgr[279]: executing: 'modprobe -r orinoco_cs' cardmgr[279]: executing: 'modprobe -r orinoco' cardmgr[279]: executing: 'modprobe -r hermes'
此时,您应该拥有一个功能齐全的无线笔记本电脑。Orinoco 卡可以根据需要移除和插入,而无需重启或进行任何进一步的配置。如果您遇到问题,一个用于排除 PCMCIA 问题的有用命令是 cardctl。使用 cardctl,您可以验证您的卡是否是您认为的那样。您还可以收集有关笔记本电脑中 PC 卡插槽状态的信息。
这是我正在使用的一个小技巧。就我而言,我在两个主要位置使用笔记本电脑:工作场所和家中。在家时,我使用 WiFi 卡,而在工作场所时,我使用集成的 NIC。在工作场所,我没有任何问题,因为我保持 WiFi 卡拔出状态,因此设备永远不会启动。但是在家里,我遇到了一个问题:当我使用 WiFi 时,我必须手动关闭集成的 NIC,因为某些应用程序不喜欢 eth0 启动但未连接到任何东西。这不是主要问题,但每次我在家启动笔记本电脑时都必须手动 ifconfig down eth0 变得很烦人。我纠正此问题的方法是在 /etc/pcmcia/wireless 的末尾添加以下行
ifconfig eth0 down
此脚本仅在无线设备启动时执行,因此它可以完美运行。每当我插入 Orinoco 卡时,集成的 NIC 都会被禁用。
ALSA 项目在一个通用软件包集中支持各种声卡和芯片组。这种设计使最终用户更容易,因为他们不必到处寻找有效的安装程序或寻求其他 ALSA 用户的帮助来解决可能出现的问题。ALSA 项目的整体价值的一个证明是它计划集成到未来的内核版本中。但是,就目前而言,我们必须手动编译和安装 ALSA 的模块。
与其复制已经存在的安装文档,我将简要概述安装过程,并指出我与安装文档不同的一些地方。在开始安装 ALSA 之前,请确保您的内核已启用以使用 soundcore 支持。通过在内核配置过程中选择“声卡支持”来选择 soundcore 选项。
Selected - Sound card support
安装过程的第一部分是任何 Linux 源代码安装的典型步骤,使用标准的 ./configure、make 和 make install 步骤。您必须为构成 ALSA 声卡套件的三个软件包(alsa-driver、alsa-libs 和 alsa-utils)中的每一个都执行这三个步骤。
接下来,您必须创建一些行并将其添加到 /etc/modutils/alsa 中。我没有创建新文件,而是将这些行添加到 /etc/modutils/aliases 的底部。他们建议您使用的行是
# ALSA portion alias char-major-116 snd alias snd-card-0 snd-intel8x0 # module options should go here # OSS/Free portion alias char-major-14 soundcore alias sound-slot-0 snd-card-0 # card #1 alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss alias sound-service-0-3 snd-pcm-oss alias sound-service-0-8 snd-seq-oss alias sound-service-0-12 snd-pcm-oss
此外,我还添加了一些关闭行,以阻止在启动期间显示的一些烦人的错误消息。因此,对于我的 Intel810 芯片组,我在 /etc/modutils/aliases 文件的底部添加了以下行。
# ALSA portion alias char-major-116 snd alias snd-card-0 snd-intel8x0 alias snd-card-1 off alias snd-card-2 off alias snd-card-3 off # module options should go here # OSS/Free portion alias char-major-14 soundcore alias sound-slot-0 snd-card-0 # card #1 alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss alias sound-service-0-3 snd-pcm-oss alias sound-service-0-8 snd-seq-oss alias sound-service-0-12 snd-pcm-oss
完成更改 aliases 或 alsa 文件后,您必须运行命令 update-modules 以使您的更改最终生效。
放置启动/停止脚本也是一个好主意。这些脚本保存您的音量设置,以便在重启后恢复之前的音量设置。主要的启动/停止脚本已存在于 /etc/init.d 中;您只需创建一些链接:。
ln -s /etc/init.d/alsasound /etc/rcS.d/S80alsavolume ln -s /etc/init.d/alsasound /etc/rc0.d/K02alsavolume ln -s /etc/init.d/alsasound /etc/rc6.d/K02alsavolume
此时,您应该可以开始使用 ALSA 声卡了。最好重启一下以确保所有启动脚本都正常工作,并且模块都正确加载。在 GNOME 中,您可以通过“声音”控制面板配置所有系统声音,该控制面板可以在“桌面首选项”菜单中找到。
ACPI,即高级配置和电源接口,是一个电源管理组件,最终将取代 APM。目前 ACPI 的整体状态充其量是混乱的。笔记本电脑制造商在编写某些与 ACPI 相关的 BIOS 和组件时,经常偏离任何类型的标准。他们不遵循标准,而是依赖专有的 Windows 驱动程序来保持功能正常。不幸的是,在许多情况下,这让 Linux 用户陷入困境。
当 ACPI 就位并 100% 正确运行时,使用它有很多优点。它可以监视与电源相关的组件,例如 AC 适配器和电池。其高级功能之一涉及处理器重新计时功能。您可以配置 ACPI 以在笔记本电脑空闲时降低 CPU 频率。它还可以控制系统风扇,从而为散热保护增加另一层监控。另一个更广泛的功能是监控笔记本电脑上发生的某些事件的能力。关闭盖子或按下电源按钮可以配置为使笔记本电脑进入睡眠或挂起状态。
我不会对您撒谎,ACPI 的设置可能很棘手。除非您对更改内核感到舒适,否则不要尝试运行 ACPI。步骤不一定复杂,但是如果您犯了错误,您可能会严重损坏内核,并且必须从备用内核启动才能修复损坏。从我所见,绝大多数笔记本电脑不完全符合 ACPI 标准。当然,规则也有例外,但是快速的网络搜索显示,所有笔记本电脑制造商的用户都遇到 ACPI 问题。这并不意味着 ACPI 对 Linux 用户毫无用处;即使在其受损状态下,它也可以提供比 APM 更多的功能。并且有许多调整和补丁可用于帮助您使其运行。为您的特定笔记本电脑找到这些调整和补丁的来源可能是另一场战斗。
以下是一些步骤,假设您的笔记本电脑在某种程度上符合 ACPI 标准。在本例中,我使用 2.4 内核。2.5 内核已集成了 ACPI 模块,但为了更广泛的受众,我将使用 2.4。
首先,您需要整理 Linux 内核源代码。在上一篇文章中,我使用了 Debian Sid 软件包存储库中的 2.4.20 源代码。尽管此源代码可以正常工作,但我发现很难将 ACPI 补丁应用于它。为了避免任何这些复杂情况,请从 www.kernel.org 下载 2.4.20 源代码。下载源代码后,将其解压缩到 /usr/src 目录中。然后 cd 进入 /usr/src,并将 linux 链接到 2.4.20 源代码,命令为 ln -s linux-2.4.20 linux。
下载并链接内核源代码后,您可以从 sourceforge.net/projects/acpi 获取 ACPI 补丁。重要的是使用与您的内核修订版一致的补丁。将补丁移动到 /usr/src/linux/ 目录并解压缩。此时,您应该在 /usr/src/linux 目录中有一个 acpi-something.diff 文件。这将是您用来修补内核以支持 ACPI 的文件。从 /usr/src/linux" 目录内运行以下命令以提交补丁。在本例中,我应用最新的 2.4.20 ACPI 补丁。
patch -p1 < acpi-20021212-2.4.20.diff
应用补丁后,运行 make menuconfig 并配置内核。但是,这次请注意“通用设置”菜单下的“ACPI 支持”子菜单。您可以在此处选择要使用的 ACPI 选项。如果这是您第一次在笔记本电脑上使用 ACPI,则可能很难弄清楚将支持哪些功能。在此步骤中需要记住的几个重要事项是启用“电源管理支持”,但不要启用“高级电源管理 BIOS 支持”。ACPI 在启用 APM 的情况下无法正常工作,但必须启用“电源管理支持”才能使某些 ACPI 功能工作。
一旦内核源代码已根据您的喜好配置,请编译、安装、重启并准备好进行一些密集的 ACPI 操作。机器启动后,登录到 root 控制台并运行 dmesg |more。如果 ACPI 模块有任何问题,它们将在此处显示。dmesg 也是一个很好的工具,可用于查找有关笔记本电脑在多大程度上支持不同 ACPI 功能的具体信息。
如果您幸运的话,dmesg 显示 ACPI 启动时没有问题。但是,我在我的 Thinkpad R32 上遇到了 ECDT 问题。经过广泛的故障排除,我发现 Thinkpad 的 ECDT 中的一个错误阻止了 ACPI 启动。幸运的是,有人编写了关于如何使内核与有错误的 ECDT 一起工作的 HOWTO。它可以在 这里 找到。
就目前而言,ACPI 最多是存在缺陷的。在笔记本电脑制造商理顺某种标准之前,我担心 ACPI 将成为每个 Linux 用户心中的一根刺。如果 APM 在您的笔记本电脑上运行正常,或者您没有大量额外时间进行故障排除,我建议不要使用 ACPI。希望随着每个新笔记本电脑型号的发布,ACPI 支持会越来越好。幸运的是,在一年左右的时间里,ACPI Linux 支持将像 APM 支持一样易于使用。
如果没有社区的支持,任何 Linux 用户都无法完成任何事情。在撰写这些 Linux 笔记本电脑文章的过程中,我阅读了无数关于该主题的文章和 HOWTO,以扩展我在该领域的知识。以下是我遇到的一些更适用的网站。
ACPI:Sourceforge 托管的 ACPI 2.4.* 补丁的项目主页。
atitvout:atitvout 是一种在 ATI 声卡上使用 svideo 输出的方法。在我的 R32 的 Radeon 7500 上效果很好。
高级 Linux 音频架构:ALSA 项目的主页。
GNOME 支持:如果您需要 GNOME 方面的帮助,这是一个很好的资源。我建议浏览论坛。
Linux 兼容性:一个用于研究 Linux 笔记本电脑组件兼容性的好网站。
Linux on Laptops:可能是笔记本电脑设置研究最权威的资源。
TPB, ThinkPad 按钮:TBP Thinkpad 实用程序的主页,用于使用基于 nvram 的音量和 Thinkpad 键。
TuxMobil:类似于 Linux on Laptops,但可供浏览的笔记本电脑安装数量较少。
电子邮件:jay@docherty.com