Buat skrip / aplikasi berjalan saat keluar

13

Kita semua tahu bahwa Mac OS X memiliki fungsionalitas Item Login yang sangat berguna yang memungkinkan Anda, antara lain, mengatur aplikasi / skrip untuk dijalankan ketika Anda login.

Saya mencari cara untuk menyiapkan daftar skrip / aplikasi yang berjalan saat saya logout . Daftar "Barang Keluar", jika Anda mau.
Pada dasarnya, saya ingin menulis beberapa skrip pembersihan untuk saya sendiri yang akan berjalan secara otomatis ketika saya logout atau dimatikan.

Jadi, saya mencari cara untuk memiliki skrip (atau, idealnya, daftar mereka) secara otomatis dipicu ketika saya logout. Logout akan menunggu skrip untuk menyelesaikan (seperti bagaimana logout menunggu Anda untuk mengklik Simpan jika aplikasi memintanya).

Apakah ada cara untuk secara otomatis memicu (a) skrip ketika saya logout dari Mac OS X?

Nathan Greenstein
sumber

Jawaban:

7

Kait keluar tidak lagi digunakan pada 10.4 , tetapi mereka masih berfungsi pada 10.9.

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nsay a' > ~/.logouthook
chmod +x ~/.logouthook

Nilai kunci LogoutHook hanya bisa menjadi jalur ke perintah yang dapat dieksekusi dan bukan perintah shell. Kait logout dijalankan sebagai root.

Perintah default memodifikasi /var/root/Library/Preferences/com.apple.loginwindow.plist. Menambahkan kunci LogoutHook ke /Library/Preferences/com.apple.loginwindow.plist tidak berfungsi.

Jika kait logout cukup lama untuk dijalankan, layar abu-abu akan ditampilkan sampai kait logout berakhir. Sepertinya tidak ada batas waktu setelah kait logout dipaksa untuk berakhir.

Saya belum menemukan cara untuk menjalankan program pada logout secara andal dengan launchd. Ketika saya mencoba menjebak sinyal seperti EXIT, kode dalam perangkap hanya berjalan ketika saya logout ke jendela login dan tidak ketika saya mematikan atau memulai kembali.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>test</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>trap 'echo a>/Users/username/Desktop/a;say a' EXIT;while :;do sleep 10;done</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
Lri
sumber
Hmm, tak satu pun dari mereka yang bekerja untuk saya. Saya punya skrip ini , yang berfungsi jika saya menjalankannya sh(ini menciptakan file .txt). Saya menyimpan skrip sebagai /etc/rc.shutdown.local, dan saya menambahkannya defaultsseperti yang Anda katakan. Tidak ada file di sana. Apakah saya melakukan sesuatu yang salah? Terima kasih!
Nathan Greenstein
Saya tidak yakin apakah saya melakukan sesuatu yang salah atau tidak. Saya di 10.6.8 dan LogoutHook tidak berfungsi. Saya akan menghargai jika Anda dapat melihat screenshot ini dan beri tahu saya jika ada sesuatu yang salah. Terima kasih!
Nathan Greenstein
1
Ah! Yang terakhir berhasil pada 10.6.8. Terima kasih! Satu catatan: tidak bekerja dengan Lion :(
Nathan Greenstein
2
Kedua metode bekerja dengan baik pada mesin Mountain Lion (10.8.2) saya, bahkan ketika mematikan atau me-reboot. Perhatikan bahwa kait LoginHook / LogoutHook berjalan dalam konteks pengguna root , dan bahwa itu adalah kait tunggal, seluruh sistem , dan bahwa kait login berjalan secara sinkron - jauh lebih awal daripada agen peluncuran per pengguna; sama halnya, kait logout berjalan lebih awal dari agen peluncuran per pengguna yang menggunakan metode perangkap EXIT. Ada kasus di mana hanya kait yang berfungsi; misalnya, jika Anda ingin membisukan suara saat dimatikan untuk menekan suara startup Mac, hanya LogoutHook yang bekerja dengan andal.
mklement0
1

Sebenarnya ada caranya:

  1. Buka aplikasi "Editor Skrip"
  2. Tempel

do shell script "PUT YOUR START SCRIPT PATH HERE"

on quit
    do shell script "PUT YOUR STOP SCRIPT PATH HERE"
    continue quit
end quit
  1. File> Simpan, Pilih Aplikasi dan Tetap buka setelah menjalankan penangan dan Simpan
  2. Preferensi Sistem> Pengguna & Grup> tab Item Masuk> tombol +
  3. Tambahkan aplikasi dan tandai sebagai Tersembunyi

Untuk menyembunyikannya dari Dock:

  1. Klik kanan aplikasi dan pilih Tampilkan konten paket
  2. Buka Info.plist dan tambahkan

<key>NSUIElement</key>
<string>1</string>
filippo
sumber
Suka ini. Sederhana dan memadai untuk kebutuhan saya. Dan tidak ditinggalkan.
Ivan X
0

Pencatat Waktu Script adalah pilihan yang baik untuk ini. Itu dapat berjalan saat keluar, masuk, dan banyak lagi. Saya akan menggunakan ini untuk solusi yang sederhana dan mudah digunakan. Ini memiliki GUI sederhana:

Tindakan yang dipicu

Ada dua hal yang perlu Anda perhatikan tentang Script Timer. Satu, itu tidak gratis. Harganya $ 12, tapi saya pribadi berpikir itu sepadan. Dua, itu tidak sepenuhnya kompatibel dengan Lion, tetapi mereka telah berjanji pembaruan gratis segera setelah mereka membuatnya kompatibel.

daviesgeek
sumber
1
Ini sudah ditinggalkan sekarang
Kirtikumar A.
0

Anda juga bisa membuat aplikasi Mac dari skrip Anda menggunakan sesuatu seperti Platypus dan kemudian menambahkannya ke Item Login seperti aplikasi lain.

svth
sumber
0

Power Manager dapat menjalankan skrip saat pengguna keluar. Ini adalah produk komersial dan mendukung macOS terbaru.

Power Manager menjalankan skrip pada tugas Asisten Jadwal logout keluar

Versi sebelumnya diperlukan menggunakan editor acara , tetapi tugas Jadwal Asisten sekarang termasuk untuk menjalankan skrip saat masuk dan keluar.

Saya menulis Power Manager, jadi jangan ragu untuk mengajukan pertanyaan teknis tentang penerapannya. Dalam kasus peristiwa yang dipicu logout, Power Manager tidak polling untuk perubahan dalam status pengguna tetapi sebaliknya diberitahu tentang perubahan pengguna oleh macOS. Pendekatan ini lebih efisien yang memiliki script looping / polling.

Graham Miln
sumber