1 votos

LaunchDaemon se ejecuta cuando se conecta un concentrador USB

Estoy intentando crear un LaunchDaemon que ejecute un script cuando se conecte un dock USB-C o Thunderbolt. He encontrado varias soluciones para ejecutar un script cuando se conecta un específico dispositivo está conectado. Pero necesito una solución que ejecute un script cuando cualquier muelle está conectado.

Como prácticamente todas las bases incluyen un concentrador USB, intenté identificarlos e incluirlos en un LauchDeamon: No hubo suerte. Entonces me fijé en simplemente desencadenar un script en cualquier dispositivo USB como este:

<key>LaunchEvents</key>
<dict>
        <key>com.apple.iokit.matching</key>
        <dict>
                <key>com.apple.device-attach</key>
                <dict>
                    <key>IOProviderClass</key>
                        <string>IOUSBHostDevice</string>
                        <key>IOMatchLaunchStream</key>
                        <true/>
                        <key>IOMatchStream</key>
                        <true/>
                </dict>
        </dict>
</dict>

(No los archivos completos)

Básicamente el mismo enfoque que he encontrado para dispositivos específicos, pero eliminando los identificadores de dispositivo. Tampoco hubo suerte.

He encontrado EventScript . Esta aplicación puede ejecutar un script cuando se conecta un dispositivo USB. Pero prefiero una solución que aproveche las herramientas/capacidades integradas en MacOS.

0voto

Riley4067440653 Puntos 81

He sido capaz de crear un demonio de lanzamiento que en mis pruebas limitadas se ejecuta cada vez que se monta cualquier unidad. Sin embargo, este demonio se ejecuta en más casos de los que debería, como explicaré más adelante.

<?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>com.example.mountdrive</string>

    <key>ProgramArguments</key>
    <array>
        <string>say</string>
        <string>Drive mounted.</string>
    </array>

    <key>WatchPaths</key>
    <array>
        <string>/Volumes/</string>
    </array>
</dict>
</plist>

Guarde este código en ~/Library/LaunchAgents/com.example.mountdrive.plist y cárguelo ejecutando sudo launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.mountdrive.plist (descargar cambiando el subcomando a arranque )

Cuando tengo este demonio cargado y conecto un dispositivo de almacenamiento portátil, puedo oír a mi Mac decir 'unidad montada' (suba el volumen o invoque otra utilidad para comprobarlo usted mismo).

Esto vigila cualquier cambio en el /Volumes que es donde aparecen las unidades de disco. Lamentablemente esto también significa que esto se activa cada vez que un dispositivo se desmonta, y también cuando se conecta un dispositivo que se activa una vez y otra vez cuando el montaje ha terminado correctamente. Aunque esto significa que el evento se dispara más a menudo de lo que quieres, creo que puedes usar este demonio para llamar a un shell script para comprobar que lo que ha cambiado en /Volumes es un evento que te interesa, y luego realizar la acción que quieres.

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