Po dodaniu grupy wylogowanie + logowanie nie wystarczy w 18.04?

18

W Ubuntu 18.04 z domyślnym pulpitem zmieniło się zachowanie wylogowania / logowania:

Wcześniej w systemie Ubuntu, kiedy stwierdziłem, że muszę dodać mój identyfikator użytkownika do jakiejś grupy, wystarczyło

sudo adduser ludwig docker # adds me to group docker

a potem musiałem się wylogować i zalogować ponownie, aby zmiana grupy była skuteczna.

Zauważam, że w Ubuntu 18.04, po dodaniu grupy, wylogowaniu i ponownym zalogowaniu, lista skutecznych grup pozostaje niezmieniona.

W celu obejścia tego problemu ponownie uruchomiłem system, co jest niewygodne (wymaga dokonania właściwego wyboru w GRUB-ie i ponownego wprowadzenia hasła szyfrowania dysku).

  1. Dlaczego takie zachowanie jest teraz takie?
  2. Czy mogę zrobić coś innego niż ponowne uruchomienie?

(Wiem, że mogę ssh do localhost i uzyskać prawidłowe grupy tylko w sesji ssh. Jest to również zbyt niewygodne).

Ludwig Schulze
źródło
Testowałem sudo usermod -a -G group userw 18.04, wylogowałem się i zalogowałem ponownie i zadziałało.
Terrance
również z domyślnym pulpitem?
Ludwig Schulze
Masz na myśli różnicę między GNOME, Xubuntu, Kubuntu itp.? Jeśli masz na myśli, że GNOME jest domyślny, to nie, nie uruchamiam GNOME. Ale polecenie powinno być takie samo bez względu na środowisko pulpitu, ponieważ jest to podstawowe hasło / grupa rzeczy, które powinny być takie same we wszystkich DE.
Terrance
OK, właśnie zainstalowałem GNOME do testowania i sudo usermod -a -G groupname usernametam też działałem dobrze. Wylogowałem się i wróciłem, a moja zmiana już tam była.
Terrance
Widzę. @Terrance nie używasz domyślnego pulpitu. Domyślny pulpit nosi nazwę „ubuntu”. Wiem, że opiera się na gnome, ale rozumiem, że „gnome” to kolejny pulpit. „ubuntu” zostało zmienione, aby przypominało jedność.
Ludwig Schulze

Odpowiedzi:

8

Komenda loginctl terminate-user <user>działała dla mnie. (Zamień na <user>swoją nazwę użytkownika) Prawdopodobnie nie powinieneś uruchamiać tego po zalogowaniu, ponieważ spowoduje to zabicie wszystkich twoich procesów.

iczero
źródło
potwierdzone działanie na Ubuntu 18.04. O wiele łatwiej niż ps & grep!
AqD
Zgadzam się, że jest to krótsze do napisania niż moje własne rozwiązanie. Pomaga także w Ubuntu 19.04. Głosowałem i zaakceptowałem zamiast własnego rozwiązania.
Ludwig Schulze
7

Podczas „wylogowywania” się z domyślnego pulpitu w Ubuntu 18.04, niektóre procesy użytkownika nie są natychmiast kończone, ale pozostają w tyle. Są to (obserwowane przez innego użytkownika):

$ 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

Podczas ponownego logowania, zanim te procesy zakończą się dobrowolnie, nie jest tworzona nowa sesja logowania, ale stara jest ponownie używana. To jest powód, dla którego nowe członkostwo w grupie nie jest widoczne, to wciąż ta sama stara sesja logowania.

Obejściem problemu, aby uniknąć ponownego uruchomienia, jest odczekanie ~ 20 sekund po wylogowaniu, a dopiero potem ponowne zalogowanie. Procesy wychodzą gdzieś między 10 a 20 sekund po wylogowaniu.

Edycja : Jak podano w komentarzach poniżej, czasami procesy przedłużające się nie kończą się nawet podczas oczekiwania, a po ponownym zalogowaniu członkostwo w grupie nie zostało zaktualizowane. Odkryłem, że w tym przypadku to pomaga

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

Zamień na ludwigswoją nazwę użytkownika. To zabija wszystkie procesy, które należą do ciebie. Używaj tylko wtedy, gdy masz pewność, że masz zapisane wszystkie dane we wszystkich otwartych programach.

Ludwig Schulze
źródło
To był mój problem. Ale procesy nie zniknęły po wylogowaniu i czekaniu. Musiałem zabić proces „systemd --user” i uruchomić „sudo systemctl daemon-reexec”. A także zabij wszystkie procesy dbus, powodując ponowne uruchomienie usystematyzowanych dbus. Trzeba też zrestartować menedżera sieci. „systemctl restart network-manager” Może zrestartuj wszystko, co zależy od dbus / systemd
niknah
@niknah Oh to źle. Wygląda na to, że łatwiej byłoby po prostu zrestartować komputer w twoim przypadku. Dziękujemy za poinformowanie wszystkich, że może być trudniej.
Ludwig Schulze
@niknah Natknąłem się na ten sam problem, co dzisiaj. Po wylogowaniu i odczekaniu niektóre procesy po prostu się nie zamykają. Znalazłem obejście i zaktualizuję tę odpowiedź.
Ludwig Schulze
2

Obejściem w bieżącej powłoce jest uruchomienie polecenia „su”, aby mieć nową grupę bez konieczności ponownego uruchamiania.

Jak powiedziałem, ta sztuczka musi być zastosowana do każdej powłoki. To nie jest globalne.

Michael Opdenacker
źródło
Można tego użyć do naprawienia rozpoznawania urządzeń adb po dodaniu użytkownika do adbusers aka sudo usermod -a -G adbusers $USER. Następnie możesz to zrobić su $USERi sudo adb kill-server && adb start-servernaprawić problem
xdevs23,