Ich möchte so etwas wie "sleep 3600; logout" ausführen, aber der Befehl logout bash schließt nur das aktuelle Terminal. Wie schließe ich die gesamte Mac OS X-Sitzung?
Ich möchte so etwas wie "sleep 3600; logout" ausführen, aber der Befehl logout bash schließt nur das aktuelle Terminal. Wie schließe ich die gesamte Mac OS X-Sitzung?
Antworten:
Das folgende Applescript meldet den aktuellen Benutzer ab:
tell application "System Events" to log out
Sie können dies mit dem folgenden osascript
Befehl in einen Bash-Alias einschließen :
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
Dies entspricht dem Klicken auf "> [Benutzername] abmelden ..." und erfolgt nach einer Wartezeit von 2 Minuten die Abmeldung
Dies lässt sich leicht mit dem sleep
Befehl kombinieren :
alias delayedlogout="sleep 3600; maclogout"
..oder könnte zu einem einzigen Alias zusammengefasst werden:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
Es gibt keine "nette" Möglichkeit, den aktuellen Benutzer in OS X vom Terminal abzumelden loginwindow
. Alle Prozesse (Programme), die unter Ihrem Benutzernamen ausgeführt werden, werden grob abgebrochen.
Dies ist ein zweistufiger Prozess.
Führen Sie im Terminal Folgendes aus:
ps -Ajc | grep loginwindow
Dann renne
sudo kill <pid>
Wo <pid>
ist die erste Zahl (zweite Spalte) aus der Ausgabe des obigen Befehls.
Verwenden Sie sudo kill -9, um den Prozess zu erzwingen, den ich ausführen musste, um dies zum Laufen zu bringen.
Wenn also beispielsweise die Ausgabe für den ersten Befehl wie folgt lautet:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Dann würde ich laufen sudo kill 41
, mein Passwort eingeben und dann werde ich abgemeldet.
Dies kann zu einem Bash-Alias kombiniert werden:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
? Zumindest ab 10.7 loginwindow
scheint der Prozess aber sofort wieder geöffnet zu sein.
Ich weiß, dass dies eine alte Frage ist, aber sie hat mir geholfen. Der Befehl, den ich unter OS X 10.8 benötigte, lautet:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
Die awk
Anweisung ist anders und kill -9
stellt sicher, dass die Anmeldeaufforderung angezeigt wird.
Ich denke, ich habe die Antwort gefunden, wie man sich von Mac OS X anmutig abmeldet, ohne 2 Minuten warten zu müssen.
Ich habe herausgefunden, dass das Halten von Umschalttaste, Wahltaste und Befehl und das Drücken von "q" sich anmutig abmeldet und nicht fragt, ob Sie sich abmelden möchten.
Also habe ich ein AppleScript durch Automator geschrieben, um:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Wenn Sie bei einer Shell als derselbe Benutzer angemeldet sind, der auch bei der Benutzeroberfläche des Mac angemeldet ist, können Sie einen sudo-less-Befehl ausgeben: launchctl reboot logout
Dadurch wird der Benutzer ziemlich effektiv abgemeldet . Es hat den Vorbehalt, dass Apps, die gerade beendet werden, beim Beenden nicht zur Interaktion aufgefordert werden. Es scheint jedoch nicht zu implizieren, dass dies das Gleiche ist, als würden sie sofort getötet kill
(SIG TERM) oder kill -9
(SIG KILL).
Ich würde argumentieren, dass der "schönste" Weg nach OS X 10.9 sein könnte launchctl gui/$(id -u <username>) bootout
Die Post-OS-X-10.9-Dokumentation für launchctl wird beim Ausführen gefunden launchctl help
, aber der obige Befehl beendet im Wesentlichen die temporäre Sitzung eines Benutzers. Die Alternative beendet launchctl user/$(id -u <username>) bootout
die permanente Sitzung, in der Benutzerdämonen ausgeführt werden, während der Benutzer nicht angemeldet ist.
Dies kann durch Ausführen getestet werden. Dadurch launchctl gui/$(id -u) bootout
werden Sie sofort abgemeldet und das System zeigt das Anmeldefenster an (mit einer gewissen Verzögerung).
sudo launchctl bootout gui/XXX
wo XXX
die numerische Benutzer-ID (UID) ist. Beachten Sie, dass i) der bootout
Unterbefehl an erster Stelle steht und ii) $(id)
viel mehr als die UID zurückgibt.
Ein nützliches Dienstprogramm, das Sie zu Ihrem Terminal hinzufügen können, ist der Abmeldebefehl , der wie folgt verwendet werden kann:
logout UserName
Hier das Gewusst wie:
Bearbeiten Sie Ihr .bash_profile
nano ~/.bash_profile
Diese Zeile hinzufügen:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Speichern Sie die Datei mit ctrl+x
Starten Sie das Terminal neu
Sie sind bereit zu gehen;)