Volume del sistema di muting al momento del logout usando l'agente di lancio

1

Sto tentando di creare uno script per disattivare il volume del sistema che viene attivato al momento della disconnessione o dello spegnimento. Questo per evitare di sentire il suono di avvio molto strong la prossima volta che avvierò la macchina.

Utilizzando le istruzioni fornite in questo post , Ho creato un agente di lancio RunAtLoad che chiama lo script mostrato di seguito:

#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

IFS=$'\n\t'

onLogout ()
{
    osascript -e "set volume output volume 0"
    exit
}

trap onLogout SIGINT SIGHUP SIGTERM

while true; do
    say starting
    sleep 86400 &
    wait $!
done

L'idea è che lo script è chiamato e fatto in modo di dormire finché non riceve uno dei segnali intrappolati, a quel punto viene chiamata la funzione onLogout per disattivare il volume.

Attualmente non funziona come previsto, il volume rimane invariato quando mi disconnetto e ricollego. Tuttavia, ho scoperto che se scarica manualmente l'agente di avvio che avvia lo script (utilizzando una chiamata launchctl unload ), allora funziona perfettamente. Il volume del sistema viene disattivato immediatamente.

Inizialmente pensavo che forse i segnali intrappolati non venivano ricevuti dalla sceneggiatura quando eseguivo un logout. Ma dopo aver aggiunto un po 'di codice di debug alla funzione onLogout come mostrato di seguito, l'ho eliminato come possibile causa.

onLogout ()
{
    printf "Before mute\n" >> ~/Desktop/log.txt
    osascript -e "set volume output volume 0"
    printf "After mute\n" >> ~/Desktop/log.txt
    exit
}

Quando ho eseguito un logout e effettuato l'accesso, c'era un file "log.txt" sul desktop con entrambe le righe di debugging Before mute e After mute presenti.

E non credo che la ragione sia che il richiamo di osascript per l'esecuzione del muting fallisce in qualche modo quando viene eseguito un logout. A causa della riga set -o errexit nello script, se qualche parte dello script fallisce, allora dovrebbe interrompere l'esecuzione e uscire immediatamente. Ciò significa che se l'operazione di muting ha esito negativo, non dovrei visualizzare la riga After muting nel mio file di registro. Infatti, quando ho provato questo sostituendo la riga osascript con qualcosa che sapevo che avrebbe avuto esito negativo, il registro conteneva solo la riga Before muting come previsto.

Non riesco a spiegare cosa sta succedendo. Chiaramente la funzione onLogout viene chiamata correttamente come spiegato sopra, ma per qualche motivo la chiamata a osascript sembra essere eseguita solo quando scarico manualmente usando launchctl . Quando esco manualmente, salta in qualche modo su di esso.

Qualsiasi aiuto sarebbe molto apprezzato.

    
posta fractal_sounds 01.11.2017 - 20:17
fonte

1 risposta

1

In Terminale, esegui il seguente comando per disattivare completamente la suoneria fino a riattivazione:

sudo nvram SystemAudioVolume=%80

Se questa impostazione non viene mantenuta, prova:

sudo nvram SystemAudioVolume=%01

sudo nvram SystemAudioVolume=%00

o

sudo nvram SystemAudioVolume=" "

Per riattivare la suoneria:

sudo nvram -d SystemAudioVolume

Informazioni ricavate da:

link

link

    
risposta data 01.11.2017 - 20:27
fonte

Leggi altre domande sui tag