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

He estado tratando de escribir un file plist en el que, cuando regrese del modo de suspensión, siempre desee hacer que mi Mac scope el volumen mínimo. Sin embargo, parece que el siguiente plist no funciona, con un error: 1:1: syntax error: Expected string but found end of script. (-2741) 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 command osascript funciona bien si lo ejecuto desde el Terminal, así que creo que se debe a cómo configuré mi list de arguments al plist.

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

Sospecho que podría ser mejor escribir el command osascript en el script de shell y cargar el script de shell para permitir que el volumen del Mac se minimice … ¿pero es el enfoque correcto?

Yo uso OS X Mavericks 10.9.2.

  • ¿El directory / Developer todavía es necesario para Xcode en OS X Mavericks?
  • ¿Hay alguna manera de configurar una MacBook Pro para que no duerma cuando cierras la tapa?
  • Indica que la pantalla de la aplicación no está ampliada
  • No se puede abrir Terminal en mac (post de error "No se permite el uso")
  • ¿La actualización a Lion boostá el performance y la capacidad de respuesta?
  • ¿Es posible exportar desde la aplicación Fotos sin los cuadros de dialog duales?
  • Algunos de mis marcadores de Safari no aparecen en los resultados de búsqueda de Spotlight
  • No se puede instalar OS X en este antiguo eMac formateado
  • 2 Solutions collect form web for “¿Cómo reiniciar el volumen de OS X después de dormir usando launchd?”

    El segundo formatting de ticket de trabajo de lanzamiento es casi correcto. Solo es necesario eliminar un set de citas.

    Citas

    Las citas ya no son necesarias en el segundo ticket de trabajo de lanzamiento, así que cambie:

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

    …a…

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

    Agrupación de arguments

    En este caso, las comillas agruparon el set de arguments para osascript para ver como un solo elemento. Así, osascript obtiene dos arguments, la bandera -e y la secuencia de commands. Esto cumple con los requisitos del manual de osascript .

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

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

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

    LaunchAgent

    Asegúrese de agregar este trabajo de lanzamiento como ~/Library/LaunchAgents ya que osascript requiere un usuario activo con una session gráfica.

    Este enfoque se aproxima a lo que hago con Power Manager en Cómo configurar el volumen al iniciar session .

    La segunda plist debería funcionar si elimina las comillas adicionales, pero solo ejecuta el command al iniciar session y no después de despertarse.

    Puede usar el observador de sueño para ejecutar un command después de despertarse del sueño. Ejecute sudo -v y pegue 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 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).