Ich möchte mein Mac OS X von der Befehlszeile aus abmelden. Meine OS X-Version ist 10.9. Ich habe es mit command versucht 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 mit AppleScript ?
sudo launchctl bootout gui/$(id -u <username>)
oder
sudo launchctl bootout user/$(id -u <username>)
Ersetzen Sie username durch den Benutzernamen des Zielbenutzers oder ersetzen Sie die gesamte Subshell durch die UID des Benutzers. Dies weist launchctl an, die Anmeldesitzung des Benutzers herunterzufahren (gui bezieht sich speziell auf die temporäre Anmeldesitzung des Benutzers, der Benutzer gibt die Hintergrundprozesse des Benutzers an).
sudo
Um dies zu testen, können Sie sich ohne das abmelden.
Beachten Sie, dass dies NUR auf macOS 10.11.x oder neuer funktioniert (siehe launchctl help
für mehr)
Um sich nur vom Terminal (oder einer Remote-SSH-Sitzung) abzumelden, beenden Sie einfach den Prozess loginwindow:
sudo pkill loginwindow
Sie könnten sich etwas einfallen lassen und den Benutzer spezifizieren, wenn mehrere Benutzer einen Anmeldefensterprozess haben, aber dies ist ein einfacher One-Shot, kein sofortiger Weg, um die grafische Sitzung eines Benutzers zu beenden.
Das hat bei mir in der Vergangenheit funktioniert:
Abmelden (mit Bestätigung)
osascript -e 'tell app "System Events" to log out'
Direkt abmelden (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 sicher beendet werden.
Ein nettes Dienstprogramm, das Sie Ihrem Terminal hinzufügen können, ist der Befehl "Logout", der wie folgt verwendet werden kann:
logout UserName
Hier die Anleitung:
Bearbeiten Sie Ihr .bash_profile
nano ~/.bash_profile
Fügen Sie diese Zeile hinzu:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Speichern Sie die Datei mitctrl+x
Starten Sie das Terminal neu
Du bist bereit zu gehen ;)
logout() {sudo launchctl bootout user/$(id -u "$1")}
Ich erhalte die folgende Fehlermeldung, wenn ich versuche, sie auszuführen. -bash: logout: FIRSTNAME: numeric argument required
Ich bin verwirrt. Der Befehl funktioniert gut, wenn er direkt im Terminal verwendet wird, aber aus irgendeinem Grund spuckt dies als Bash-Profil oder Bash-Skript diesen Fehler immer wieder aus. Ich frage mich, ob es damit zu tun hat, dass der Benutzername, mit dem ich testen möchte, ein Leerzeichen zwischen Vor- und Nachname enthält. Anscheinend wird der Nachname als Argument interpretiert, der Eintrag in .bash_profile enthält jedoch doppelte Anführungszeichen.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.
Überprüfen Sie mit pstree
, damit Sie wissen, welcher Prozess beendet werden muss.
Das macht den Trick für mich.
sudo -s
Um einige Root-Rechte und die #-Eingabeaufforderung zu erhalten, beenden Sie die Prozesse.
killall -vu username -HUP
Und wenn noch nicht alles weg ist. Nuke sie! Obligatorische Warnung - Das Beenden von Dingen als Root hat kein Rückgängigmachen und kein "Sind Sie sicher, dass Sie diesen Vorgang unterbrechen möchten, ohne Ihre Dateien zu speichern, einschließlich systemkritischer Datenbanken, die den Computer in seltenen Fällen nicht mehr booten können?" Warnungen eingeben.
killall -vu username -9
Eine extreme Möglichkeit, die Benutzersitzung zu beenden, besteht darin, einen Neustart zu erzwingen:
sudo shutdown -r now
Dies funktioniert gut, wenn Sie versuchen, das System zu aktualisieren.
Das macht den Trick für mich
sudo -su Benutzer
und für root
sudo -su Wurzel
Wenn Sie mit ssh bei einem Remote-Computer angemeldet sind, können Sie sich abmelden, indem Sie einfach "exit" eingeben:
[host:~user]$ exit
kein Hang
prateeak ojha