Fai eseguire script / app al logout

13

Sappiamo tutti che Mac OS X ha la molto utile funzione Elementi di login che ti consente, tra le altre cose, di configurare app / script da eseguire quando esegui l'accesso.

Sto cercando un modo per configurare un elenco di script / app che vengono eseguiti quando I Esci . Un elenco "Elementi di disconnessione", se vuoi.
Fondamentalmente, voglio scrivere alcuni script di pulizia che verranno eseguiti automaticamente quando effettuo il logout o l'arresto.

Quindi, sto cercando un modo per far scattare automaticamente uno script (o, idealmente, un elenco) quando esco. La disconnessione attenderà il completamento degli script (proprio come il logout ti aspetta per fare clic su Salva se un'applicazione lo richiede).

C'è un modo per attivare automaticamente (a) uno o più script quando esco da Mac OS X?

    
posta Nathan Greenstein 01.07.2011 - 18:17
fonte

5 risposte

7

I hook di logout erano deprecato in 10.4 , ma funzionano ancora a partire dal 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 verso un eseguibile e non un comando di shell. L'hook di logout viene eseguito come root.

Il comando defaults 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 richiede abbastanza tempo per essere eseguito, viene visualizzata una schermata grigia finché non termina il hook di logout. Non sembra esserci alcun limite di tempo dopo il quale i hook di logout sono forzati a terminare.

Non ho trovato alcun modo per eseguire programmi in modo affidabile in uscita con launchd. Quando ho provato a intercettare segnali come EXIT, il codice nella trappola è stato eseguito solo quando ho effettuato il logout alla finestra di accesso e non quando sono stato arrestato o riavviato.

<?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>
    
risposta data 01.07.2011 - 21:42
fonte
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 interfaccia grafica:

Ci sono due cose da tenere a mente su Script Timer. Uno, è non gratis. 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.

    
risposta data 25.02.2012 - 18:15
fonte
0

Potresti anche creare un'applicazione Mac dal tuo script usando qualcosa come Platypus e poi aggiungerla agli elementi di login come qualsiasi altra applicazione.

    
risposta data 30.11.2015 - 21:51
fonte
0

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

Versioniprecedenti richiesto utilizzando l'editor di eventi , ma ora è inclusa un'attività di Schedule Assistant per l'esecuzione di script all'accesso e all'uscita.

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

    
risposta data 31.03.2018 - 12:08
fonte
0

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 del gestore e Salva
  2. Preferenze di sistema > Utenti e amp; Gruppi > Scheda Elementi di accesso > + pulsante
  3. Aggiungi l'applicazione e contrassegnala come nascosta

Per nasconderlo dal Dock:

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

<key>NSUIElement</key>
<string>1</string>
    
risposta data 16.12.2018 - 11:29
fonte

Leggi altre domande sui tag