2 votos

Silenciar el volumen del sistema al cerrar la sesión mediante el agente de lanzamiento

Estoy intentando crear un script para silenciar el volumen del sistema que se activa al cerrar la sesión o al apagar. Esto es para evitar escuchar el timbre de inicio muy fuerte la próxima vez que inicie la máquina.

Utilizando las instrucciones proporcionadas en este puesto He creado un RunAtLoad agente de lanzamiento que llama al script que se muestra a continuación:

#!/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

La idea es que se llame al script y se le haga dormir hasta que reciba una de las señales atrapadas, momento en el que el onLogout para silenciar el volumen.

Actualmente no está funcionando como se pretende, el volumen se mantiene sin cambios cuando salgo y vuelvo a entrar. Sin embargo, he descubierto que si descargo manualmente el agente de lanzamiento que lanza el script (usando un launchctl unload ), entonces funciona perfectamente. El volumen del sistema se silencia inmediatamente.

Inicialmente pensé que quizás las señales atrapadas no estaban siendo recibidas por el script cuando realizaba un cierre de sesión. Pero después de añadir un poco de código de depuración al onLogout como se muestra a continuación, he eliminado esto como una posible causa.

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

Cuando hice un logout, y volví a entrar, había un "log.txt" en el escritorio con los dos Before mute y After mute líneas de depuración presentes.

Y no creo que la razón sea que el osascript La llamada para realizar el silenciamiento está fallando de alguna manera cuando se realiza un cierre de sesión. Debido a la set -o errexit en el script, si cualquier parte del script falla, entonces debería detener la ejecución y salir inmediatamente. Esto significa que si la operación de silenciamiento está fallando, no debería ver el After muting línea en mi archivo de registro. De hecho, cuando probé esto sustituyendo el osascript línea con algo que sabía que estaba garantizado para fallar, el registro contenía sólo el Before muting línea como se esperaba.

No sé cómo explicar lo que está pasando. Está claro que el onLogout se llama correctamente como se ha explicado anteriormente, pero por alguna razón la función osascript parece que sólo se ejecuta cuando descargo manualmente utilizando launchctl . Cuando cierro la sesión manualmente se salta de alguna manera.

Cualquier ayuda será muy apreciada.

2voto

En el Terminal, ejecute el siguiente comando para desactivar completamente el timbre hasta que se vuelva a activar:

sudo nvram SystemAudioVolume=%80

Si esta configuración no se mantiene, inténtelo:

sudo nvram SystemAudioVolume=%01

sudo nvram SystemAudioVolume=%00

o

sudo nvram SystemAudioVolume=" "

Para volver a activar el timbre:

sudo nvram -d SystemAudioVolume

Información obtenida de:

https://business.tutsplus.com/tutorials/how-to-silence-the-startup-chime-on-a-mac--cms-21212

https://www.howtogeek.com/260693/how-to-disable-the-boot-sound-or-startup-chime-on-a-mac/

0 votos

Esto funciona. La mayoría de las veces. Tengo este valor establecido y fui recibido esta mañana con un ruido de carillón. ¿Puede especificar cuándo se anula o ignora este valor?

0 votos

Hmmm. Debería quedarse con esa configuración. He añadido otros comandos a mi respuesta para probar si %80 no funciona.

0 votos

En un momento u otro los probé todos. nvram -p actualmente muestra %80. Las últimas docenas de botas estaban en silencio. Todos ellos parecen estar trabajando sólo el 99% del tiempo. ¿Qué pasa con SystemAudioVolumeDB? Ese valor cambia arbitrariamente.

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