2 votos

¿Cómo restablecer el volumen de OS X después de dormir usando launchd?

Estoy tratando de escribir un archivo plist en el que cuando vuelvo del modo de suspensión, siempre quiero hacer mi volumen Mac a la cantidad mínima. Sin embargo, parece que el siguiente plist no funciona, con un error: 1:1: syntax error: Expected string but found end of script. (-2741)

<?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>KeepAlive</key>
        <false/>
        <key>Label</key>
        <string>my.plist</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/osascript</string>
            <string>-e</string>
            <string>"</string>
            <string>set</string>
            <string>volume</string>
            <string>output</string>
            <string>volume</string>
            <string>0</string>
            <string>"</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Además, cuando lo siguiente no funciona:

<?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>KeepAlive</key>
        <false/>
        <key>Label</key>
        <string>my.plist</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/osascript</string>
            <string>-e</string>
            <string>"set volume output volume 0"</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

El osascript El comando funciona bien si lo ejecuto desde el Terminal, por lo que creo que se debe a la forma en que configuro mi lista de argumentos en el plist.

Entonces, ¿es factible tomar el argumento de la cadena como "~" ¿en el lanzamiento? ¿O hay algunas otras cosas que me estoy perdiendo aquí?

Sospecho que sería mejor escribir el osascript en el shell script, y cargar el shell script para que el volumen del Mac se minimice... pero ¿es el enfoque correcto?

Utilizo OS X Mavericks 10.9.2.

2voto

Steve Evans Puntos 155

El segundo formato de ficha de trabajo de launchd es casi correcto. Sólo hay que eliminar un conjunto de comillas.

Citas

Las comillas ya no son necesarias en la segunda ficha de trabajo de launchd, así que cambia:

<string>"set volume output volume 0"</string>

a

<string>set volume output volume 0</string>

Agrupación de argumentos

En este caso, las comillas agrupan el conjunto de argumentos para osascript para ver como un elemento. Así, osascript recibe dos argumentos, la bandera -e y el script. Esto cumple con los requisitos de la manual de osascript .

Cuando se llama a través de Terminal.app y por lo tanto a través del shell, las comillas son necesarias para realizar la agrupación. Cuando osascript obtiene los argumentos, el shell ha eliminado las comillas.

Sin las comillas, los espacios subdividen cada elemento pasado a través del shell.

Cuando se llama a través de un ficha de trabajo de launchd la agrupación es intrínseca dentro del array pasado como ProgramArguments . En el primer billete, la matriz contenía nueve elementos y en el segundo billete, la matriz contenía tres.

LaunchAgent

Asegúrese de añadir este trabajo launchd como ~/Library/LaunchAgents como osascript requiere un usuario activo con una sesión gráfica.

Este enfoque se aproxima a lo que hago con Power Manager en Cómo ajustar el volumen al iniciar la sesión .

2voto

El segundo plist debería funcionar si eliminas las comillas extra, pero sólo ejecuta el comando al iniciar sesión y no después de despertar del sueño.

Puede utilizar vigilante del sueño para ejecutar un comando después de despertarse del sueño. Ejecutar sudo -v y pegar líneas como esta en un shell:

curl http://www.bernhard-baehr.de/sleepwatcher_2.2.tgz|tar -x
sudo mkdir -p /usr/local/sbin /usr/local/share/man/man8
sudo cp sleepwatcher_2.2/sleepwatcher /usr/local/sbin
sudo cp sleepwatcher_2.2/sleepwatcher.8 /usr/local/share/man/man8
cp sleepwatcher_2.2/config/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist
echo $'#!/bin/sh\nosascript -e "set volume output volume 0"'>~/.sleep
chmod +x ~/.sleep

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