添加群组后,18.04中logout+login还不够吗?

添加群组后,18.04中logout+login还不够吗?

在具有默认桌面的 ubuntu 18.04 中,注销/登录的行为发生了变化:

以前在 Ubuntu 系统上,当我发现需要将我的用户 ID 添加到某个组时,只需

sudo adduser ludwig docker # adds me to group docker

然后我必须注销并再次登录才能使群组变更生效。

我注意到在 Ubuntu 18.04 中,添加组并注销并重新登录后,有效组列表仍然没有变化。

作为一种解决方法,我重新启动了系统,但这很不方便(需要在 grub 中做出正确的选择并重新输入磁盘加密密码)。

  1. 为什么现在的行为是这样的?
  2. 除了重启之外我还能做其他什么吗?

(我知道我可以通过 ssh 进入本地主机并仅在 ssh 会话中获取正确的组。这也太不方便了。)

答案1

这个命令loginctl terminate-user $USER对我有用。不过,您可能不应该在登录时运行此命令,因为它会终止所有进程。

答案2

在 ubuntu 18.04 中“注销”默认桌面时,某些用户的进程不会立即终止,但仍会停留在附近。这些进程如下(由另一个用户观察到):

$ ps axu | grep ^ludwig
ludwig    26508  0.3  0.2  77052  8308 ?        Ss   23:32   0:00 /lib/systemd/systemd --user
ludwig    26509  0.0  0.0 261776  2968 ?        S    23:32   0:00 (sd-pam)
ludwig    26691  0.2  0.3 381288 12204 ?        S<l  23:32   0:00 /usr/bin/pulseaudio --start --log-target=syslog
ludwig    27352  0.0  0.0  49796  3756 ?        Ss   23:33   0:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only

在这些进程自动退出之前重新登录时,不会创建新的登录会话,但会重用旧登录会话。这就是为什么新组成员身份不可见的原因,它仍然是相同的旧登录会话。

避免重新启动的一种解决方法是在注销后等待约 20 秒,然后再重新登录。进程会在注销后 10 到 20 秒之间退出。

编辑:正如下面的评论中所述,有时即使等待,拖延的进程也不会停止,并且重新登录后,组成员身份尚未更新。我发现在这种情况下,

ps axu | grep ^ludwig | awk '{print $2}' | xargs kill -9

替换ludwig为您的用户名。这将终止属于您的所有进程。仅当您确定已保存所有打开的程序中的所有数据时才使用。

答案3

解决方法在当前 shell 中运行“su”即可获得新组,而无需重新启动。

正如我所说,这个技巧必须应用于每个 shell。这不是全局的。

相关内容