-1 votos

Apple script funciona bien, necesita un interruptor de apagado

El siguiente script se ejecuta bien en la carpeta /etc y es llamado por un plist. Básicamente dice un texto cuando la batería está demasiado baja. Esta es una versión simplificada, el verdadero script es mucho más largo.

set Cap to (do shell script "ioreg -w0 -l | grep ExternalChargeCapable")

tell Cap to set {wallPower} to {last word of paragraph 1}
if wallPower = "Yes" then
    return 0
else
    set Pct to (do shell script "pmset -g batt | grep -Eo \"\\d+%\" | cut -d% -f1")
    if Pct  10 then
        display notification "Batterij 10%. Meteen opladen." with title "Batterij bijna leeg!" sound name "Sosumi"
        ##      delay 300
        say "Batterij 10%. Meteen opladen."
    end if
end if 

El problema es que no he encontrado una buena forma para un interruptor de apagado. El interruptor de muerte será operado por un usuario sin derechos de administrador.

Estoy abierto a cualquier sugerencia para un interruptor de apagado.

Como ejemplo, he encontrado este tema que implementa una condición si "No molestar" está activo. He insertado esto en el script y funciona bien en el propio script Editor, pero una vez que el script se copia en la carpeta /etc y es llamado por un plist la ejecución parece detenerse en esta línea:

  set statusOfDND to ¬
        (do shell script checkDNDstatusCMD) ¬
            as number as boolean

No estoy seguro de por qué, podría ser la configuración regional (estoy usando el holandés mientras que el propietario del script original utiliza el inglés (EE.UU.).

0voto

Steve Evans Puntos 155

Cruzar la barrera de la sesión de usuario no es trivial. Normalmente se utiliza una conexión de red sólo de host local, como TCP/IP o un puerto Mach. Estos son complejos de configurar con AppleScript.

A continuación se presentan un par de alternativas razonables.

Bandera basada en archivos

Podrías utilizar la existencia (o la ausencia) de un archivo para determinar cómo se comporta el script:

  • En el lanzamiento, script crea un archivo accesible en una ruta conocida:

    /Users/Shared/delete-to-stop-power-script.txt

  • Periódicamente, o a través de kqueue , el script puede comprobar que el archivo aún existe;

  • Al salir, el script debería eliminar el archivo.

El uso de archivos facilita la gestión de los permisos. Utilice chmod 0666 para permitir que cualquiera pueda borrar el archivo.

Los permisos de acceso del archivo pueden utilizarse para garantizar que sólo determinados grupos de usuarios puedan eliminar el archivo.

notifyutil

Utilice el menos conocido notifyutil utilidad:

notifyutil es una utilidad de línea de comandos para interactuar con el notificar(3) sistema de notificación y el servidor notifyd(8). Puede utilizarse para publicar notificaciones, detectar y reportar notificaciones, y examinar y establecer los valores de estado asociados a las claves de notificación.

notifyd permite a los procesos intercambiar valores enteros entre procesos y sesiones de usuario. El formato es deliberadamente simple y restringido para reforzar la seguridad.

Consulte la página del manual vinculada y la de Brett Terpstra Consejo rápido: notificaciones en todo el sistema con notifyutil para las muestras.

No hay votación

Si necesita una alternativa no electoral, Gestor de energía puede desencadenar scripts en los niveles de batería, ofrece un API de scripting de la fuente de alimentación Los usuarios que no son administradores pueden tener derechos para cancelar o detener eventos.

Soy un ingeniero de software relacionado con Power Manager, así que no dudes en hacerme preguntas técnicas sobre su funcionamiento.

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