Linux 常见问题解答

在哪里可以与开发者聊天?

所有 Chromium OS 开发讨论都在 Chromebook 帮助社区中进行。欢迎随时提问,但请务必先搜索一下,看看您的问题是否已有解答。

在哪里可以提交功能请求?

作为一个新兴项目,我们目前有很多工作要做,并且计划发布很多内容,因此最好暂时搁置此问题,并在发布几个 ChromeOS 版本后再回来查看。

在此期间,欢迎随时通过上述邮件列表与我们交流/提问。

当我们的产品更加稳定时,您可以使用我们的问题跟踪器。如需了解详情,请参阅下一个问题。

在哪里可以提交 bug?

请先确保您使用的是最新的开发者渠道。我们仍在进行大量工作。

接下来,请确保该问题不是已知问题或已得到解决。您可以查看现有 bug 列表

如果您仍想发送反馈,可以提交反馈报告,并在说明中添加 #crostini(ChromeOS 上的 Linux 的另一个名称)。如需针对 ChromeOS 的任何部分提交反馈,请按 alt+shift+i

如果您仍想向开发者提交 bug,请使用此链接将问题转给合适的人员。

为什么命名为 Crostini?

它与 crouton 一词谐音,后者是一个旨在为已开启开发者模式的用户轻松创建完整 Linux 环境(包括开发者工具)的项目。Crostini(ChromeOS 上的 Linux)旨在满足 crouton 所涵盖的大多数用例,而且与 crouton 相比,它是一种更大、更美味的小吃,因此得名 Crostini。

crouton 帮助确定了开发者希望在 ChromeOS 中实现的许多使用情形,因此从需求的角度来看,它有助于引导 Linux 在 ChromeOS 上运行。我们希望确保大多数 crouton 用户能够在 ChromeOS 上使用 Linux 来满足自己的需求,同时确保环境安全。

因此,crouton 有助于确定 ChromeOS 上 Linux 的发展方向,但两者之间并未共享或重复使用任何代码。并不是说 crouton 不好,它只是一个完全不同的模型。

我的设备何时会获得支持?

我们目前无法发布本文档以外的任何信息。如果您的设备未列在 Chromium OS 官方文档的设备支持部分中,则表示我们尚未针对该特定设备做出任何可供公开的决定。

因此,请不要向我们索取设备支持路线图,因为我们没有此类信息。

我需要启用开发者模式吗?

无需启用开发者模式(您会在启动时看到有关操作系统验证功能已关闭的警告界面)。这些功能均旨在以安全方式运行,同时确保系统以正常/已验证模式运行。

对于某些设备,您可能需要切换到开发者渠道,但这与开发者模式完全无关。

我是否在 ChromeOS 上运行 Linux?

如果您使用的是我们提供的默认容器中的终端应用或程序(包括用于简化集成的程序,例如 Sommelier),则可以。

如果您运行的是自己的容器或虚拟机,则不能。

为什么要运行虚拟机?容器不是安全的吗?

虽然容器通常会自行隔离(通过 Linux 命名空间),但它们不会隔离内核或类似的系统资源。这意味着,内核中只需存在一个 bug,即可完全利用该系统并窃取您的数据。

这对于 ChromeOS 来说还不够,因此我们将所有内容都放在 VM 中。现在,您必须通过 crosvm,而 crosvm 本身也受到严格的沙盒限制。

如需了解详情,请参阅官方 Chromium OS 文档的安全性部分。

如何在 ChromeOS 与容器之间共享文件?

ChromeOS 容器上默认 Linux 的存储空间可在 ChromeOS“文件”应用中的“Linux 文件”下访问。使用 Secure Shell,您可以设置到其他远程容器的 SFTP 装载点,然后也可以通过“文件”应用进行浏览。

容器未运行时,我可以访问文件吗?

目前,容器必须处于运行状态才能访问其内容。当从“文件”应用访问“Linux 文件”时,默认的 Linux on ChromeOS 容器会自动启动。

我可以安装自定义内核模块吗?

目前,Termina 不包含模块支持。这意味着,尝试使用需要构建或加载自定义内核模块的软件(例如 VirtualBox)将无法正常运行。另请参阅下一个问题。

