Chciałbym uruchomić coś w stylu „sleep 3600; logout”, ale polecenie bash wylogowania zamyka tylko bieżący terminal. Jak zamknąć pełną sesję Mac OS X?
Chciałbym uruchomić coś w stylu „sleep 3600; logout”, ale polecenie bash wylogowania zamyka tylko bieżący terminal. Jak zamknąć pełną sesję Mac OS X?
Odpowiedzi:
Następujący skrypt Apple wyloguje bieżącego użytkownika:
tell application "System Events" to log out
Możesz zawinąć to w alias bash, używając osascript
polecenia:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
Jest to to samo, co kliknięcie „> Wyloguj się [nazwa użytkownika] ...” i wyloguje się po 2 minutach oczekiwania
Można to łatwo połączyć z sleep
poleceniem:
alias delayedlogout="sleep 3600; maclogout"
..lub można połączyć w jeden alias:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
Nie ma „miłego” sposobu wylogowania bieżącego użytkownika z terminalu w OS X. „Nieuporządkowanym” sposobem na to jest zabicie loginwindow
procesu tego użytkownika . Nieuprzejmie zabije wszystkie procesy (programy) działające pod twoją nazwą użytkownika.
Jest to dwuetapowy proces.
W terminalu uruchom to:
ps -Ajc | grep loginwindow
Następnie uruchomić
sudo kill <pid>
Gdzie <pid>
jest pierwsza liczba (druga kolumna) z danych wyjściowych powyższego polecenia.
Użyj sudo kill -9, aby wymusić zabicie procesu, który musiałem zrobić, aby to zadziałało.
Na przykład, jeśli dane wyjściowe pierwszego polecenia to:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Potem biegłbym sudo kill 41
, wpisałem hasło, a następnie wylogowałem się.
Można to połączyć w alias Bash:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
? Przynajmniej 10,7 loginwindow
proces wydaje się być natychmiast ponownie otwarty.
Wiem, że to stare pytanie, ale pomogło mi, polecenie, którego potrzebowałem w OS X 10.8:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
awk
Stwierdzenie jest inny i kill -9
gwarantuje szybka logowania jest pokazane.
Myślę, że znalazłem odpowiedź na to, jak z wdziękiem wylogować się z Mac OS X bez czekania 2 minut.
Zrozumiałem, że przytrzymanie Shift, Option i Command i naciśnięcie „q” wyloguje się z gracją i nie zapyta „czy chcesz się wylogować”.
Więc kodowałem AppleScript za pomocą Automatora, aby:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Jeśli jesteś zalogowany do powłoki jako ten sam użytkownik, który jest zalogowany do GUI Maca, możesz wydać polecenie bez sudo: launchctl reboot logout
które dość skutecznie wylogowuje użytkownika; ma tę wadę, że nie zezwala aplikacjom, które wychodzą z monitowania o interakcję podczas zamykania, jednak nie wydaje się sugerować, że jest to to samo, co ich całkowite zabicie, jak mogłoby to zrobić kill
(SIG TERM) lub kill -9
(SIG KILL).
Twierdziłbym, że „najpiękniejszy” sposób może być po OS X 10.9 launchctl gui/$(id -u <username>) bootout
Dokumentację po OS X 10.9 dla launchctl można znaleźć po uruchomieniu launchctl help
, ale zasadniczo powyższe polecenie spowoduje przerwanie tymczasowej sesji użytkownika. Alternatywą jest launchctl user/$(id -u <username>) bootout
zerwanie stałej sesji, która uruchamia demony użytkownika, gdy użytkownik nie jest zalogowany.
Można to przetestować, uruchamiając launchctl gui/$(id -u) bootout
, spowoduje to natychmiastowe wylogowanie i spowoduje, że system wyświetli okno logowania (z pewnym opóźnieniem).
sudo launchctl bootout gui/XXX
gdzie XXX
jest numeryczny identyfikator użytkownika (UID). Zauważ, że i) bootout
komenda jest pierwsza, a ii) $(id)
zwraca znacznie więcej niż identyfikator UID.
Przyjemnym narzędziem do dodania do terminala jest komenda wylogowania , która może być używana jako:
logout UserName
Oto jak:
Edytuj swój .bash_profile
nano ~/.bash_profile
Dodaj tę linię:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Zapisz plik naciskając ctrl+x
Uruchom ponownie terminal
Jesteś gotowy do drogi;)