0 votos

¿Cómo montar automáticamente la red compartida cuando se abre la pantalla de copia de seguridad del iPhone en el Finder?

Me gustaría desencadenar un script que monte una unidad cuando abra la página de dispositivos del iPhone en Finder (como se muestra aquí ).

enter image description here

Actualmente, tengo las copias de seguridad del iPhone en un volumen APFS, que está dentro de un SparseBundle, que está en un recurso compartido SMB en mi NAS.
Antes de ejecutar una copia de seguridad del iPhone, monto la unidad ejecutando manualmente un shell script.

Como trabajo en un MacBook, la LAN con mi NAS no siempre está disponible, de ahí el rodeo con el montaje manual. Pero desencadenar el proceso de montaje automáticamente al entrar en la página en el finder parece una buena idea.

  • ¿Hay algún evento disparado al que adjuntar un script de este tipo?
  • ¿O tal vez hay algún otro método sensato para montar la unidad automáticamente?

1voto

user3439894 Puntos 5883

Sí, un script puede activarse cuando el iPhone está conectado...

Cuando el iPhone está conectada al Mac , lo siguiente archivo se modifica:

/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist

Utilizando un Agente de lanzamiento con un WatchPaths clave se puede determinar si el iPhone está conectado al Mac cuando el NetworkInterfaces.plist archivo se modifica.

A modo de prueba, he creado el agente de lanzamiento como:

$HOME/Library/LaunchAgents/com.me.iphone.connected.plist

Contenido del com.me.iphone.connected.plist archivo :

<?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>com.me.iphone.connected</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/iPhone</string>
    </array>
    <key>RunAtLoad</key>
    <false/>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string>
    </array>
</dict>
</plist>

En el LISTA XML archivo , /usr/local/bin/iPhone es un shell script que se ejecuta cuando hay un cambio en el NetworkInterfaces.plist archivo y el contenido del shell script es:

#!/bin/zsh

iPhone="$(/usr/bin/defaults read /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist | /usr/bin/grep -m 1 -o 'iPhone')"

if [[ -n "$iPhone" ]]; then
    if [[ -d "/Volumes/Data" ]]; then
        if [[ ! -d "/Volumes/iPhone Backup" ]]; then
            open "/Volumes/Data/iPhone_Backup.sparsebundle"
        fi
    fi
fi

Cuando el ejemplo shell script se ejecuta asume que ya estoy conectado al Compartir la red , en este ejemplo es " Datos ", pero primero establece el valor de la iPhone variable utilizando el defaults comando a leer el .plist archivo y tubos su salida a grep para devolver la primera aparición de " iPhone " si se encuentra. Si el iPhone está conectado, entonces iPhone="iPhone" y el prueba en la primera if declaración tiene éxito.

El siguiente prueba tiene éxito si estoy conectado a Datos y la posterior prueba tiene éxito si no estoy ya conectado a mi Copia de seguridad del iPhone sparsebundle . Está codificado de esta manera para no intentar abrir el sparsebundle si ya está montado si el NetworkInterfaces.plist archivo se modifica de nuevo mientras el sparsebundle ya está montado. En otras palabras, el sparsebundle sólo se abre si no está ya montado.

Si también desea el montaje de la SMB compartir que se produzca, por ejemplo, en el iPhone , shell script puede añadir el siguiente ejemplo comando directamente después de la apertura de la primera if declaración . En otras palabras, literalmente entre los dos primeros if declaraciones :

/usr/bin/osascript -e 'mount volume "smb://user:@server/share"'

Esto utiliza AppleScript código para montar el cuota de destino y asume que las credenciales ya están almacenadas en su Llavero . Tampoco es problemático si el SMB compartir ya está montado, entonces el comando simplemente falla en silencio.


Notas:

Si hubiera incluido el script o código que ya está utilizando, habría creado un ejemplo de trabajo que lo hubiera incorporado, sin embargo lo que he presentado es un ejemplo que me funciona probado bajo MacOS Catalina .

Le recomiendo que lea el páginas del manual para launchctl , launchd.plist y launchd . Puede leer el página del manual para command en Terminal tecleando command y luego haga clic con el botón derecho del ratón y seleccione: Abrir la página del hombre

Después de crear el $HOME/Library/LaunchAgents/com.me.iphone.connected.plist archivo Lo he cargado utilizando el launchctl comando Por ejemplo:

cd "$HOME/Library/LaunchAgents/"
launchctl load com.me.iphone.connected.plist

Una vez cargado, se cargará automáticamente cuando accedas a tu cuenta, por lo que no deberías tener que volver a hacerlo manualmente en circunstancias normales. Para descargarlo, utilice el botón unload subcomando con el launchctl comando .

Después de descargarlo, puede utilizar el disable subcomando para que no se vuelva a cargar o puedes borrar el archivo . plist archivo Si quieres deshacer los cambios que has hecho en tu sistema .

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