Esegui uno script / app al logout


13

Sappiamo tutti che Mac OS X ha l'utilissima funzionalità Elementi di accesso che consente, tra le altre cose, di configurare app / script da eseguire al momento dell'accesso.

Sto cercando un modo per impostare un elenco di script / app da eseguire quando esco . Un elenco "Logout Items", se vuoi.
Fondamentalmente, voglio scrivere alcuni piccoli script di pulizia per me stesso che verranno eseguiti automaticamente quando esco o chiudo.

Quindi, sto cercando un modo per avere uno script (o, idealmente, un elenco di essi) automaticamente attivato quando esco. Il logout aspetterebbe il completamento degli script (proprio come il logout attende che tu faccia clic su Salva se un'app lo richiede).

C'è un modo per attivare automaticamente (a) gli script quando esco da Mac OS X?


Risposte:


7

Gli hook di logout sono stati deprecati in 10.4 , ma funzionano ancora a partire da 10.9.

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

Il valore della chiave LogoutHook può essere solo un percorso per un eseguibile e non un comando shell. Il hook di logout viene eseguito come root.

Il comando di default modifica /var/root/Library/Preferences/com.apple.loginwindow.plist. L'aggiunta di una chiave LogoutHook a /Library/Preferences/com.apple.loginwindow.plist non funziona.

Se un hook di logout impiega abbastanza tempo per essere eseguito, viene visualizzata una schermata grigia fino al termine del hook di logout. Non sembra esserci alcun limite di tempo dopo il quale gli hook di logout sono costretti a terminare.

Non ho trovato alcun modo per eseguire i programmi in logout in modo affidabile con launchd. Quando ho provato a intercettare segnali come EXIT, il codice nella trap veniva eseguito solo quando mi disconnettevo dalla finestra di accesso e non quando chiudevo o riavviavo.

<?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, nessuno di questi ha funzionato per me. Ho questo script , che funziona se lo eseguo sh(crea quel file .txt). Ho salvato lo script come /etc/rc.shutdown.local e l'ho aggiunto defaultscome hai detto. Nessuno dei file era già lì. Sto facendo qualcosa di sbagliato? Grazie!
Nathan Greenstein,

Non sono sicuro se sto facendo qualcosa di sbagliato o no. Sono al 10.6.8 e LogoutHook non funziona. Ti sarei grato se potessi dare un'occhiata a questo screenshot e farmi sapere se qualcosa sembra sbagliato. Grazie!
Nathan Greenstein,

1
Ah! Quest'ultimo ha funzionato il 10.6.8. Grazie! Una nota però: non funziona con Lion :(
Nathan Greenstein,

2
Entrambi i metodi funzionano bene sulla mia macchina Mountain Lion (10.8.2), anche quando si spegne o si riavvia. Si noti che gli hook di LoginHook / LogoutHook vengono eseguiti nel contesto dell'utente root e che si tratta di hook singoli a livello di sistema e che l'hook di accesso viene eseguito in modo sincrono , molto prima degli agenti di avvio per utente; allo stesso modo, il hook di logout viene eseguito prima di un agente di avvio per utente che utilizza il metodo EXIT-trap. Ci sono casi in cui funzionano solo i ganci; ad esempio, se si desidera disattivare l'audio allo spegnimento per sopprimere il suono di avvio del Mac, solo LogoutHook funziona in modo affidabile.
mklement0

1

In realtà c'è un modo:

  1. Apri l'app "Script Editor"
  2. Incolla

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> Salva, seleziona Applicazione e rimani aperto dopo l'esecuzione gestore e Salva
  2. Preferenze di Sistema> Utenti e gruppi> scheda Elementi di accesso> pulsante +
  3. Aggiungi l'applicazione e contrassegnala come Nascosta

Per nasconderlo dal Dock:

  1. Fare clic con il tasto destro del mouse sull'applicazione e selezionare Mostra contenuto pacchetto
  2. Apri Info.plist e aggiungi

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

Ama questo. Semplice e adeguato alle mie esigenze. E non deprecato.
Ivan X

0

Script Timer è una buona scelta per questo. Può essere eseguito al logout, al login e molto altro. Vorrei andare con questo per una soluzione semplice e facile da usare. Ha una semplice GUI:

Azione innescata

Ci sono due cose che devi notare su Script Timer. Uno, è non è gratuito. Costa $ 12, ma personalmente penso che ne valga la pena. Due, non è completamente compatibile con Lion, ma hanno promesso un aggiornamento gratuito non appena lo hanno reso compatibile.


1
Questo è deprecato ora
Kirtikumar A.

0

Puoi anche creare un'applicazione Mac dal tuo script usando qualcosa come Platypus e quindi aggiungerla a Elementi di accesso come qualsiasi altra applicazione.


0

Power Manager può eseguire uno script quando un utente si disconnette. Questo è un prodotto commerciale e supporta l'ultima macOS.

Power Manager esegue uno script all'uscita dal programma Schedule Assistant

Versioni precedenti richieste utilizzando l'editor degli eventi , ma è ora inclusa un'attività Schedule Assistant per l'esecuzione di script all'accesso e alla disconnessione.

Ho scritto Power Manager, quindi sentiti libero di porre domande tecniche sulla sua implementazione. Nel caso di eventi attivati ​​per la disconnessione, Power Manager non esegue il polling per le modifiche nello stato dell'utente, ma viene informato delle modifiche dell'utente da macOS. Questo approccio è più efficiente che avere un ciclo di script / polling.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.