跳转至内容

Chrome OS 设备

来自 ArchWiki
(重定向自 Chromebook)
警告 本文依赖第三方脚本和修改,可能对您的硬件或数据造成不可逆的损害。

本文档旨在提供关于如何在 Acer、HP、Samsung、Toshiba 和 Google 生产的一系列 Chrome OS 设备上安装 Arch 的信息。目前此页面正在进行改版,并且正在构建更多特定型号的页面,其中包含以下部分信息。

注意 本文档描述了如何通过启用开发者模式来安装 Arch Linux。关于如何在不启用开发者模式的情况下在 ChromeOS 容器中安装 Arch Linux 的说明,请参阅 Crostini

简介

传统启动模式

所有最近的基于 Intel 的 Chrome OS 设备(从 2013 年的 Chromebook Pixel 开始)都具有传统启动模式,旨在允许用户启动 Linux。传统启动模式具有专用的固件区域 RW_LEGACY,该区域设计为用户可写(因此有“RW”表示),并且完全独立于固件的 ChromeOS 部分(即,更新是安全的,不会损坏设备)。它由 SeaBIOS 引导程序(来自 coreboot,所有 Chrome OS 设备使用的开源固件,第一代 Chromebook 和一些早期 ARM 型号除外)启用。SeaBIOS 表现得像一个传统的 BIOS,启动到磁盘的 MBR,然后是 Syslinux 和 GRUB 等标准引导加载程序。

配备 Core-i SoC(Haswell、Broadwell、Skylake、KabyLake)的型号大多配备了功能齐全的传统启动模式引导程序;更新到第三方版本可以提供错误修复和附加功能。配备 Atom SoC(Baytrail、Braswell、Apollolake)的型号具有传统启动模式能力,但出厂时并未配备 RW_LEGACY/SeaBIOS 引导程序(固件的这部分是空的)。这些型号需要加载第三方 RW_LEGACY 固件才能使传统启动模式正常工作。

无传统启动模式/SeaBIOS 的型号

要在这类未预装 SeaBIOS 作为安装固件一部分的 Chrome OS 设备上安装 Arch Linux,可以采用以下方法之一。

  • 如果设备支持传统启动模式,但未预装功能齐全的 RW_LEGACY 引导程序(或根本没有),则可以将 SeaBIOS 或 edk2 引导程序刷入固件的 RW_LEGACY 部分。这 100% 安全,因为它写入固件映像的用户可写区域,该区域与 ChromeOS 完全独立/不影响 ChromeOS。在 ChromeOS 设备上安装/更新 RW_LEGACY 固件最简单的方法是使用 MrChromebox 的 固件实用脚本,它支持最广泛的设备,并提供最新的 SeaBIOS 和 edk2 版本;您也可以使用 Chrome OS 的 flashrom(需要下载/编译自己的版本)手动更新 RW_LEGACY 固件,或使用 John Lewis 的 flash_chromebook_rom.sh 脚本(已不再支持)。MrChromebox 脚本为旧固件设备安装 SeaBIOS,为新固件设备安装 edk2。
  • 刷入一个包含 SeaBIOS 或 UEFI 引导程序的完整 自定义固件,并移除所有 ChromeOS 特定的部分。
  • 刷入固件的 BOOT_STUB 部分。此方法将 stock ChromeOS 引导程序(depthcharge)替换为 SeaBIOS。理论上,这比刷写整个固件更安全,但可能存在一些限制(例如,睡眠或 VMX 不支持)。这是 John Lewis 的 flash_chromebook_rom.sh 脚本中的“Modify ROM to run SeaBIOS exclusively”选项,以及 MrChromebox 脚本中的“Flash BOOT_STUB firmware”选项。
  • 采用 ChrUbuntu 方法,该方法使用 Chrome OS 内核和模块。
  • 构建并签名自己的内核,请参阅 [1] [2]

本文档中描述的 安装过程尝试涵盖在无 SeaBIOS 的型号上通过刷写自定义固件来安装 Arch Linux 的方法。

固件写保护简介

