是否有任何文档表明systemd
将安装hidepid=2
选项设置为/proc
procfs
会导致问题?
启动 Gnome wayland 会话失败之前的错误消息部分是:
systemd[330]: Started D-Bus User Message Bus.
gnome-session[339]: gnome-session-binary[339]: WARNING: Could not get session id for session. Check that logind is properly installed and pam_systemd is getting use
gnome-session-binary[339]: WARNING: Could not get session id for session. Check that logind is properly installed and pam_systemd is getting used at login.
gnome-session[339]: gnome-session-binary[339]: WARNING: Could not parse desktop file orca-autostart.desktop or it references a not found TryExec binary
gnome-session-binary[339]: WARNING: Could not parse desktop file orca-autostart.desktop or it references a not found TryExec binary
gnome-shell[346]: Can't initialize KMS backend: Could not get session ID: No such file or directory
gnome-session[339]: gnome-session-binary[339]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1
gnome-session-binary[339]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1
gnome-session-binary[339]: Unrecoverable failure in required component org.gnome.Shell.desktop
gdm[296]: GdmDisplay: display lasted 0.735810 seconds
我猜想会话 ID 是通过 PID 以某种方式获取的,这对 gnome-session 来说是不可见的。
该问题发生在 Arch Linux 发行版上。但我确实认为这与上游问题有关。似乎正如所讨论的Gentoo 的 Wiki“没有 systemd 的 GNOME”特别是 Gnome 的 wayland 会话与 systemd 紧密结合。
systemd
它似乎是s的组合logind
,hidepid=2
procfs
挂载选项与 Gnome wayland 会话相互作用,比 Gnome Xorg 会话更依赖于登录。
我还遵循了 @sourcejedi 答案中给出的建议,并对登录进行了 /etc/fstab 豁免。所以我的这是我的条目/etc/fstab
proc /proc proc nosuid,nodev,noexec,relatime,hidepid=2,gid=26 0 0
其中 26 是添加了 logind 和 polkitd 组的 proc 组的 GID。然而这并没有解决问题。
如图所示https://www.freedesktop.org/wiki/Software/systemd/logind/
接口 org.freedesktop.login1.Manager { 方法: GetSession(在 s session_id 中, 输出 o object_path); GetSessionByPID(在你的pid中, 输出 o object_path);
似乎可以使用 PID 来查询 SessionID,一旦hidepid=2
使用选项,这自然可能会产生问题。
答案1
https://wiki.archlinux.org/index.php/Security#hidepid
为了使 Xorg 工作,需要为 systemd-logind 添加例外:
/etc/systemd/system/systemd-logind.service.d/hidepid.conf [Service] SupplementaryGroups=proc
编辑:本文档没有解释为什么有必要。放眼上游systemd-logind.service,服务单元不作为单独的用户运行。 (hidepid一般被描述为不适用于root
)。然而从代码,我认为hidepid实际上使用了一个能力CAP_SYS_PTRACE。并且systemd-logind.service
将自身限制为一组功能,其中不包括 CAP_SYS_PTRACE。
无论如何,这意味着 Arch Linux 的 systemd PID 1 能够使用 hidepid 正常启动。就我个人而言,即使没有 Xorg,我也会担心是否需要这个“例外”,以防其他软件使用相同的 systemd-logind 功能。