我可以在虚拟机内运行虚拟机吗?

部分 ChromeOS 设备支持嵌套虚拟化,以支持 Android 模拟器。此外,您还可以运行 qemu-system 来模拟硬件,并在其中启动所需的任何操作系统。遗憾的是,由于 QEMU 无法利用 KVM 进行硬件加速,因此速度会非常慢。

我可以在 ChromeOS 的 Linux 容器内运行 Docker 容器或其他容器吗?

是的!您可能需要先安装相关软件包,才能运行所需的任何容器格式。

哪种架构适用于我的系统?

Linux 容器架构将与您所用设备的架构保持一致。您可以通过以下两种不同的方式了解具体原因:

  • 在新标签页中,前往 chrome://settings/help/details 并查看平台,然后将主板名称与我们的公开设备列表进行匹配。查看“用户 ABI”字段,了解您使用的是哪种 CPU。
  • 打开 crosh 并运行 uname -m。此命令将输出当前设备的架构。

如果您看到 x86_64,则可以运行为 Intel/AMD 编译的代码(32 位/64 位/x32 应该都可以)。

如果您看到 arm(或类似 armv7l 的内容)或 aarch64,则可以运行为 ARM/ARM64 编译的代码。

我可以运行其他架构吗?

目前,尚无集成支持,无法在 Intel 系统上运行 ARM 代码,反之亦然。您可以自行处理此问题(例如使用 qemu-user),但如果您熟悉 qemu-user,那么您已经知道这一点了。

我可以运行在退出登录后继续运行的程序吗?

不对!所有虚拟机(及其容器)都与您的登录会话相关联。您退出登录后,所有程序都会按设计关闭/终止。

由于您的所有数据都存储在加密的主目录中,因此我们不希望在您退出登录时发生数据泄露。

如需了解详情,请参阅官方 Chromium OS 文档的安全性部分。

我可以在登录时自动运行程序吗?

不对!所有虚拟机(及其容器)都需要手动重新启动。这有助于防止持久性漏洞利用。

如需了解详情,请参阅官方 Chromium OS 文档的安全性部分。

我可以在启动时自动运行程序吗?

不对!请参阅之前的问题。

我可以为容器设置环境变量吗?

没问题!您可以通过以下几种方式来做到这一点。

  • 借助 environment.d,您可以为 systemd --user 会话设置环境变量,包括终端和所有 GUI 应用。您可能需要使用更新的容器,即 Debian 10“buster”,才能使用此方法。
  • 如果您只是想在终端中使用环境变量,请在 shell 的配置文件(例如 ~/.bashrc~/.zshrc)中设置这些变量。

对环境变量的更改仅对新启动的程序生效。您可能还需要重启程序或整个容器,才能使所有更改生效。

是否支持多配置文件?

不支持。终端仅在主个人资料中受支持 (*)。我们的目标是让主个人资料拥有功能齐全且流畅的体验,并且不会在次要个人资料中崩溃或引起问题。我们不打算为辅助付款资料添加更多功能。

如果您不熟悉多配置文件支持,请查看常规多配置文件文档以了解详情。

(*):终端应用在所有次要配置文件中均处于停用状态。用户可以通过 crosh 手动启动 VM 及其中的容器,但界面和“文件”应用可能无法自动集成。

是否支持儿童账号?

不支持。终端不支持儿童账号。我们暂不打算向此类账号提供此功能。

如果您不熟悉儿童账号,请查看儿童账号文档,了解更多详情。

我的虚拟机/容器/数据是否已同步/备份?

最终,您需要对进入容器的所有数据负责。如需在多台机器之间轻松同步项目文件夹等数据,您可以在云端硬盘中与 Linux 共享文件夹。您添加到该文件夹中的所有内容都会备份到云端硬盘,并在您的设备之间保持同步。

如何备份虚拟机?

最简单的方法是使用 ChromeOS 本身内置的新备份功能。为此,请前往“设置”,然后从左侧导航栏中选择“开发者”。然后,导航到“Linux”。您会看到“备份和恢复”。如果您导航到此菜单,会看到一个“备份”按钮,点击该按钮可为您保存 .tini 文件。

如果您想备份单个容器,另一种方法是使用标准 LXC 命令。

