在具有默认桌面的 ubuntu 18.04 中,注销/登录的行为发生了变化:
以前在 Ubuntu 系统上,当我发现需要将我的用户 ID 添加到某个组时,只需
sudo adduser ludwig docker # adds me to group docker
然后我必须注销并再次登录才能使群组变更生效。
我注意到在 Ubuntu 18.04 中,添加组并注销并重新登录后,有效组列表仍然没有变化。
作为一种解决方法,我重新启动了系统,但这很不方便(需要在 grub 中做出正确的选择并重新输入磁盘加密密码)。
- 为什么现在的行为是这样的?
- 除了重启之外我还能做其他什么吗?
(我知道我可以通过 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。这不是全局的。