为什么需要重新启动 Linux 系统才能使组成员身份更改生效?我的意思是,为什么注销并重新登录还不够。用户会话管理器将重新读取组文件,仅此而已。这种方法有什么问题?
答案1
如果您查看进程树,您可能会看到您的(图形)会话的很大一部分是间接启动的,作为子进程,其下systemd --user
充当会话管理器,重要的是,它不是您的登录会话的一部分——整个管理器在您登录时作为系统服务间接启动,然后在您注销时停止。
但更重要的是:
每个 UID 只有一个此管理器实例,在所有会话中共享,因此如果您仍有任何其他(控制台、ssh)会话,则从图形会话中注销是不够的;只有当用户根本没有更多会话时它才会停止。
在最近的版本中,所有会话结束后,管理器停止前会经过一段刻意的延迟。您可能需要等待一分钟才能再次登录。
同一个管理器通常用于运行实际的用户级服务,因此它甚至可以配置为在启动时启动并且永不退出。如果您
loginctl enable-linger
以前这样做过(检查/var/lib/systemd/linger
您是否这样做过),那么管理器即使在注销后仍会继续存在 - 直到手动停止systemctl --user exit
或直到您重新启动。
(请注意,通常称为“会话管理器”的组件不是读取你的群组成员身份。这是由开始会话管理器 – 例如通过 GDM 进行图形登录。
答案2
简短的回答是,您不需要重新启动来更新组成员身份,但是在成员身份更改之前该帐户启动的任何进程都需要重新启动。
这将包括任何当前打开的登录会话,以及(取决于您的配置)您的图形桌面服务。