您可以使用 vmc export 命令手动导出整个虚拟机。默认情况下,它会将 qcow2 磁盘映像转储到“下载”文件夹。请注意,目前还无法导入虚拟机,因此此功能仅适用于诊断或使用其他系统提取文件。

我可以直接访问虚拟机/容器文件(例如通过“文件极客”应用)吗?

目前,无法访问 VM 使用的映像文件。我们目前没有更改此设置的计划。

如果您想备份内容,则需要手动执行此操作。

为什么虚拟机/容器中的时间不同步?

虚拟机(以及容器)内部的时钟会自动与 ChromeOS 的时钟保持同步。因此,您不必自行运行时间保持服务(例如 NTP)。该时钟基于 UTC

从 R75 开始,我们尝试通过 timedatectl 将时区数据同步到容器中。如果此方法无效,我们会回退到导出 TZ 环境变量。

我们目前不会更新 VM 本身的时区详细信息。我们也不会尝试更新任何其他时区设置,因为这些设置在各个发行版中都不标准。因此,在这些环境中,时间可能乍一看是错误的,或者如果使用 TZ 环境变量,时间可能会过时。

如需了解更多技术详情,请参阅 https://crbug.com/829934。这比您想象的要复杂得多!

支持哪些复制和粘贴格式?

目前仅支持 text/plain 内容。我们计划很快添加更多格式(例如 image/pngtext/rtf)。

您可以在 exo/data_source.cc 中查看当前支持的列表。

虽然 X/Wayland 支持任意数量的 MIME 格式,但我们的最终目标是仅支持 Chrome 本身支持的所有格式。如需查看该列表,请参阅 clipboard_constants.cc 文件。

请注意,我们这里仅讨论剪贴板中存储的数据的限制。Wayland 应用仍然可以自由地以任意格式在彼此之间直接传输数据。

能否在虚拟机内部自动读取/写入剪贴板?

目前不支持。

从安全角度来看,我们不希望不受信任的代码静默或自动提取用户复制的任何内容。可能是您的浏览器会话正在复制个人数据或密码。这与网络平台遇到的问题相同。

这与用户手动粘贴数据(例如按 Ctrl+V)不同。这仅与程序化阅读有关。

我们预计这种情况不会永远持续下去。在我们拥有权限模型和界面来管理这些内容后,可以考虑允许用户授予此权限。

如果您使用 xclipX 工具,它们通常具有本地缓冲区 (在 XWayland 中),但不会自动与系统的其余部分同步。

我是否必须管理虚拟机更新?

不对!Termina 虚拟机是一种会自动更新的组件

请注意,虚拟机与容器是分开的。

如何查看 Termina 版本?

由于 Termina 是下载的组件,因此您可以在新标签页中访问 chrome://components,然后查找 cros-termina

您还可以通过 vsh 连接到 VM 并运行 cat /etc/lsb-release

我是否需要管理容器更新?

容器中与 ChromeOS 通信或 ChromeOS 集成所需的 Google 提供的软件包将定期自动更新。这会自动安装所有必需的依赖项。

容器中安装的其他软件包不会自动升级。我们宁愿避免更新可能会破坏已安装程序的软件包。该容器与任何其他 Linux 发行版一样,因此如果您想使用更新的软件,就需要不时更新它。

您可以运行 sudo apt-get update && sudo apt-get dist-upgrade

我可以使用 IPv6 吗?

是的,从 R81 开始。支持双栈和仅限 IPv6 的网络。

ChromeOS 仅支持 SLAAC;如需了解详情,请参阅ChromeOS 上的 IPv6 支持支持页面。

我可以访问第 2 层网络吗?

目前不支持,网络访问权限仅限第 3 层(即 IP)。因此,您将无法进行任何桥接或较低级别的有趣操作。

目前尚不清楚此情况是否会发生变化以及何时会发生变化。使用 Wi-Fi 很难与外部世界建立桥梁,而且许多设备都没有以太网连接。我们可以在容器之间支持第 2 层,但尚不清楚有多少人需要此功能,因此无法确定是否值得投入相关精力。

由 CrOS/Android(在虚拟机/容器外部)设置的 VPN 是否有效?

目前不可以。您可以为 https://crbug.com/834585 加星标,以便及时了解最新动态。

