Mise en sourdine du volume système lors de la déconnexion à l'aide de l'agent de lancement


2

J'essaie de créer un script pour couper le volume du système. Ce script est déclenché à la fermeture ou à la fermeture de session. Cela évite d’entendre très fort le carillon de démarrage au prochain démarrage de la machine.

À l'aide des instructions fournies dans ce message , j'ai créé un RunAtLoadagent de lancement qui appelle le script présenté ci-dessous:

#!/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'idée est que le script est appelé et mis en veille jusqu'à ce qu'il reçoive l'un des signaux piégés. La onLogoutfonction est alors appelée pour couper le volume.

Actuellement, il ne fonctionne pas comme prévu. Le volume reste inchangé lorsque je me déconnecte puis me reconnecte. Toutefois, j'ai constaté que, si je décharge manuellement l'agent de lancement qui lance le script (à l'aide d'un launchctl unloadappel), il fonctionne parfaitement. Le volume du système est immédiatement coupé.

Au début, je pensais que le script ne recevait peut-être pas les signaux piégés lorsque je me déconnectais. Mais après avoir ajouté du code de débogage à la onLogoutfonction, comme indiqué ci-dessous, j’ai éliminé cela comme cause possible.

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

Lorsque j'ai effectué une déconnexion et une nouvelle connexion, il y avait un "log.txt"fichier sur le bureau avec les deux lignes de débogage Before muteet After muteprésentes.

Et je ne crois pas que la raison en soit que l’ osascriptappel pour la mise en sourdine échoue lorsqu’une déconnexion est effectuée. En raison de la set -o errexitligne dans le script, si une partie du script échoue, il doit alors en arrêter l'exécution et quitter immédiatement. Cela signifie que si l'opération de mise en sourdine échoue, je ne devrais pas voir la After mutingligne dans mon fichier journal. En effet, lorsque j'ai testé cela en remplaçant la osascriptligne par un élément dont l'échec était garanti, le journal contenait uniquement la Before mutingligne attendue.

Je n'arrive pas à expliquer ce qui se passe. Il onLogoutest clair que la fonction est appelée correctement, comme expliqué ci-dessus, mais pour une raison quelconque, l' osascriptappel ne semble être exécuté que lorsque je décharge manuellement en utilisant launchctl. Lorsque je me déconnecte manuellement, il l'ignore en quelque sorte.

Toute aide serait grandement appréciée.

Réponses:


2

Dans Terminal, exécutez la commande suivante pour désactiver complètement le carillon jusqu'à ce qu'il soit réactivé:

sudo nvram SystemAudioVolume=%80

Si ce paramètre n'est pas conservé, essayez:

sudo nvram SystemAudioVolume=%01

sudo nvram SystemAudioVolume=%00

ou

sudo nvram SystemAudioVolume=" "

Pour réactiver le carillon:

sudo nvram -d SystemAudioVolume

Informations recueillies auprès 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/


Cela marche. La plupart du temps. J'ai cette valeur définie et a été accueilli ce matin avec un son de carillon en plein essor. Pouvez-vous préciser quand cette valeur sera remplacée ou ignorée?
LangLangC

Hmmm. Il devrait rester avec ce paramètre. J'ai ajouté d'autres commandes à ma réponse pour essayer si% 80 ne fonctionne pas.
IconDaemon

À un moment ou à un autre, je les ai toutes essayées. nvram -p répertorie actuellement% 80. Les dernières douzaines de bottes étaient silencieuses. Ils semblent tous travailler seulement 99% du temps. Qu'en est-il de SystemAudioVolumeDB? Cette valeur change arbitrairement.
LangLangC

Quelle version d'OS X / macOS utilisez-vous? Je ne peux pas obtenir que cela fonctionne sur Sierra. J'ai essayé toutes les variations des valeurs ( %80, %01, %00, " "), mais je reçois le carillon chaque fois. %80semble être la valeur magique bien, car quand je mute manuellement le volume du système puis redémarrez ( ce qui est jusqu'à présent le seul moyen infaillible de ne pas avoir carillon), des nvramrapports %80pour les deux SystemAudioVolumeet SystemAudioVolumeDB. Mais le problème est que ces valeurs sont réinitialisées à :et %e4chaque fois que je redémarre ou que je m'arrête sans avoir d'abord coupé le volume moi-même.
fractal_sounds
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.