Başlatma aracısını kullanarak oturumu kapattıktan sonra sistem sesini kapatma


2

Oturumu kapatıp kapatırken tetiklenen sistem sesini kapatmak için bir komut dosyası oluşturmaya çalışıyorum. Bu, makineyi bir sonraki açışımda başlatma sesini gerçekten yüksek sesle duymaktan kaçınmak içindir.

Verilen yönergeleri kullanarak bu yazı , ben yarattık RunAtLoadaşağıda gösterilen komut dosyasını çağırır fırlatma agent:

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

Komutun çağrıldığı ve kapana kısılmış sinyallerden birini alana kadar uykuya çekildiği fikri, bu noktada onLogoutses seviyesini kapatmak için işlevin çağrıldığı yer.

Şu anda amaçlandığı gibi çalışmıyor, oturumu kapatıp tekrar oturum açtığımda ses seviyesi değişmiyor. Ancak betiği başlatan başlatıcıyı el ile kaldırırsam (bir launchctl unloadçağrı kullanarak ), o zaman mükemmel çalıştığını buldum . Sistem sesi hemen kapatıldı.

Başlangıçta, çıkış yaptığımda, kapana kısılmış sinyallerin senaryo tarafından alınmadığını düşündüm. Ancak onLogout, aşağıda gösterilen işleve bazı hata ayıklama kodları ekledikten sonra , bunu olası bir neden olarak ortadan kaldırdım.

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

Bir logout gerçekleştirilen ve geri giriş yaptığında, bir orada "log.txt"iki ile masaüstünde dosya Before muteve After muteayıklama hatları mevcut.

Ve bunun sebebinin, osascriptsusturma çağrısının bir oturum kapatma işlemi sırasında bir şekilde başarısız olduğunun olduğuna inanmıyorum . Koddaki set -o errexitsatır nedeniyle , komut dosyasının herhangi bir kısmı arızalanırsa, yürütmeyi durdurması ve derhal çıkması gerekir. Bu, susturma işlemi başarısız olursa, satırımı günlük dosyamda görmemem gerektiği anlamına gelir After muting. Gerçekten, bunu test ettiğimde, osascripthattın başarısız olacağının garantisi olduğunu bildiğim bir şeyle değiştirdiğimde , günlük yalnızca Before mutingbeklendiği gibi satırı içeriyordu .

Neler olduğunu açıklamak için kayboldum. Açıkça, onLogoutişlev yukarıda açıklandığı gibi doğru bir şekilde çağrılıyor, ancak bir nedenden dolayı osascriptçağrı yalnızca manuel olarak kaldırdığımda çalışıyor gibi görünüyor launchctl. Manuel olarak çıkış yaptığım zaman bir şekilde atlıyor.

Herhangi bir yardım çok takdir edilecektir.

Yanıtlar:


2

Terminal'de, zili yeniden etkinleştirilinceye kadar tamamen devre dışı bırakmak için aşağıdaki komutu uygulayın:

sudo nvram SystemAudioVolume=%80

Bu ayar korunmazsa, şunu deneyin:

sudo nvram SystemAudioVolume=%01

sudo nvram SystemAudioVolume=%00

veya

sudo nvram SystemAudioVolume=" "

Zili yeniden etkinleştirmek için:

sudo nvram -d SystemAudioVolume

Bilgi şuradan toplandı:

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/


Bu çalışıyor. Çoğu zaman. Bu değeri ayarladım ve bu sabah bir patlama sesi ile karşılandı. Bu değerin ne zaman geçersiz kılınacağını veya yok sayılacağını belirtebilir misiniz?
LangLangC

Hmmm. Bu ayarda kalmalı. % 80 çalışmıyorsa denemek için cevabıma başka komutlar ekledim.
IconDaemon

Bir noktada ya da diğerinde hepsini denedim. nvram -p şu anda% 80'i listeliyor. Son onuncu ya da öylesine çizme sessizdi. Hepsi zamanın sadece% 99'unu çalışıyor gibi görünüyor. Peki ya SystemAudioVolumeDB? Bu değer keyfi olarak değişir.
LangLangC

Siz hangi OS X / macOS sürümünü kullanıyorsunuz? Bunun Sierra üzerinde çalışmasını sağlayamıyorum. Ben değerler (varyasyon tüm denedim %80, %01, %00, " "), ama ahenge her zaman olsun. %80el Sistem sesini kapatmak ve daha sonra (şimdiye kadar hiçbir zilini sahip tek SureFire yolu olan) yeniden başlattığınızda beri olsa sihirli değerini olarak görünüyor, nvramraporları %80her ikisi için SystemAudioVolumeve SystemAudioVolumeDB. Ancak sorun şu ki, bu seslerin sırasıyla sesi kapatmadan önce yeniden başlattığımda veya kapattığımda sıfırlanması :ve sıfırlanması %e4.
fractal_so
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.