是否支持音频输出?

可以,从 R74(Termina 版本 11707.0.0 及更高版本)开始支持。

如果您在部署音频支持之前设置了容器,则该容器可能未正确配置(因为之前的默认设置是输出到 null 设备)。您可以尝试按以下步骤恢复:

# Make sure the new cros-pulse-config package is installed.
$ sudo apt-get update
$ sudo apt-get dist-upgrade

# Clear out existing pulse settings.
$ rm -rf ~/.config/pulse

# Turn it off & on again via crosh ([Ctrl]+[[Alt]]+[[T]]).
crosh> vmc stop termina

是否支持音频捕获(例如麦克风)?

ChromeOS M84 版本现已支持此功能。如需启用音频捕获,请前往“设置”,然后从左侧导航栏中选择“开发者”。然后,进入“Linux”。您会在该菜单中看到“允许 Linux 使用您的麦克风”选项。

我可以访问硬件(例如 USB/蓝牙/串行)吗?

ChromeOS 现在允许您通过 USB 共享某些设备。如需启用 USB 访问权限,请前往“设置”,然后从左侧导航栏中选择“开发者”。然后,依次进入“Linux”和“USB 偏好设置”。您可以在此处根据具体情况启用 USB 访问权限。

我们的团队正在积极开发此功能,未来将支持更多设备。

我可以运行 Wayland 程序吗?

可以,事实上,我们更推荐使用这些格式!Chrome 本身会大量处理 Wayland 客户端,因此升级后,您更有可能“正常使用”各种功能。

Sommelier可顺畅地提供此支持。

我可以运行 X 程序吗?

可以,不过您可能会遇到一些兼容性问题,而且它可能永远无法像运行传统 X 服务器那样完美。不过,随着更广泛的社区转向 Wayland,这应该足够了。

Sommelier 负责启动 XWayland、充当 WM,以及在 Chrome 和 X 程序之间转换 XWayland 请求。

为什么窗口有时会很小/模糊?

启动器搁架中显示的 Linux 应用应提供使用高密度或低密度的选项。如果您发现分辨率未按预期运行,请右键点击该图标,以显示在高密度和低密度之间切换的功能。

虽然 Chrome 支持高 DPI 显示屏,但许多 Linux 应用不支持。如果程序无法正确支持 DPI 缩放,就会导致效果不佳。

目前,我们会将内置分辨率和 DPI 直接公开给应用。如果它们显示得非常小或模糊不清,则表示它们无法正确支持缩放。您应向相应的上游项目报告这些问题,以便在将来某一天,这些问题能够“正常解决”。

与此同时,Sommelier 会公开一些运行时设置,以便您按程序设置缩放比例,从而解决异常行为。如需了解详情,请参阅 Sommelier 的文档。

如果您应用了全系统缩放或以其他方式更改了默认显示分辨率,我们会尝试缩放应用输出以匹配。这可能会导致模糊不清的结果。您可以调整显示屏的分辨率,也可以通过 Sommelier 调整相关设置(如需了解详情,请参阅上文)。启动器搁架中显示的 Linux 应用应提供使用高密度或低密度的选项。如果您发现分辨率未按预期运行,请右键点击该图标,以显示在高密度和低密度之间切换的功能。

Synergy 是否会正常运行?

Synergy 将无法正常运行(作为客户端或服务器)。它需要捕获并伪造所有窗口的输入(例如鼠标/键盘)。由于我们基于 Wayland 构建,因此根据设计,一个客户端无法访问系统上的任何其他客户端。这是客户端之间的一道坚固的安全边界,因为我们不希望在容器内运行的任意代码能够突破该边界并攻击其他客户端(例如浏览器),以及发送任意按键。

我们不打算在容器中启用此类控制。这并不是说 ChromeOS 中永远不会出现类似 Synergy 的解决方案(例如类似 CRD 的解决方案),只是说该解决方案不会是 Synergy 或容器中的任何其他工具。

您可以运行协同,并可能让它为正在运行的单个窗口传递输入事件,但这就是您能达到的最接近的效果了。

我可以运行 Windows 程序吗?

当然,您可以试试 WINE。不过,兼容性在很大程度上取决于 WINE,因此请不要向我们寻求支持。

