Come autorunare i file .command da un'unità USB quando lo collego?


2

Ho creato due file .command, "lock" e "unlock". Il primo nasconde i file nascosti con defaults write com.apple.Finder AppleShowAllFiles TRUE:, quindi aggiorna il cercatore con killall Finder. Il secondo fa il contrario, ho semplicemente sostituito TRUEcon FALSE, nel primo comando.

Vorrei copiarli su una chiavetta USB in modo tale che quando collego questa USB al mio laptop, esegue automaticamente il file "sblocco", e non appena lo scollego, il file "blocco" è eseguito.

Non so fino a che punto sia possibile e quali inconvenienti / problemi possa comportare, ma qualsiasi aiuto o input è molto apprezzato. Lo sto facendo anche solo per divertimento, quindi sto perfettamente bene con la sperimentazione!


Keyboard Maestro 6 apparentemente ha una funzionalità come questa, ma non l'ho ancora usata. C'è anche EventScripts: mousedown.net/mouseware/EventScripts.html che potrebbe essere in grado di fare quello che stai cercando.
TJ Luoma,

Risposte:


2

Un launchdservizio supporta l'opzione WatchPaths, che avvia un programma quando i contenuti di una cartella vengono modificati:

WatchPaths <array di stringhe> Questa chiave opzionale provoca l'avvio del lavoro se uno dei percorsi elencati viene modificato.

Guardando / Volumes, è possibile creare uno script shell che verifichi se il disco esterno è montato o meno ° ed eseguirà i comandi appropriati °°.

° Il modo più semplice sarebbe verificare la presenza di una cartella / Volumes / nome-disco / cartella, ma sarebbe anche il più semplice da ingannare rinominando la partizione o avendone un'altra con lo stesso nome, facendo in modo che il punto di montaggio sia modificato.

°° Sarebbe opportuno utilizzare un file temporaneo che memorizzi il risultato dell'ultima esecuzione per evitare di uccidere il Finder se un altro disco dovesse essere [non] montato.


0

Non sono riuscito a farlo funzionare in modo affidabile, ma potresti provare a salvare un elenco di proprietà come questo come ~/Library/LaunchAgents/showall_external.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>showall_external</string>
    <key>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>-c</string>
        <string>k=com.apple.Finder\ AppleShowAllFiles
sleep 3
if [[ -d /Volumes/WD/ ]]; then
    if [[ $(defaults read $k) = 0 ]]; then
        defaults write $k -bool true
        osascript -e 'quit app "Finder"'
    fi
else
    if [[ $(defaults read $k) = 1 ]]; then
        defaults write $k -bool false
        osascript -e 'quit app "Finder"'
    fi
fi</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Volumes/WD/</string>
    </array>
</dict>
</plist>

Può essere caricato con launchctl load ~/Library/LaunchAgents/showall_external.plisto disconnettendosi e rientrando.

Senza il comando sleep / Volumes / WD / a volte esisteva quando il volume veniva smontato. Il programma viene eseguito anche quando i file in / Volumes / WD / vengono modificati, quindi controlla prima il valore corrente della chiave. Il programma viene limitato se è stato eseguito negli ultimi 10 secondi, quindi potrebbe esserci un ritardo fino a 10 secondi prima di essere eseguito.

ControlPlane può eseguire uno script quando è collegato un dispositivo USB, ma non sono riuscito a capire come eseguire uno script quando un dispositivo USB è disconnesso o viene espulso un volume.

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.