После добавления группы выхода из системы + логин не хватит в 18.04?

18

В Ubuntu 18.04 с рабочим столом по умолчанию поведение выхода из системы / входа в систему изменилось:

Ранее в системе Ubuntu, когда я обнаружил, что мне нужно добавить свой идентификатор пользователя в какую-либо группу, было достаточно

sudo adduser ludwig docker # adds me to group docker

а затем мне пришлось выйти из системы и войти снова, чтобы изменения в группе вступили в силу.

Я замечаю, что в Ubuntu 18.04 после добавления группы, выхода из системы и возврата список действующих групп остается неизменным.

В качестве обходного пути я перезагрузил систему, что неудобно (требует правильного выбора в grub и повторного ввода пароля шифрования диска).

  1. Почему поведение сейчас так?
  2. Могу ли я сделать что-то еще, кроме перезагрузки?

(Я знаю, что могу подключиться по ssh к localhost и получить правильные группы только в сеансе ssh. Это также слишком неудобно.)

Людвиг Шульце
источник
Я протестировал sudo usermod -a -G group userв 18.04 и вышел из системы, и это сработало.
Терранс
также с рабочим столом по умолчанию?
Людвиг Шульце
Ты имеешь в виду разницу между GNOME, Xubuntu, Kubuntu и т. Д.? Если вы имеете в виду, что GNOME используется по умолчанию, то нет, я не запускаю GNOME. Но команда должна быть одинаковой независимо от среды рабочего стола, так как это основные пароли / группы, которые должны быть одинаковыми для всех DE.
Терранс
Хорошо, я только что установил GNOME для тестирования, и sudo usermod -a -G groupname usernameтам тоже работал нормально. Выйти из системы и вернуться обратно, и моя перемена была там.
Терренс
Понимаю. @Terrance вы не используете рабочий стол по умолчанию. Рабочий стол по умолчанию называется «Ubuntu». Я знаю, что он основан на gnome, но я понимаю, что "gnome" - это еще один рабочий стол. «Убунту» было изменено, чтобы напоминать единство.
Людвиг Шульце

Ответы:

8

Команда loginctl terminate-user <user>сработала для меня. (Замените <user>на свое имя пользователя). Вы, вероятно, не должны запускать это при входе в систему, поскольку это убьет все ваши процессы.

iczero
источник
подтвердил работу над Ubuntu 18.04. Гораздо проще, чем ps & grep!
AQD
Согласен, это короче, чем мое собственное решение. Это также помогает в Ubuntu 19.04. Проголосовал и принял вместо моего собственного решения.
Людвиг Шульце
7

При «выходе» из рабочего стола по умолчанию в 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на ваше имя пользователя. Это убивает все процессы, которые принадлежат вам. Используйте только тогда, когда вы уверены, что все ваши данные сохранены во всех открытых программах.

Людвиг Шульце
источник
Это была моя проблема. Но процессы не уходили после выхода из системы и ожидания. Мне пришлось убить процесс "systemd --user" и запустить "sudo systemctl daemon-reexec". А также уничтожить все процессы dbus, перезапустить винты systemd до dbus. Необходимо перезагрузить сетевой менеджер тоже. "systemctl restart network-manager" Может быть, перезапустить все, что зависит от dbus / systemd
niknah
@niknah О, это плохо. Похоже, было бы проще просто перезагрузиться в вашем случае. Спасибо, что сообщили всем, что это может быть сложнее.
Людвиг Шульце
@niknah Я столкнулся с той же проблемой, что и ты сегодня. После выхода из системы и ожидания некоторые процессы просто не могут выйти. Я нашел обходной путь и обновлю этот ответ.
Людвиг Шульце
2

Обходной путь в текущей оболочке - запустить «su», чтобы получить новую группу без перезагрузки.

Как я уже сказал, этот трюк должен быть применен к каждой оболочке. Это не глобально.

Майкл Опденакер
источник
Это можно использовать для исправления устройств, не распознающих adb, после добавления пользователя в adbusers aka sudo usermod -a -G adbusers $USER. Тогда вы можете сделать su $USERи sudo adb kill-server && adb start-serverисправить проблему
xdevs23