我可以运行 macOS 程序吗?

一般不会。您可以尝试各种现有的 Linux 解决方案,但这些解决方案可能存在更多问题。

为何从头开始实现 crosvm(而不是使用 QEMU/kvmtool 等)?

我们对所有这些其他项目都没有任何异议。事实上,它们都很棒,它们的设计也影响了我们。最重要的是,它们的功能超出我们的需求,并且安全模型不如我们自己编写的那么好。虽然 crosvm 无法像其他项目那样实现所有功能,但它只执行我们需要的功能。

如需了解详情,请查看 crosvm 项目。

虚拟机不会拖慢所有操作的速度吗?

与仅在容器中或直接在系统中运行相比,虚拟机确实会增加开销。不过,在我们的测试中,这种开销对用户体验的影响微乎其微,但却能大幅提升系统安全性,因此非常值得。

如需了解详情,请参阅官方 Chromium OS 文档的安全性部分。

为什么要在虚拟机内运行容器?为什么不直接在虚拟机中运行程序?

为了缩短 VM 启动时间,我们需要尽可能精简 Termina。这意味着,我们可以剪掉不需要或不相关的节目/文件。

我们使用 dm-verity,这要求 Termina 映像为只读,以确保安全性,但也意味着我们可以在 VM 实例之间安全地共享该映像。

此外,我们提供的程序/库版本通常比其他发行版更新(因为我们基于 Gentoo 构建),并且使用额外的安全标志进行编译。

允许用户修改虚拟机会阻止无状态映像始终正常运行,否则该映像不会受到用户错误和程序中的 bug 的影响。

总而言之,很难支持运行任意程序,并且会导致系统缺少上述许多所需的属性。将所有内容强制放入容器中可生成更强大的解决方案,并允许用户随意进行实验,而无需担心。

此外,我们还喜欢海龟

是否已处理 Foreshadow(也称为 L1TF / CVE-2018-3646)?

可以。如需了解详情,请参阅我们的公开文档

我可以删除不再需要的容器吗?

当然,您可以随意删除任何内容。不过,目前还没有可帮助您解决此问题的界面或命令。

我可以删除不再需要的虚拟机吗?

当然,您可以随意删除任何内容。您可以使用 vmc destroy 命令手动删除它们。

我可以停用这些功能吗?

管理员可以通过管理控制台控制对容器/虚拟机的访问权限,因此希望限制此权限的企业/教育组织可以这样做。

最初,标准 ChromeOS 设置下有一个“Linux”选项,但长期计划是移除此旋钮,以便按需运行。届时,非受管设备将不再提供此旋钮。

我可以启动其他操作系统,例如 Windows、macOS、Linux、*BSD 等吗?

目前还不行,您只能启动名为 Termina 的自定义 Linux 虚拟机。另请参阅接下来的几个问题。

我可以运行自己的虚拟机/内核吗?

目前,您只能启动使用我们自定义 Linux 内核和配置的 Termina。敬请期待!

我可以运行其他 Linux 发行版吗?

当然!LXD 完整命令行可供使用,并且所含的映像远程服务器提供了许多其他发行版可供选择。不过,我们只使用随附的默认容器进行测试,因此在运行其他发行版时可能会出现问题。

我正在运行(在此处插入发行版),如何获取 {GUI 应用、启动器图标等…}?

SommelierGarcon 二进制文件会绑定装载到每个容器中,因此无需安装或交叉编译。来自 cros-container-guest-tools 的 systemd 单元和配置文件将在 systemd 用户会话中启动这些守护进程。最好运行 loginctl enable-linger <user>,以便这些应用在后台保持运行状态。

我可以运行多少个虚拟机?

您可以根据系统处理能力(RAM/CPU 方面)生成任意数量的进程。它们彼此独立。

我可以运行多少个容器?

您可以根据系统处理能力(RAM/CPU 方面)生成任意数量的进程。每个虚拟机实例都可以托管多个容器。

支持哪些容器格式?

Termina 目前仅直接支持 LXC。我们了解 Kubernetes/Docker/OCI/rkt 等,并希望让它们都易于使用。

在此期间,请参阅上一个问题了解解决方法。