"Uyku 3600; oturum kapatma" gibi bir şey çalıştırmak istiyorum, ancak oturum kapatma bash komutu yalnızca geçerli terminali kapatır. Tam Mac OS X oturumunu nasıl kapatabilirim?
"Uyku 3600; oturum kapatma" gibi bir şey çalıştırmak istiyorum, ancak oturum kapatma bash komutu yalnızca geçerli terminali kapatır. Tam Mac OS X oturumunu nasıl kapatabilirim?
Yanıtlar:
Aşağıdaki Applescript geçerli kullanıcının oturumunu kapatır:
tell application "System Events" to log out
osascript
Komutu kullanarak bunu bir bash diğer adıyla kapatabilirsiniz :
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
"> Çıkış [kullanıcı adı] ..." seçeneğini tıklamakla aynıdır ve 2 dakikalık bir bekleyişten sonra çıkış yapacak
Bu sleep
komutla kolayca birleştirilebilir :
alias delayedlogout="sleep 3600; maclogout"
..ya da tek bir takma adda birleştirilebilir:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
Geçerli kullanıcıyı OS X'te Terminal'den çıkış yapmak için "hoş" bir yol yoktur. Bunu yapmanın 'dağınık' yolu, kullanıcının loginwindow
işlemini öldürmektir . Kullanıcı adınız altında çalışan tüm işlemleri (programları) terbiyesizce öldürecektir.
Bunu yapmak iki aşamalı bir süreçtir.
Terminalde şunu çalıştırın:
ps -Ajc | grep loginwindow
O zaman koş
sudo kill <pid>
<pid>
Yukarıdaki komuttan çıkan ilk sayı (ikinci sütun) nerede .
Bunu işe almak için yapmak zorunda olduğu süreci öldürmek zorlamak için sudo kill -9 kullanın.
Yani, örneğin, ilk komuta çıktı:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Sonra koşar sudo kill 41
, şifremi girer ve oturumu kapatırım.
Bu bir bash takma adı olarak birleştirilebilir:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
mısın? En azından 10.7'de bu loginwindow
süreç derhal tekrar açılıyor gibi görünüyor.
Bu eski bir soru olduğunu biliyorum ama bana yardımcı oldu, OS X 10.8 üzerinde gereken komut:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
awk
İfadesi farklıdır ve kill -9
olmasını sağlar giriş istemi gösterilir.
Ben Mac OS X 2 dakikalık bekleme olmadan zarifçe oturum kapatma için nasıl cevap bulduğumu düşünüyorum .
Shift, Option ve Command tuşlarını basılı tutup "q" tuşuna basmanın zarif bir şekilde oturumu kapatacağını ve "oturumu kapatmak isteyip istemediğinizi" sormayacağını anladım.
Bu yüzden Automator aracılığıyla bir AppleScript kodladım:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Bir kabuğa mac'un gui'sinde oturum açmış kullanıcıyla oturum açtıysanız, sudo'suz bir komut verebilirsiniz: launchctl reboot logout
kullanıcının oturumunu oldukça etkili bir şekilde kapatır; çıkarken etkileşim istemekten vazgeçen uygulamalara izin vermeme uyarısına sahiptir, ancak bunun bir kill
(SIG TERM) veya kill -9
(SIG KILL) olabileceği gibi onları doğrudan öldürmekle aynı şey olduğu anlamına gelmez .
Ben OS X 10.9 sonrası "en güzel" yolu olabileceğini iddia ediyorum launchctl gui/$(id -u <username>) bootout
Launchctl için OS X 10.9 sonrası belgeler çalıştırılarak bulunur launchctl help
, ancak esasen yukarıdaki komut bir kullanıcının geçici oturumunu yıkacaktır . Alternatif launchctl user/$(id -u <username>) bootout
, kullanıcı oturum açmamışken kullanıcı artalan süreçlerini çalıştıran kalıcı oturumu ortadan kaldırır.
Bu çalıştırılarak test edilebilir launchctl gui/$(id -u) bootout
, bu hemen oturumunuzu kapatır ve sistemin giriş penceresini görüntülemesine neden olur (biraz gecikmeyle).
sudo launchctl bootout gui/XXX
yerdir XXX
. İ) bootout
alt komutun önce geldiğini ve ii) $(id)
UID'den çok daha fazlasını döndürdüğünü unutmayın.
Terminalinize eklemek için güzel bir yardımcı program , aşağıdaki gibi kullanılacak çıkış komutudur:
logout UserName
İşte nasıl yapılır:
.Bash_profile dosyanızı düzenleyin
nano ~/.bash_profile
Bu satırı ekle:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Tuşuna basarak dosyayı kaydedin ctrl+x
Terminali yeniden başlatın
Gitmeye hazırsın ;)