所有 Chrome OS 设备都具有固件写保护功能,该功能限制对闪存芯片某些区域的写访问。了解这一点很重要,因为在安装过程中可能需要禁用硬件写保护(用于更新 GBB 标志或刷写自定义固件)。

更多详情请参阅 Custom firmware for Chrome OS devices#Firmware write protection

前提条件

  • 访问您 Chrome OS 设备 的 ArchWiki 页面。
  • 如果您的设备没有 ArchWiki 页面,则在继续之前,请收集有关该设备的信息,如果您成功安装了 Arch Linux,请考虑为您的型号添加新的 ArchWiki 页面(您可以以 Category:Chrome OS devices 中的现有页面为例)。
  • 在进行任何更改之前,请完整阅读本指南并确保您理解所有步骤。

Chrome OS 设备

请参阅 Chrome OS devices/Chromebook 以获取硬件比较,其中包含有关 SeaBIOS 可用性和存储扩展的详细信息。

通用硬件建议和说明

  • MyDigitalSSD M.2 NGFF SSD 驱动器可能是升级 Chrome OS 设备内部 SSD 最受欢迎的选择。在 Arch 论坛的 Acer C720 主题 [3] [4] [5] 以及网络上还有更多关于 MyDigitalSSD SSD 驱动器故障的报告。如果 SSD 已升级为 MyDigitalSSD 型号,则强烈建议经常备份系统和数据。建议使用其他品牌升级 SSD。请注意,这可能是由于 SSD 固件问题,因此强烈建议更新 SSD 固件。
  • Transcend MTS400 M.2 NGFF SSD 驱动器(至少在 stock Coreboot 固件下)在启用 ALPM 时会发生故障,目前没有修复此错误的 SSD 固件更新,因此强烈建议在安装了电源管理守护程序(启用了它)的情况下禁用 ALPM,请参阅 Resolving SATA power management related errors如何禁用 Chrome OS 中的 ALPM

安装

警告 在不预装 SeaBIOS 的 ChromeOS 设备上进行安装需要刷写自定义固件,某些类型的自定义固件有可能导致设备变砖。
注意 虽然以下信息应该适用于所有具有 coreboot 固件(预装 SeaBIOS 引导程序或无)的 ChromeOS 设备,但某些型号可能需要进行进一步调整。

通用安装过程

  • 启用开发者模式。
  • 具有功能齐全的传统启动模式/SeaBIOS 的 ChromeOS 设备
    • 启用传统启动模式。
    • 将 SeaBIOS 设置为默认值(可选但强烈推荐,需要禁用写保护)。
  • 无功能齐全的传统启动模式的 ChromeOS 设备
    • 刷写以下类型的自定义固件之一
      • 刷写 RW_LEGACY 固件(零风险)
      • 刷写 BOOT_STUB 固件(风险极低)。
      • 刷写完整自定义固件(风险低)。
  • 准备安装介质。
  • 启动 Arch Linux 安装介质并安装 Arch。

启用开发者模式

开发者模式 是访问 ChromeOS 内部超级用户 shell 所必需的,这对于更改系统(例如允许通过 SeaBIOS 启动)至关重要。

警告 启用开发者模式将擦除您所有的数据。

要启用开发者模式

  • 按住 Esc+⟳(通常是 F3 的位置)键,然后按 电源 按钮。这将进入恢复模式。
    • Chromebox 有一个专用的恢复按钮,在开机时应按下/按住该按钮。
  • Ctrl+d(无提示)。系统会要求您确认,然后系统将恢复其状态并启用开发者模式。
  • 有时,按 Ctrl+d 会提示您关闭 OS 验证。执行此操作,然后再次按住 Ctrl+d,直到系统重新启动并显示开发者模式警告。
  • 在白色启动画面上按 Ctrl+d(或等待 30 秒听到哔声并启动)进入 ChromeOS。

访问超级用户 shell

启用开发者模式后,您将需要访问超级用户 shell。如何执行此操作取决于您是否已配置 ChromeOS。

在不登录 ChromeOS 的情况下访问超级用户 shell

