Come resettare il volume di OS X dopo aver dormito usando launchd?

2

Sto provando a scrivere un file plist in cui quando torno dalla modalità di sospensione, voglio sempre aumentare il volume del mio Mac. Tuttavia, sembra che il seguente plist non funzioni, con un errore: 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>

Inoltre, quando quanto segue non funziona:

<?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>

Il comando osascript funziona bene se lo eseguo da Terminal, quindi penso che sia dovuto al modo in cui ho impostato il mio elenco di argomenti sul plist.

Quindi è fattibile prendere l'argomento stringa come "~" in launchd? O ci sono altre cose che mi mancano qui?

Sospetto che potrebbe essere meglio scrivere il comando osascript nello script della shell e caricare lo script della shell per consentire di ridurre al minimo il volume del Mac ... ma è l'approccio corretto?

Uso OS X Mavericks 10.9.2.

    
posta Blaszard 27.04.2014 - 07:46
fonte

2 risposte

2

Il secondo formato del ticket di lavoro launchd è quasi corretto. È necessario rimuovere solo un insieme di virgolette.

Citazioni

Le virgolette non sono più necessarie nel secondo ticket di lavoro di avvio, quindi cambia:

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

... a ...

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

Argomenti di raggruppamento

In questo caso, le virgolette raggruppavano il set di argomenti per osascript per vedere come un elemento. Pertanto osascript ottiene due argomenti, il flag -e e lo script. Questo soddisfa i requisiti del manuale utente .

Quando viene chiamato attraverso Terminal.app e quindi attraverso la shell, le virgolette sono necessarie per eseguire il raggruppamento. Quando osascript ottiene gli argomenti, la shell ha rimosso le virgolette.

Senza virgolette, gli spazi suddividono ogni elemento passato tramite la shell.

Se chiamato attraverso un avvio del ticket di lavoro , il raggruppamento è intrinseco all'interno della matrice passata come ProgramArguments . Nel primo ticket, l'array conteneva nove elementi e nel secondo ticket, l'array ne conteneva tre.

LaunchAgent

Assicurati di aggiungere questo lavoro launchd come ~/Library/LaunchAgents come osascript richiede un utente attivo con una sessione grafica.

Questo approccio si avvicina a quello che faccio con Power Manager in Come impostare il volume durante l'accesso .

    
risposta data 27.04.2014 - 09:26
fonte
2

Il secondo plist dovrebbe funzionare se si rimuovono le virgolette aggiuntive, ma viene eseguito solo il comando all'accesso e non dopo il risveglio dal sonno.

Puoi usare sleepwatcher per eseguire un comando dopo esserti svegliato dal sonno. Esegui sudo -v e incolla righe come questa in una 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
    
risposta data 30.04.2014 - 12:23
fonte

Leggi altre domande sui tag