2 votos

¿Cómo puedo autorun .archivos de comandos desde una unidad USB cuando lo conecto?

He hecho dos .archivos de comandos, "bloqueo" y "unlock". La primera se esconde archivos ocultos con: defaults write com.apple.Finder AppleShowAllFiles TRUE,, a continuación, actualiza el finder killall Finder. El segundo hace lo contrario, yo simplemente reemplazado TRUE con FALSE, en el primer comando.

Me gustaría copiar a una unidad USB de tal manera que cuando me conecte su USB en mi laptop, automáticamente se ejecuta el "desbloquear" archivo, y tan pronto como me desconecte, el "bloqueo" archivo es ejecutado.

No sé hasta qué punto esto es posible y qué inconvenientes o problemas que pueda conllevar, pero cualquier ayuda o aporte es muy apreciada. Yo también soy sólo lo hacen por diversión, así que estoy perfectamente de acuerdo con la experimentación!

2voto

Ryccardo Puntos 1021

Un launchd servicio admite la WatchPaths opción, que se lanza de un programa cuando el contenido de una carpeta se cambió:

WatchPaths <array de strings> Esta clave opcional hace que el trabajo debe iniciarse si alguno de la lista de rutas de acceso son modificados.

Viendo /Volúmenes, un script de shell puede ser creado que iba a comprobar si el disco externo está montado o no° y ejecutar los comandos apropiados°°.

° La forma más sencilla sería la comprobación de la presencia de un /Volúmenes/disco/ nombre de la carpeta, pero también sería el más sencillo engañar por el cambio de nombre de la partición o tener otro con el mismo nombre, causando el punto de montaje para ser modificado.

°° Sería apropiado utilizar un archivo temporal almacenar el resultado de la última ejecución para evitar matar el Finder si otro disco iba a ser [de la onu]montado.

0voto

No podía conseguir que esto funcione de forma fiable, pero se podría intentar guardar una lista de propiedades, como a ~/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>

Se puede cargar con launchctl load ~/Library/LaunchAgents/showall_external.plist o por salir y regresar.

Sin el sueño de comandos /Volúmenes/WD/ a veces existían cuando el volumen se está desmontando. El programa también se ejecuta cuando los archivos en /Volumes/WD/ son modificadas, por lo que se comprueba el valor actual de la clave de la primera. El programa se estrangulado si se ha ejecutado en los últimos 10 segundos, por lo que no puede haber un retraso de hasta 10 segundos antes de que se ejecute.

ControlPlane puede ejecutar una secuencia de comandos cuando un dispositivo USB está conectado, pero no pude averiguar cómo ejecutar una secuencia de comandos cuando un dispositivo USB está desconectado o un volumen que se expulsa.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X