如果您尚未配置 ChromeOS,只需按 Ctrl+Alt+F2(F2 是顶部行中的“向前”箭头,→),您将看到一个登录提示。

  • 使用 chronos 作为用户名,它不应提示您输入密码。
  • 使用 sudo 成为超级用户,使用命令 sudo su -

登录 ChromeOS 后访问超级用户 shell

注意 从 ChromeOS 版本 117 开始,此方法不再有效,因为在 crosh shell 中使用 sudo 命令是不允许的。上述另一种方法是访问超级用户 shell 的唯一途径。

如果您已配置 ChromeOS

  • 使用 Ctrl+Alt+t 打开 crosh 窗口。
  • 使用 shell 命令打开 bash shell。
  • 使用 sudo 成为超级用户,使用命令 sudo su - 来完成此操作。

启用传统启动模式

如果您的 ChromeOS 设备未预装 SeaBIOS 的传统启动模式支持,或者您更愿意安装自定义固件,请继续 #刷写自定义固件

这将通过 coreboot 中的开发者模式屏幕启用 SeaBIOS 的预装版本。

  • 在您的超级用户 shell 中输入
# crossystem dev_boot_legacy=1
  • 重新启动机器。

您现在可以通过在白色启动画面上按 Ctrl+l 来启动 SeaBIOS。

注意 如果您打算继续使用预装 SeaBIOS 的方式,并且认为您不希望每次启动都要按 Ctrl+l 才能到达 SeaBIOS,那么您可以将 coreboot 设置为默认启动 SeaBIOS。这需要禁用硬件固件写保护。

现在您的 ChromeOS 设备已启用 SeaBIOS。如果您选择不将其设为默认值,则可以继续 #安装 Arch Linux

默认启动至 SeaBIOS

要默认启动 SeaBIOS,您需要运行 set_gbb_flags.sh 脚本,该脚本是 ChromeOS 的一部分。该脚本使用 flashrom 和 gbb_utility 读取 RO_GBB 固件区域,修改标志,然后将其写回闪存。您也可以使用 MrChromebox 的 固件实用脚本 在 ChromeOS 或 Arch 中设置 GBB 标志(后者需要使用特定的内核参数引导以放宽内存访问限制)。

警告 如果您不设置 GBB 标志,则完全放电或断开的电池会将 dev_boot_legacy crossystem 标志重置为其默认值,从而移除传统启动模式的能力。虽然这以前需要您恢复 Chrome OS 并擦除内部存储上的 Arch Linux 安装,但 GalliumOS 开发人员创建了一套“fixflags”恢复映像,这些映像不会擦除内部存储,而是简单地重置 dev_boot_legacy crossystem 标志。请参阅 galliumos.org/fixflags
  • 禁用硬件写保护。
要查找硬件写保护螺丝/开关/跳线的位置以及如何禁用它,请访问您 ChromeOS 设备 的 ArchWiki 页面。如果 ArchWiki 上没有关于您设备的信息,请参阅 Developer Information for ChromeOS Devicescoreboot 的 Chromebook 页面
有关固件保护的更多信息,请参阅 Chrome OS devices/Custom firmware#Firmware write protection
# flashrom --wp-disable
  • 检查写保护是否已禁用。
# flashrom --wp-status
  • 运行 set_gbb_flags.sh 且不带任何参数。
# /usr/share/vboot/bin/set_gbb_flags.sh
  • 这将列出所有可用标志。我们感兴趣的标志是
GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080
GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400
  • 因此,要将 SeaBIOS 设置为默认值,并设置 1 秒超时,防止意外通过空格键退出开发者模式,并确保在电池耗尽/断开连接时仍启用传统启动模式,我们设置的标志如下:
# /usr/share/vboot/bin/set_gbb_flags.sh 0x489
  • 重新启用软件写保护。
# flashrom --wp-enable
注意 所有这些步骤都由 MrChromebox 的固件实用脚本自动化,因此如果您使用该脚本安装/更新 RW_LEGACY 固件,最简单的方法是通过该脚本设置标志。

