Möglichkeit zum Abmelden eines Benutzers über die Befehlszeile in OS X 10.9


31

Ich möchte meinen Mac OS X über die Befehlszeile abmelden. Meine OS X-Version ist 10.9. Ich habe einen Befehl ausprobiert pkill -KILL -u uid, aber dieser Befehl hat nicht funktioniert. Gibt es einen Befehl, mit dem ein Benutzer nur über die Befehlszeile vom System abgemeldet werden kann, nicht über AppleScript ?


was genau hat nicht geklappt?
Nohillside

Wenn Sie den Befehl pkill -KILL -u uid ausführen, wird ein grauer Bildschirm angezeigt. Wenn Sie lange warten, wird das Force-Quit-Fenster ohne ausgeführte Anwendung
angezeigt

Antworten:


32

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

Ersetzen Sie den Benutzernamen durch den Benutzernamen des Zielbenutzers oder ersetzen Sie die gesamte Subshell durch die Benutzer-ID des Benutzers. Dadurch wird launchctl angewiesen, die Anmeldesitzung des Benutzers abzubrechen (gui bezieht sich speziell auf die temporäre Anmeldesitzung des Benutzers, der Benutzer gibt die Hintergrundprozesse des Benutzers an).

Sie können sich ausloggen, ohne dies sudozu testen.

Beachten Sie, dass dies NUR unter macOS 10.11.x oder neuer funktioniert (siehe launchctl helpfür mehr)


1
Ich habe Ihre Frage NUR noch einmal gelesen und es tut mir leid, dass Ihnen das nicht hilft, aber es wird in den Google-Suchergebnissen angezeigt.
Iain Henderson

29

Um sich nur vom Terminal (oder einer Remote-SSH-Sitzung) abzumelden, beenden Sie einfach den Anmeldefensterprozess:

sudo pkill loginwindow

Sie können sich vorstellen, den Benutzer anzugeben, wenn mehrere Benutzer ein Anmeldefenster verwenden. Dies ist jedoch ein einfacher Vorgang, bei dem die grafische Sitzung eines Benutzers nicht sofort beendet wird.


16

Das hat bei mir in der Vergangenheit funktioniert:

Abmelden (mit Bestätigung)

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

Direkt ausloggen (keine Bestätigung)

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

oder

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

Auf diese Weise wird jede laufende Anwendung bemerkt und kann auf sichere Weise beendet werden.


osascript -e 'sage der App "System Events" zu "event aevtrlgo"' und zeige einen Fehler: "<" kann nicht danach gehen.
Prateeak Ojha

Hmm, funktioniert bei mir gut. Können Sie es mit einem Shell-Skript anstelle der Befehlszeile versuchen, macht die Shell hier möglicherweise einige seltsame Dinge.
Nohillside

Ich vermute, das OP hat ein anderes Problem und die normalen Befehle werden aus den Kommentaren hier und der Fragenbeschreibung gestrichen.
bmike

5
Beachten Sie, dass «≠ <<
mlainz

2

Wenn Sie mehrere Benutzer haben ...

Finden Sie die Prozess-ID mit:

ps aux|grep login

Beenden Sie dann diesen Prozess und Sie haben diese Sitzung abgemeldet. Aber es gibt noch viele Prozesse.

Erkundigen Sie sich bei, pstreedamit Sie wissen, welcher Prozess beendet werden soll.


2

Das macht den Trick für mich.

sudo -s

Um einige Root-Rechte und die Eingabeaufforderung # abzurufen, müssen Sie die Prozesse beenden.

killall -vu username -HUP

Und wenn nicht alles weg ist. Nuke em! Obligatorische Warnung - Das Beenden von Dingen als root hat kein Rückgängigmachen und kein "Sind Sie sicher, dass Sie diesen Prozess unterbrechen möchten, ohne Ihre Dateien zu speichern, einschließlich systemkritischer Datenbanken, die den Computer in seltenen Fällen nicht mehr booten können." Geben Sie Warnungen ein.

killall -vu username -9

1
Keine Notwendigkeit, sich in die Root-Shell zu
begeben

1

Ein nützliches Dienstprogramm, das Sie zu Ihrem Terminal hinzufügen können, ist der Befehl "logout" (Abmelden), der wie folgt verwendet werden kann:

logout UserName

Hier das How to:

  1. Bearbeiten Sie Ihr .bash_profile

    nano ~/.bash_profile

  2. Diese Zeile hinzufügen:

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

  3. Speichern Sie die Datei mit ctrl+x

  4. Starten Sie das Terminal neu

Sie sind bereit zu gehen;)


Ich musste den Körper auf eine neue Linie ausbrechen und danach auch die schließende geschweifte Klammer setzen.
bmauter

@bmauter nicht für mich, in der vorgeschlagenen form klappt das einwandfrei.
Kappe

-3

Wenn Sie mit ssh an einem Remote-Computer angemeldet sind, können Sie sich abmelden, indem Sie einfach "exit" eingeben:

[host:~user]$ exit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.