Sposób wylogowania użytkownika z wiersza poleceń w OS X 10.9

31

Chcę wylogować się z systemu Mac OS X z wiersza polecenia. Moja wersja OS X to 10.9. Próbowałem polecenia pkill -KILL -u uid, ale to polecenie nie zadziałało. Czy istnieje polecenie, którego można użyć do wylogowania użytkownika z systemu za pomocą tylko wiersza poleceń, a nie AppleScript ?

prateeak ojha
źródło
co dokładnie nie wyszło?
nohillside
po uruchomieniu komendy pkill -KILL -u uid system pokazuje mi szary ekran, a po długim oczekiwaniu system pokazuje okno wymuszonego wyjścia bez uruchamiania aplikacji
prateeak ojha

Odpowiedzi:

32

sudo launchctl bootout gui/$(id -u <username>)
lub
sudo launchctl bootout user/$(id -u <username>)

Zamień nazwę użytkownika na nazwę użytkownika docelowego lub zamień całą podpowłokę na identyfikator użytkownika. To mówi launchctl, aby porzucił sesję logowania użytkownika (GUI odnosi się konkretnie do tymczasowej sesji logowania użytkownika, użytkownik określa procesy użytkowników w tle).

Możesz się wylogować bez sudotestowania.

Pamiętaj, że będzie to działać TYLKO na systemie MacOS 10.11.x lub nowszym ( launchctl helpwięcej informacji)

Iain Henderson
źródło
1
Po prostu ponownie przeczytam twoje pytanie i przepraszam, że to ci nie pomoże, ale pojawi się w wynikach wyszukiwania Google.
Iain Henderson
29

Aby wylogować się wyłącznie z terminala (lub zdalnej sesji ssh), po prostu zabij proces loginwindow:

sudo pkill loginwindow

Możesz się spodobać i określić użytkownika, jeśli wielu użytkowników korzysta z procesu logowania, ale jest to łatwy, jednorazowy krok, bez szybkiego zakończenia sesji graficznej użytkownika.

bmike
źródło
16

W przeszłości działało to dla mnie:

Wyloguj się (z potwierdzeniem)

osascript -e 'tell app "System Events" to log out'

Wyloguj się bezpośrednio (bez potwierdzenia)

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

lub

osascript -e 'tell application "loginwindow" to  «event aevtrlgo»'

W ten sposób każda działająca aplikacja zostanie zauważona i może zakończyć działanie w bezpieczny sposób.

nohillside
źródło
osascript -e 'powiedz aplikacji „System Events”, aby «zdarzenie aevtrlgo»' pokazywało błąd: „<” nie może przejść do tego.
prateeak ojha
Hmm, działa dobrze dla mnie. Czy możesz spróbować ze skryptu powłoki zamiast z wiersza poleceń, może powłoka robi tutaj dziwne rzeczy.
nohillside
Zgaduję, że OP ma jakiś inny problem i normalne polecenia są zawieszane na podstawie komentarzy tutaj i opisu pytania.
bmike
5
Zauważ, że «≠ <<
mlainz
2

Jeśli masz wielu użytkowników ...

Znajdź identyfikator procesu za pomocą:

ps aux|grep login

Następnie zabij ten proces i wylogowałeś się z sesji. Ale pozostało jeszcze wiele procesów.

Skontaktuj się z pstree, abyś wiedział, który proces zakończyć.

Hugo van der Kooij
źródło
2

To załatwia sprawę.

sudo -s

Aby uzyskać uprawnienia roota i monit #, następnie zabij procesy.

killall -vu username -HUP

A jeśli nie wszystko zniknęło. Nuke em! Ostrzeżenie obowiązkowe - zabijanie rzeczy, ponieważ root nie ma cofania i „nie jesteś pewien, że chcesz przerwać ten proces bez zapisywania plików, w tym krytycznych dla systemu baz danych, które w rzadkich przypadkach mogą uniemożliwić uruchomienie komputera”. wpisz ostrzeżenia.

killall -vu username -9
tovare
źródło
1
Nie musisz wchodzić w powłokę roota - po prostu trzymaj sudo przed komendami killall
user151019,
1

Przyjemnym narzędziem, które można dodać do terminala, jest polecenie „wyloguj się”, którego można używać w następujący sposób:

logout UserName

Oto jak:

  1. Edytuj swój .bash_profile

    nano ~/.bash_profile

  2. Dodaj ten wiersz:

    logout() {sudo launchctl bootout user/$(id -u "$1")}

  3. Zapisz plik naciskając ctrl+x

  4. Uruchom ponownie terminal

Jesteś gotowy do drogi;)

Kappe
źródło
Musiałem wyłamać ciało na nową linię, a następnie założyć zamykającą kręconą klamrę.
bmauter,
@bmauter nie dla mnie, w sugerowanej formie działa idealnie.
Kappe,
-3

jeśli jesteś zalogowany za pomocą ssh na zdalnym komputerze, możesz się wylogować, wpisując „exit”:

[host:~user]$ exit
holbein
źródło