您的 ChromeOS 设备现在将默认启动 SeaBIOS,您可以继续 安装 Arch Linux。如果您的设备启动正常,那么您可以选择重新启用硬件写保护。

刷写自定义固件

注意 以下步骤解释了如何从 ChromeOS 刷写自定义固件。有关如何从 Arch Linux 刷写自定义固件的信息,请访问 Chrome OS devices/Custom firmware 页面。
  • 禁用硬件写保护。
您需要禁用硬件写保护,可以使用开关、跳线或螺丝,或断开电池。要了解如何禁用它,请访问您 ChromeOS 设备 的 ArchWiki 页面。如果 ArchWiki 上没有关于您设备的信息,请参阅 Developer Information for ChromeOS Devicescoreboot 的 Chromebook 页面
有关固件保护的更多信息,请参阅 Chrome OS devices/Custom firmware#Firmware write protection
  • 输入运行 MrChromebox 或 John Lewis 固件脚本的命令。
    注意 不在此处发布的原因是强制您访问网站并阅读说明后再继续。
  • 退出脚本后,请务必在重启系统之前将备份的固件复制到外部存储(如果脚本未为您提供此选项)。

现在您的设备上应该安装了自定义固件,祈祷好运并重启。

刷写固件后,您可以继续 #安装 Arch Linux

安装 Arch Linux

准备安装介质

创建一个 Arch Linux 安装程序 USB 驱动器

启动安装介质

  • 将 USB 驱动器插入 ChromeOS 设备,并在白色启动画面上按 Ctrl+l 启动 SeaBIOS(如果 SeaBIOS 未设为默认值)。
  • Esc 键进入引导菜单,然后选择与您的 USB 驱动器对应的数字。

Arch Linux 安装程序引导菜单应该出现,安装过程可以照常进行。

注意 目前请选择 GRUB 作为您的引导加载程序:您可以选择 MBR 或 GPT:请参阅 Partitioning。如果您选择 GPT,请不要忘记添加一个 BIOS 引导分区。另请参阅 已知问题

安装完 Arch Linux 后,继续按照 安装后配置 进行。

安装后配置

打补丁的内核

注意 除非您的设备需要打补丁的内核支持,否则您很可能可以忽略此部分。

建议为大多数 Chrome OS 设备使用官方 linux 包,但较新的设备可能需要打补丁的内核支持。

如果您的设备需要打补丁的内核,建议查看补丁列表,并决定补丁列表是否足够短,以至于您不再需要打补丁的内核,而是可以使用官方 linux 包。

有关更多信息,请参阅 kernels

显卡驱动

请参阅 Intel graphics

触摸板和触摸屏

请参阅 Touchpad SynapticslibinputTouchscreen

触摸板和触摸屏内核模块

自内核 3.17 起,所有相关补丁都已合并到上游源代码中,这意味着核心中的 linux 包支持这些设备。

如果触摸板或触摸屏不受支持怎么办?
  • 不用担心,开发人员应该能够根据请求添加它,因为 Chromium OS 源代码包含了相关的更改。
  • 您也可以尝试自己查找相关提交并创建适当的补丁,一些提示:
    • 深入研究您的 Chrome OS 系统,查看明显的嫌疑对象,如启动日志、/proc/bus/input/devices/sys/devices
    • Chromium OS 的 Linux 内核源代码位于 [6]
    • 最新 Chromium OS 发行版的每个内核源代码都有自己的分支,命名约定是:release-R*-*-chromeos-KERNELVER,其中 R*-* 是 Chromium OS 发行版,KERNELVER 是内核版本。
    • 查看 drivers/platformdrivers/i2c/bussesdrivers/input/touchscreen 的 git 日志。

触摸板配置

有几种方法可以设置触摸板:

Chromium OS 输入驱动程序

本文或本章节已过时。

原因: xf86-input-cmt 的开发不活跃,而且由于 libinput 与 Chrome OS 设备触摸板的兼容性相当好,因此在任何情况下可能都不再需要它。(请在 Talk:Chrome OS devices 中讨论)。

