Apa Perintah Terminal Mac OS X untuk Keluar dari Pengguna Saat Ini?

19

Saya ingin menjalankan sesuatu seperti "sleep 3600; logout", tetapi perintah bout logout hanya menutup terminal saat ini. Bagaimana cara menutup sesi Mac OS X penuh?

Grzegorz Adam Hankiewicz
sumber

Jawaban:

22

Applescript berikut akan keluar dari pengguna saat ini:

tell application "System Events" to log out

Anda dapat membungkus ini dalam alias bash menggunakan osascriptperintah:

alias maclogout="osascript -e 'tell application \"System Events\" to log out'"

Itu sama dengan mengklik "> Keluar [nama pengguna] ...", dan akan keluar setelah menunggu 2 menit

Ini mudah digabungkan dengan sleepperintah:

alias delayedlogout="sleep 3600; maclogout"

..atau dapat digabungkan menjadi satu alias:

alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
dbr
sumber
Baik. Peningkatan untuk menjawab pertanyaan dengan tepat adalah dengan memasukkan apa yang akan menjadi sintaks 'sleep' dalam applescript. Juga, saya mengerti baris kedua kode disisipkan dari terminal, tetapi karena itu lolos dari tanda kutip ganda di sekitar Peristiwa Sistem yang tidak perlu.
Sacrilicious
@Sebuah poin bagus tentang perintah sleep. Kutipan lolos pada bagian "System Events" diperlukan, karenaalias maclogout="..."
dbr
2
Saya baru-baru ini menemukan bahwa menjalankan perintah di terminal tidak akan mematikan / menutup sistem karena Terminal itu sendiri mencegah logout karena bash tidak menjadi proses saat ini. Ini dapat dengan mudah diperbaiki dengan melakukan '(sleep 1; command) &', di mana sleep mengantri pekerjaan di latar belakang dan pada saat dijalankan terminal tidak merasa sibuk.
Grzegorz Adam Hankiewicz
17

Tidak ada cara "baik" untuk mengeluarkan pengguna saat ini dari Terminal di OS X. Cara 'berantakan' untuk melakukannya adalah dengan mematikan loginwindowproses pengguna tersebut . Ini akan mematikan semua proses (program) yang berjalan di bawah nama pengguna Anda.

Melakukan ini adalah proses dua langkah.

  1. Di terminal, jalankan ini:

    ps -Ajc | grep loginwindow
    
  2. Lalu lari

    sudo kill <pid>
    

    Di mana <pid>angka pertama (kolom kedua) dari output dari perintah di atas.

Gunakan sudo kill -9 untuk memaksa kill proses yang harus saya lakukan agar ini berhasil.

Jadi misalnya ketika kapan output ke perintah pertama adalah:

joshhunt    41     1    41 5e15c08    0 Ss     ??    3:13.09 loginwindow

Lalu saya akan lari sudo kill 41, memasukkan kata sandi, dan kemudian saya keluar.

Ini dapat digabungkan menjadi alias bash:

alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
Josh Hunt
sumber
Tidak bisakah Anda menggunakan saja sudo killall loginwindow? Setidaknya pada 10.7 loginwindowprosesnya tampaknya segera dibuka kembali.
Lri
3

Saya tahu ini adalah pertanyaan lama tetapi itu membantu saya, perintah yang saya butuhkan pada OS X 10.8 adalah:

ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9

The awkpernyataan berbeda dan kill -9memastikan prompt login ditampilkan.

tandai l
sumber
@gronostaj Apakah Anda benar-benar percaya bahwa hasil edit seperti itu akan diterima? Saya melihat pengeditan yang disarankan seperti itu ditolak sebagai “pengeditan tidak valid (upaya untuk membalas atau mengomentari kiriman yang ada)” atau “perubahan radikal” sepanjang waktu - dan markl jelas tidak memiliki perwakilan yang cukup untuk memposting komentar.
Scott
@Scott Anda benar, saya sudah terlalu cepat memposting komentar itu.
gronostaj
2

Saya pikir saya telah menemukan jawaban untuk cara Keluar dengan anggun dari Mac OS X tanpa menunggu 2 menit.

Saya tahu bahwa menahan Shift, Opsi, dan Perintah dan menekan "q" akan keluar dengan anggun dan tidak bertanya "jika Anda ingin keluar".

Jadi saya mengkodekan AppleScript melalui Automator ke:

tell application "System Events"
     keystroke "q" using {command down, shift down, option down}
end tell
BITeC
sumber
0

Jika Anda masuk ke shell sebagai pengguna yang sama yang masuk ke gui mac, Anda bisa mengeluarkan perintah sudo-less: launchctl reboot logoutyang tidak cukup baik untuk keluar dari pengguna; itu memiliki peringatan tidak mengizinkan aplikasi yang keluar dari mendorong interaksi saat berhenti, namun tampaknya tidak menyiratkan bahwa ini adalah hal yang sama dengan membunuh mereka secara langsung seperti kill(SIG TERM) atau kill -9(SIG KILL).

dlamblin
sumber
0

Saya berpendapat bahwa cara "terbaik" pasca OS X 10.9 mungkin launchctl gui/$(id -u <username>) bootout

Dokumentasi OS X 10.9 pos untuk launchctl ditemukan dengan menjalankan launchctl help, tetapi pada dasarnya perintah di atas akan meruntuhkan sesi sementara pengguna. Alternatif launchctl user/$(id -u <username>) bootoutmenghancurkan sesi permanen yang menjalankan daemon pengguna sementara pengguna tidak login.

Ini dapat diuji dengan menjalankan launchctl gui/$(id -u) bootout, ini akan segera mengeluarkan Anda dan menyebabkan sistem menampilkan jendela masuk (dengan penundaan).

Iain Henderson
sumber
Setidaknya di bawah El Capitan, perintah yang benar adalah di sudo launchctl bootout gui/XXXmana XXXadalah ID pengguna numerik (UID). Perhatikan bahwa i) bootoutsub- perintah harus didahulukan, dan ii) $(id)mengembalikan lebih banyak daripada UID.
Laryx Decidua
Diperbarui untuk memanggil id (id -u) dengan benar
Iain Henderson
0

Utilitas yang bagus untuk ditambahkan ke Terminal Anda adalah perintah logout , untuk digunakan seperti:

logout UserName

Berikut caranya:

  1. Edit .bash_profile Anda

    nano ~/.bash_profile

  2. Tambahkan baris ini:

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

  3. Simpan file dengan menekan ctrl+x

  4. Mulai ulang terminal

Kamu siap untuk pergi ;)

Kappe
sumber