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?
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?
Jawaban:
Applescript berikut akan keluar dari pengguna saat ini:
tell application "System Events" to log out
Anda dapat membungkus ini dalam alias bash menggunakan osascript
perintah:
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 sleep
perintah:
alias delayedlogout="sleep 3600; maclogout"
..atau dapat digabungkan menjadi satu alias:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
Tidak ada cara "baik" untuk mengeluarkan pengguna saat ini dari Terminal di OS X. Cara 'berantakan' untuk melakukannya adalah dengan mematikan loginwindow
proses pengguna tersebut . Ini akan mematikan semua proses (program) yang berjalan di bawah nama pengguna Anda.
Melakukan ini adalah proses dua langkah.
Di terminal, jalankan ini:
ps -Ajc | grep loginwindow
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"
sudo killall loginwindow
? Setidaknya pada 10.7 loginwindow
prosesnya tampaknya segera dibuka kembali.
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 awk
pernyataan berbeda dan kill -9
memastikan prompt login ditampilkan.
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
Jika Anda masuk ke shell sebagai pengguna yang sama yang masuk ke gui mac, Anda bisa mengeluarkan perintah sudo-less: launchctl reboot logout
yang 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).
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>) bootout
menghancurkan 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).
sudo launchctl bootout gui/XXX
mana XXX
adalah ID pengguna numerik (UID). Perhatikan bahwa i) bootout
sub- perintah harus didahulukan, dan ii) $(id)
mengembalikan lebih banyak daripada UID.
Utilitas yang bagus untuk ditambahkan ke Terminal Anda adalah perintah logout , untuk digunakan seperti:
logout UserName
Berikut caranya:
Edit .bash_profile Anda
nano ~/.bash_profile
Tambahkan baris ini:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Simpan file dengan menekan ctrl+x
Mulai ulang terminal
Kamu siap untuk pergi ;)