xf86-input-cmtAUR 提供了 Chromium OS 输入驱动程序的移植:xf86-input-cmt,作为 Synaptics 输入驱动程序 的替代品。它为大多数设备提供了经过微调的配置文件,并提供了 Synaptics 输入驱动程序 所不具备的功能,例如掌压防误触。此外,它还启用了 Chromium OS 输入驱动程序默认未启用的功能,例如轻触拖动。

请注意,在某些情况下,如果您没有足够的权限访问 /dev/input/event,输入驱动程序将无法工作。如果您使用 startx 加载 DE/WM 会话,这将会影响到您。如果发生这种情况或驱动程序由于其他原因无法加载,您应该运行:

# usermod -a -G input $USER

其中 $USER 是当前希望使用输入驱动程序的用户。

还应注意,一些用户报告说该驱动程序在 GDM 中无法工作,但在登录后可以正常工作。如果您受到此影响,您应该运行:

# usermod -a -G input gdm

重启后,您应该能够正常使用触摸板。

修复睡眠

注意 盖子睡眠可能在启动后无法直接工作,您可能需要等待一段时间。

以下是修复睡眠功能的说明。使用预装 SeaBIOS 或 John Lewis 预编译 SeaBIOS 的用户将需要此修复。Matt DeVillier 的自定义固件不需要此过程,因为有问题的 ACPI 唤醒设备(例如 TPAD)在固件中已被禁用。

已经讨论过几种替代方案,这些方案可能对某些用户更好。[7] [8]

要修复睡眠,基本思路是禁用 EHCI_PCI 模块,该模块会干扰睡眠周期。有多种方法可以实现这一点。

使用内核参数

将以下内容添加到您的 GRUB 配置中:

/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=ehci_pci"

然后 重建您的 grub 配置。重建 GRUB 配置后,请重新启动您的计算机。

用户报告在 11 代 Acer Chromebook CX5500 上通过 SeaBIOS 运行 Arch Linux 时,需要黑名单 atmel_mxt_tscros_ec_typec 来代替上述模块,以使睡眠和恢复正常工作。

使用 systemd

有时,Synaptics 触摸板和笔记本电脑的各种其他部分被用作唤醒设备,导致在睡眠期间移动笔记本电脑会导致睡眠结束。为了禁用除笔记本盖传感器外的所有唤醒设备,请创建以下 suspend-device-fix.sh 文件。

/usr/local/sbin/suspend-device-fix.sh
#!/bin/bash

awk '{if ($1 != "LID0" && $3 == "*enabled") print $1}' < /proc/acpi/wakeup | while read NAME
do echo "$NAME" > /proc/acpi/wakeup
done

exit 0

现在使文件 可执行

创建一个 systemd 服务以便每次启动时执行脚本。

/etc/systemd/system/suspend-fix.service
[Unit]
Description=Suspend Fix

[Service]
Type=simple
ExecStart=/usr/local/sbin/suspend-device-fix.sh

[Install]
WantedBy=multi-user.target

首先 启动 suspend-fix.service。如果它正常启动,那么 启用 它以便在启动时启动。

本文或本章节的准确性存在争议。

原因: 为什么我们要在关于 systemd 服务的章节中使用 rc.d?(请在 Talk:Chrome OS devices 中讨论)。

/etc/rc.d/rc.local 的末尾添加以下行(如果不存在,则创建它),以防止 EHCI USB 被错误处理。

/etc/rc.d/rc.local
echo 1 > /sys/devices/pci0000\:00/0000\:00\:1d.0/remove

然后,创建以下 cros-sound-suspend.sh 文件。下面仅列出了 Ath9k 绑定/解绑行;如果您遇到问题,请参阅上面链接的替代方案以获取额外的声音睡眠处理。

/usr/lib/systemd/system-sleep/cros-sound-suspend.sh
#!/bin/bash

