Bir komut dosyasının / uygulamanın oturumdan çıkmasını sağlama


13

Mac OS X'in, diğer şeylerin yanı sıra, oturum açtığınızda çalışacak uygulamaları / komut dosyalarını ayarlamanıza izin veren çok kullanışlı Giriş Öğeleri işlevine sahip olduğunu hepimiz biliyoruz .

Oturumu kapattığımda çalışan komut dosyalarının / uygulamaların bir listesini oluşturmanın bir yolunu arıyorum . İsterseniz bir "Çıkış Öğeleri" listesi.
Temel olarak, oturumu kapattığımda veya kapattığımda kendim için otomatik olarak çalışacak birkaç temizleme komut dosyası yazmak istiyorum.

Yani, çıkış yaptığımda bir komut dosyasının (veya ideal olarak bunların listesinin) otomatik olarak tetiklenmesinin bir yolunu arıyorum. Oturumu kapatma komut dosyalarının bitmesini bekler (tıpkı oturumu kapatmanın bir uygulama isterse Kaydet'i tıklatmanızı nasıl beklediği gibi).

Mac OS X oturumunu kapattığımda (a) komut dosyalarını otomatik olarak tetiklemenin bir yolu var mı?


Yanıtlar:


7

Çıkış kancaları 10.4'te kullanımdan kaldırıldı , ancak yine de 10.9'dan beri çalışıyorlar.

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

LogoutHook anahtarının değeri bir kabuk komutu değil, yalnızca yürütülebilir bir yol olabilir. Çıkış kancası kök olarak çalıştırılır.

Varsayılanlar komutu /var/root/Library/Preferences/com.apple.loginwindow.plist'i değiştirir. /Library/Preferences/com.apple.loginwindow.plist'e bir LogoutHook anahtarı eklemek işe yaramıyor.

Oturum kapama kancasının çalışması için yeterince uzun sürerse, oturum kapama kancası sona erene kadar gri bir ekran gösterilir. Çıkış kancalarının sona ermeye zorlandığı herhangi bir zaman sınırı yok gibi görünüyor.

Oturum açma ile programları launchd ile güvenilir bir şekilde çalıştırmanın bir yolunu bulamadım. EXIT gibi sinyalleri yakalamayı denediğimde, tuzaktaki kod sadece oturum açma penceresine oturumu kapattığımda çalıştım, kapattığımda veya yeniden başlattığımda değil.

<?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>

Hmm, bunların hiçbiri benim için çalışmadı. Çalıştırırsam çalışan bu komut dosyasını aldım sh(bu .txt dosyasını oluşturur). Komut dosyasını /etc/rc.shutdown.local olarak kaydettim ve defaultsdediğiniz gibi ekledim . Her iki dosya da orada değildi. Yanlış bir şey mi yapıyorum? Teşekkürler!
Nathan Greenstein

Yanlış bir şey yapıp yapmadığımdan emin değilim. 10.6.8'deyim ve LogoutHook çalışmıyor. Bu ekran görüntüsüne bir göz atabilir ve bir şeylerin yanlış göründüğünü bana bildirirseniz sevinirim . Teşekkürler!
Nathan Greenstein

1
Ah! Sonuncusu 10.6.8'de hile yaptı. Teşekkürler! Yine de bir not: Lion ile çalışmaz :(
Nathan Greenstein

2
Her iki yöntem de Mountain Lion (10.8.2) makinemde, kapanırken veya yeniden başlatılırken bile iyi çalışıyor. LoginHook / LogoutHook kancalarının kök kullanıcı bağlamında çalıştığını ve bunların sistem genelinde tek kanca olduğunu ve oturum açma kancasının senkronize olarak çalıştığını ve kullanıcı başına başlatma aracılarından çok daha erken olduğunu unutmayın; benzer şekilde oturum kapatma kancası, EXIT-trap yöntemini kullanan her kullanıcı için başlatma aracısından daha önce çalışır. Sadece kancaların çalıştığı durumlar vardır ; örneğin, Mac'in başlangıç ​​sesini bastırmak için kapatma sırasında sesi kapatmak istiyorsanız, yalnızca LogoutHook güvenilir bir şekilde çalışır.
mklement0

1

Aslında bir yolu var:

  1. "Script Editor" uygulamasını açın
  2. Yapıştırmak

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. Dosya> Kaydet, Uygulamayı Seç ve çalıştırıcıyı çalıştırdıktan sonra açık kal ve Kaydet
  2. Sistem Tercihleri> Kullanıcılar ve Gruplar> Giriş Öğeleri sekmesi> + düğmesi
  3. Uygulamayı ekleyin ve Gizli olarak işaretleyin

Dock'tan gizlemek için:

  1. Uygulamayı sağ tıklayın ve Paket içeriğini göster'i seçin
  2. Info.plist dosyasını açın ve ekleyin

<key>NSUIElement</key>
<string>1</string>

Bunu sev. Basit ve benim ihtiyaçları için yeterli. Ve itiraz edilmiyor.
Ivan X

0

Script Timer bunun için iyi bir seçimdir. Çıkışta, girişte ve çok daha fazlasında çalışabilir. Bunu basit ve kullanımı kolay bir çözüm için kullanırım. Basit bir GUI'ye sahiptir:

Tetiklenen eylem

Script Timer hakkında not etmeniz gereken iki şey var. Birincisi, ücretsiz değil . 12 $ maliyeti, ama kişisel olarak buna değer olduğunu düşünüyorum. İki, Lion ile tam olarak uyumlu değil, ancak uyumlu hale gelir gelmez ücretsiz bir güncelleme sözü verdiler.


1
Bu artık önerilmiyor
Kirtikumar A.

0

Ayrıca, komut dosyanızdan Platypus gibi bir şey kullanarak bir Mac uygulaması oluşturabilir ve daha sonra başka herhangi bir uygulama gibi Giriş Öğelerine ekleyebilirsiniz.


0

Bir kullanıcı oturumu kapattığında Power Manager bir komut dosyası çalıştırabilir. Bu ticari bir üründür ve en son macOS'u destekler.

Power Manager oturumu kapatmada komut dosyası çalıştırma Zamanlama Yardımcısı görevi

Olay düzenleyicisi kullanılarak daha önceki sürümler gerekiyordu , ancak oturum açma ve kapatma sırasında komut dosyalarını çalıştırmak için bir Schedule Assistant görevi eklenmiştir.

Power Manager yazdım, bu yüzden uygulaması hakkında teknik sorular sormaktan çekinmeyin. Oturumu kapatma tetiklenen olaylarda, Power Manager kullanıcı durumundaki değişiklikler için anket oluşturmaz, bunun yerine macOS tarafından yapılan kullanıcı değişiklikleri bildirilir. Bu yaklaşım, bir komut dosyası döngüsüne / yoklamasına sahip olmaktan daha etkilidir.

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.