Gentoo 配置指南:基于 systemd 的 GNOME
想在 Gentoo 上完美配置 GNOME 虽然不难,但需要经验。只要成功配置过一遍后就可能会觉得是小菜一碟,但是第一次操作的时候很容易遇到重重坎坷。虽然根据 Gentoo Wiki 上的 GNOME 指南可以配置一个最基础且能用的 GNOME 环境,但是想要完善 GNOME 配置的话,就还需要执行许多指南中没提到的额外步骤。比如,如果不进行额外配置的话,修改网络连接选项时就需要输入用户密码以验证权限,在 Wayland 会话中也无法从包括 Chrome 在内的浏览器共享屏幕内容。而且,该指南的中文翻译质量也有些堪忧。
因此,在这篇文章中,我将介绍让 Gentoo 上的 GNOME 更加完美地运行的一些关键步骤。其中,一些比较基础的步骤在 Gentoo GNOME 指南中已经提到,而剩下的指南中未提到的步骤则会提升用户体验。
此文章的步骤适用于基于 systemd 的系统,不适用于基于 OpenRC 的系统。
选择配置文件并安装 GNOME 软件包
在 Gentoo 手册的系统安装步骤中,有一步是选择配置文件,想基于 systemd 安装 GNOME 的用户就会选择 GNOME systemd 配置文件。这里有一点需要留意,那就是 GNOME 并不会在选择了这个配置文件后自动安装。这个配置文件唯一所做的就是设置一些 USE 标志和其它 Portage 选项,以允许 GNOME 的安装和运行。换言之,选定了 GNOME 配置文件后,用户还需要使用 emerge
手动安装 GNOME 组件。
# emerge --ask gnome-base/gnome
启用 GNOME 显示管理器的 systemd 单元
如果想让 GNOME 开机自启动的话,就需要手动启用 GNOME 显示管理器(GDM)的 systemd 单元。否则,开机后系统还是会显示纯文本登录界面。
# systemctl enable gdm.service
如果 gdm.service
已被启用了,但是重启系统后,GNOME 登录界面依然不显示,那么请尝试将 systemd 的默认目标明确设定为 graphical.target
:
# systemctl set-default graphical.target
启用更多 systemd 单元供 GNOME 设置使用
如果想使用 GNOME 设置应用(又称为 gnome-control-center
)调整电脑的设置,那么就需要再启用一些额外的 systemd 单元。
- 如果想从 GNOME 设置中管理网络连接,请启用
NetworkManager.service
。这样一来,NetworkManager 就会在开机后运行,管理系统网络连接。如果systemd-networkd
也被启用了的话,那么建议禁用systemd-networkd.service
以防止这两个网络管理服务产生冲突。 - 如果想访问蓝牙设置,请启用
bluetooth.service
。 - 如果想启用打印机设置,请启用
cups.service
。
# systemctl enable NetworkManager.service
# systemctl disable systemd-networkd.service
# systemctl enable bluetooth.service
# systemctl enable cups.service
允许在不进行验证的情况下修改网络设置
在默认情况下,通过 GNOME 设置调整网络设置是需要超级用户权限的,所以当用户连接到新 Wi-Fi 网络或者修改网络配置时,可能会看到下面的界面,被要求进行验证:
若要允许所有用户帐户修改网络设置,可在 /etc/polkit-1/rules.d
下创建一个 *.rules
文件,然后在该文件中添加下列规则:
/* /etc/polkit-1/rules.d/10-networkmanager.rules */
// 允许所有用户通过 NetworkManager 管理网络连接
polkit.addRule(function (action, subject) {
if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" &&
subject.local) {
return polkit.Result.YES;
}
});
然后,重启 systemd 单元 polkit.service
以应用新规则:
# systemctl restart polkit.service
允许 wheel
用户组中的用户在 GNOME 中使用自己的帐户凭据进行验证
wheel
用户组 经常被用作 Unix 系统上的管理员组。按照惯例,在配置 sudo
这类工具时,经常会授予 wheel
组中的用户以超级用户身份运行命令的权限,并且允许用户使用自己的密码进行验证,而非 root
帐户的密码。
当 GNOME 需要以超级用户权限执行任务时(例如,挂载内部硬盘中的分区),会弹出一个对话框要求用户进行验证。但是,如果配置不到位,验证过程要求输入的就是 root
帐户的凭据,和 sudo
完全不同。
如果想实现 sudo
风格的验证,让用户输入当前帐户的密码的话,只需同样地在 /etc/polkit-1/rules.d
下创建一个 *.rules
文件,然后添加如下规则:
/* /etc/polkit-1/rules.d/49-wheel.rules */
// 允许 'wheel' 组中的用户在 GNOME 验证提示中使用自己的密码,而非 root 密码
polkit.addAdminRule(function (action, subject) {
return ["unix-group:wheel"];
});
重启 systemd 单元 polkit.service
后,wheel
组中的用户就可以使用自己的凭据完成验证流程了。
启用浏览器中基于 PipeWire 的 WebRTC 屏幕共享
不少用户都遇到过在使用 GNOME 默认的 Wayland 显示服务器协议时,如何在浏览器中启用基于 WebRTC 的屏幕共享功能的问题。这个问题的解决方法倒是不难,那就是确保系统上安装了 xdg-desktop-portal-gtk
。
在 Gentoo 上,只要安装了 gnome-base/gnome-shell
(即 GNOME 壳层),那么 sys-apps/xdg-desktop-portal-gtk
也会被作为间接依赖一同安装。但在此基础上,还需要一些额外的配置才能完全启用 WebRTC 屏幕共享:
-
需要在全局范围内启用
screencast
USE 标志,以启用软件包对 PipeWire 屏幕捕获功能的支持。 -
PipeWire 的 systemd 套接字
pipewire.socket
需要手动启用,因为其默认是被禁用的。
详细步骤如下:
-
在全局范围声明
screencast
USE 标志。Gentoo 手册中记载了一种修改/etc/portage/make.conf
的方法;除此之外,还有一种方法,那就是在/etc/portage/package.use
中声明该 USE 标志,如下所示:# /etc/portage/package.use # 启用 PipeWire 屏幕捕获支持 */* screencast
-
使用新的 USE 标志设置,重新构建已安装的软件包:
# emerge --ask --newuse --deep @world
-
启用 PipeWire 的 systemd 套接字:
# systemctl --global enable pipewire.socket
-
重启系统。
ArchWiki 称,FireFox 默认已经启用了 WebRTC PipeWire 支持,而在 Chromium/Chrome 上则还需要启用以下实验性功能:
chrome://flags/#enable-webrtc-pipewire-capturer
如果想测试配置是否成功,可以在这个测试页面中点击“Screen capture”按钮。在弹出的对话框中选择共享源,然后就应该能在网页上看到屏幕共享的内容了,并且顶栏中还会显示一个橙色的屏幕共享图标。
限制
- Chrome 中的屏幕共享没有声音。