case $1/$2 in
  pre/*)
    # Unbind ath9k for preventing error and full sleep mode (wakeup by LID after hibernating)
    echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/unbind
    # Unbind snd_hda_intel for sound
    echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind
    echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind
    ;;
  post/*)
    # Bind ath9k for preventing error and and full sleep mode (wakeup by LID after hibernating)
    echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/bind
    # bind snd_hda_intel for sound
    echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind
    echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind
    ;;
esac

确保使脚本 可执行

然后 重建您的 grub 配置

修复音频

基于 Apollolake 的型号

解决基于 Apollolake 的型号音频问题的一个潜在解决方案是使用 SOF DSP 驱动程序,并重新定义固件在音频处理管道中使用的拓扑。

这很可能解决与未找到音频设备或内核缓冲区中的拓扑错误相关的问题。

该拓扑由 Sound Open Firmware 维护者创建,并由 MrChromebox 测试(请参阅 Github 讨论)。如 MrChromebox 所述,这可能会引入音频缩放问题(例如,音频输出范围为 0-10 而非 0-100)和不正确的音频输出设备类型(例如,耳机而非扬声器)。

本文或本章节已过时。

原因: sof-apl-da7219.tplg 目前由 sof-firmware 包提供,所以这可能不再需要了。(请在 Talk:Chrome OS devices 中讨论)。
  • 安装 sof-firmware
  • 下载并解压 sof-apl-da7219.tplg.gz
  • .tplg 拓扑文件复制到 /lib/firmware/intel/sof-tplg
  • 手动选择 SOF DSP 驱动程序,并使用 modprobe 或其他方法(例如,引导加载程序内核参数)编辑两个内核模块设置,为 SOF 固件指定备用路径。
/etc/modprobe.d/inteldspcfg.conf
options snd-intel-dspcfg dsp_driver=3
options snd-sof-pci fw_path="intel/sof"

基于 Baytrail 的型号

大多数 Baytrail 型号的音频应该可以在 linux 内核中正常工作,因为修复已合并到 4.19.7 版本 [9],以修复 4.18.15 版本中的回归问题,请参阅错误报告 [10]

您很可能还需要使用 alsa-utils 中的 alsamixer 来启用“Left Speaker Mixer Left DAC”和“Right Speaker Mixer Right DAC”。更多信息,请参阅 FS#48936

本文或本章节已过时。

原因:sof-cht-max98090.tplgsof-byt-max98090.tplg 目前都由 sof-firmware 包提供,因此创建符号链接可能不再是必需的。(请在 Talk:Chrome OS devices 中讨论)

如果您使用 max98090,您可能还需要安装 Sound Open Firmware 并将 /usr/lib/firmware/sof-cht-max98090.tplg 符号链接到 /usr/lib/firmware/sof-byt-max98090.tplg

基于 Haswell 的型号

以下一项或多项可能有助于解决音频相关问题,设置 snd_hda_intel 模块索引被认为是最有用的。您很可能不需要进行任何更改。

  • 创建 /etc/modprobe.d/alsa.conf 文件,其中 index 选项将确保模拟输出是默认值(而不是 HDMI),model 选项将通知驱动程序我们的主板型号,这将使内置麦克风可用(您可以尝试使用 model=alc283-sense-combomodel=,alc283-dac-wcaps 代替)。
/etc/modprobe.d/alsa.conf
options snd_hda_intel index=1 model=,alc283-chrome
  • 使用来自 [11]~/.asoundrc 文件。
  • 如果您在使用耳机时遇到问题(可能没有音频播放),请尝试在终端中使用 alsactl restore(需要 alsa-utils)。现在,ALSA 应该可以在使用耳机/扬声器时自动切换通道。

快捷键

Chromebook 功能键内核 识别为标准的 F1F10,最好根据它们的外观进行映射。同时,获取 DeleteHomeEndPgUpPgDown 键也会很有用,它们在 Chrome OS 中映射到 Alt+BackSpaceRightLeftUpDown

使用 xkeyboard

xkeyboard-config 2.16-1 添加了 chromebook 模型,该模型启用了 Chrome OS 风格的功能键。例如,您可以使用 localectl set-x11-keymap us chromebook 来设置。有关完整的映射,请参阅 /usr/share/X11/xkb/symbols/inet 中的 chromebook 定义。

使用 keyd

keydkeyd)是一个强大的低级工具,可以拦截 evdev 事件并以灵活的方式重新映射它们(例如,使用任意组合键或允许在键按下或长按时具有不同的行为)。与其他工具不同,选定的键是通过模拟的 evdev 设备发送的,因此它在 shell、X11 或 Wayland 中都能透明工作。

主配置文件存储在 /etc/keyd/default.conf。要将顶排键映射为单独按下时发送功能键事件,与 Meta 键一起按下时发送 F1-F10,可以使用以下配置:

/etc/keyd/default.conf
[ids]
*

[main]
f1 = back
f2 = forward
f3 = f5
f4 = f11
f5 = M-f8
f6 = brightnessdown
f7 = brightnessup
f8 = mute
f9 = volumedown
f10= volumeup

[meta]
f1 = f1
f2 = f2
f3 = f3
f4 = f4
f5 = f5
f6 = f6
f7 = f7
f8 = f8
f9 = f9
f10= f10

left  = home
right = end
up    = pageup
down  = pagedown

backspace = delete

[shift]
meta = capslock

最后几行允许将 Meta+<箭头键> 映射到 HomeEndPgUpPgDown,将 Meta+Backspace 映射到 Delete,将 Shift+Meta 映射到 Capslock

要反转顶排键的行为(即,默认情况下为 F1-F10,与 Meta 键一起按下时为多媒体键),只需移动两个段落的内容即可。

/etc/keyd/default.conf
[ids]
*

[meta]
f1 = back
f2 = forward
f3 = f5
f4 = f11
f5 = M-f8
f6 = brightnessdown
f7 = brightnessup
f8 = mute
f9 = volumedown
f10= volumeup

left  = home
right = end
up    = pageup
down  = pagedown

backspace = delete

[shift]
meta = capslock

也可以使用 Meta 以外的其他键,只需将段落名称更改为所需的键(例如,将 meta 更改为 controlaltshift)。

使用 Sxhkd

设置热键的一种方法是使用 Sxhkd 守护进程。除了 sxhkd 之外,还需要 amixer(1)xorg-xbacklightxautomation

请参阅 ~/.config/sxhkd/sxhkdrc 的配置示例 [12]

使用 Xbindkeys

配置热键的另一种方法是使用 Xbindkeys。除了 xbindkeys 之外,还需要 amixer(1)xorg-xbacklightxvkbdAUR

备用的 xbindkeys 配置

Volchange(源自 Debian User Forums)可以使用 PulseAudio 来控制音量,而不是使用 amixer(1)。除了 Volchange 之外,还需要 xorg-xbacklightxvkbdAUR

请参阅 ~/.xbindkeysrc 的匹配示例 [15]

在 GNOME 中使用 gsettings set 进行映射

一些功能键可以在 Gnome 中进行映射,并且可以显示 HUD 通知(如音量和亮度变化),这可以作为上述映射方法的补充。这个 链接示例 映射了亮度和音量操作。请注意,需要 xdotool

电源键和盖子开关处理

忽略使用 logind

开箱即用,systemd-logind 将捕获电源键和盖子开关事件并进行处理:它会在按下电源键时关闭 Chromebook,在合上盖子时进入挂起状态。然而,这种策略可能有点过于严苛,因为电源键是键盘右上角的一个普通按键,可能会被意外按下。

要配置 logind 以忽略电源键按下和盖子开关,请在下面将行添加到 logind.conf

/etc/systemd/logind.conf
HandlePowerKey=ignore
HandleLidSwitch=ignore

然后 重新启动 logind 使更改生效。

电源键和盖子开关事件仍将由 logind 记录到 journald。请参阅 Power management#ACPI events

被 Gnome 忽略

安装 gnome-tweaks,打开 Tweak Tool,然后在 Power 下更改 Power Button Action。

已知问题

Syslinux

请仔细遵循 Syslinux 的安装说明。尝试手动安装以了解问题出在哪里。如果您看到 Missing Operation System,则可能是因为您需要使用正确的引导加载程序二进制文件。如果 syslinux 不起作用,请尝试另一个 引导加载程序,例如 GRUB

参见