Geçerli Kullanıcının Oturumunu Kapatma Mac OS X Terminal Komutu Nedir?


19

"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:


22

Aşağıdaki Applescript geçerli kullanıcının oturumunu kapatır:

tell application "System Events" to log out

osascriptKomutu 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 sleepkomutla 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'"

İyi koy. Soruyu tam olarak cevaplayacak bir geliştirme, 'uyku' sözdiziminin el yazısında ne olacağını dahil etmek olacaktır. Ayrıca, ikinci kod satırının terminalden yapıştırıldığını anlıyorum, ancak bu nedenle Sistem Olayları etrafında çift tırnaklardan gereksiz yere kaçtı.
Kutsal

@Uyku komutu hakkında şahane iyi bir nokta. "Sistem Olayları" bölümünden kaçan alıntı gerekli, çünküalias maclogout="..."
dbr

2
Son zamanlarda, bir terminalde komutun çalıştırılmasının, Terminal'in kendisi nedeniyle bash'ın geçerli işlem olmaması nedeniyle oturumu kapatması nedeniyle sistemi kapatıp kapatmayacağını buldum. Bu, uykunun arka plandaki işi sıraya koyduğu ve terminali yürüttüğü zaman terminalin meşgul olduğunu düşünmediği '(uyku 1; komut)' ile kolayca düzeltilebilir.
Grzegorz Adam Hankiewicz

17

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 loginwindowiş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.

  1. Terminalde şunu çalıştırın:

    ps -Ajc | grep loginwindow
    
  2. 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"

Sadece kullanamaz sudo killall loginwindowmısın? En azından 10.7'de bu loginwindowsüreç derhal tekrar açılıyor gibi görünüyor.
Lri

3

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 -9olmasını sağlar giriş istemi gösterilir.


@gronostaj Böyle bir düzenlemenin kabul edileceğine gerçekten inanıyor musunuz? Bunun gibi önerilen düzenlemelerin her zaman "geçersiz düzenleme (mevcut gönderiyi yanıtlamaya veya yorum yapmaya çalışın)" veya "radikal değişiklik" olarak reddedildiğini görüyorum - ve markanın henüz yorum göndermek için yeterli temsilcisi yok.
Scott

@Scott haklısın, bu yorumu çok hızlı yayınladım.
gronostaj

2

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

0

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 logoutkullanı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 .


0

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).


En azından El Capitan altında, doğru komut sayısal kullanıcı kimliğinin (UID) olduğu sudo launchctl bootout gui/XXXyerdir XXX. İ) bootoutalt komutun önce geldiğini ve ii) $(id)UID'den çok daha fazlasını döndürdüğünü unutmayın.
Laryx Decidua

Kimliği doğru şekilde aramak için güncellendi (id -u)
Iain Henderson

0

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:

  1. .Bash_profile dosyanızı düzenleyin

    nano ~/.bash_profile

  2. Bu satırı ekle:

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

  3. Tuşuna basarak dosyayı kaydedin ctrl+x

  4. Terminali yeniden başlatın

Gitmeye hazırsın ;)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.