Linux Ubuntu 揚聲器每隔幾秒鐘就會發出爆響

Linux Ubuntu 揚聲器每隔幾秒鐘就會發出爆響

我是 Linux Ubuntu 的新手,也是 Windows 的長期用戶,很高興我要轉換。在設定我的桌上型電腦時,大約每 2 秒我就會聽到煩人且重複的揚聲器「爆裂聲」。無論音量大小如何,都會發生這種爆裂聲。如果我拔掉揚聲器的音訊插孔,並僅使用主機板內建的揚聲器,它就會停止。如果我播放聲音,爆音會在播放聲音時停止,並持續約 5 秒,然後恢復。

我正在運行 Linux Ubuntu 18.04.3 LTS。系統資訊報告兩個音訊適配器,HDA-Intel - HDA ATI SB 和 HDA-Intel - HDA NVidia

我最終確實找到了這個問題的解決方案,但我沒有足夠的聲譽點來一起發布問答。

答案1

作業系統的預設行為是在 10 秒後關閉音訊適配器以節省電力。此省電功能會導致爆音,可以停用。

在終端機中鍵入sudo nano /sys/module/snd_hda_intel/parameters/power_save並將值從 1 變更為 0。

然後鍵入sudo nano /sys/module/snd_hda_intel/parameters/power_save_controller並將值從 Y 更改為 N。

在我的系統上,這立即解決了音頻爆音問題。然而,重新啟動後,問題又出現了,我發現這些值已經重置。為了保持這些值持久,我必須添加一行程式碼,/etc/modprobe.d/alsa-base.conf 我在文件中的最後一行程式碼之後添加了這行程式碼,options snd-hda-intel power_save=0 power_save_controller=N

儲存文件,然後就可以開始了!

我的大部分資訊都來自這個影片:https://www.youtube.com/watch?v=Pdmy8dMWitg

我必須拼湊出「重新啟動後的持久性」部分,即使我沒有安裝 TLP,我的設定也確實重置了。請注意,影片另有聲明。

在我弄清楚這一點之前,我對 Ubuntu 感到非常沮喪。我希望這可以幫助很多人解決他們的音訊問題!

答案2

作為 @Glen 回答的後續內容,這裡是執行該任務的腳本:

fix_ubuntu_18_04_sound_pop_issue(){
    __heredoc__="""
    Script that fixes a popping sound due to a power saving feature

    References:
        https://superuser.com/questions/1493096/linux-ubuntu-speakers-popping-every-few-seconds
        https://www.youtube.com/watch?v=Pdmy8dMWitg
    """
    sudo echo "obtaining sudo"
    # First, there are two system files that need modification
    # Changing the values here should fix the issue in your current session. 
    cat /sys/module/snd_hda_intel/parameters/power_save
    cat /sys/module/snd_hda_intel/parameters/power_save_controller
    # Flip the 1 to a 0
    sudo sh -c "echo 0 > /sys/module/snd_hda_intel/parameters/power_save"
    # Flip the Y to a N
    sudo sh -c "echo N > /sys/module/snd_hda_intel/parameters/power_save_controller"

    # To make this change persistant we must modify a config file
    if [ -f "/etc/default/tlp" ]; then
        # Some systems (usually laptops) have this controlled via TLP 
        sudo sed -i 's/SOUND_POWER_SAVE_ON_BAT=1/SOUND_POWER_SAVE_ON_BAT=0/' /etc/default/tlp
        # This line contained a typo, addressed on 2020-10-11 11:11 Bcn time
        sudo sed -i 's/SOUND_POWER_SAVE_CONTROLLER=Y/SOUND_POWER_SAVE_CONTROLLER=N/' /etc/default/tlp
    elif [ -f "/etc/modprobe.d/alsa-base.conf" ]; then
        # Append this line to the end of the file
        text="options snd-hda-intel power_save=0 power_save_controller=N"
        fpath="/etc/modprobe.d/alsa-base.conf"
        # Apppend the text only if it doesn't exist
        found="$(grep -F "$text" "$fpath")"
        if [ "$found" == "" ]; then
            sudo sh -c "echo \"$text\" >> $fpath"
        fi
        cat "$fpath"
    else
        echo "Error!, unknown system audio configuration" 1>&2
        exit 1
    fi
}

答案3

作為格倫答案的附錄,出於安全原因,最好使用sudoedit代替sudo nano。請注意,您還需要設定EDITOR環境變數。

所以,而不是:

sudo nano /sys/module/snd_hda_intel/parameters/power_save

使用

EDITOR=nano sudoedit /sys/module/snd_hda_intel/parameters/power_save

而不是

sudo nano /sys/module/snd_hda_intel/parameters/power_save_controller

使用

EDITOR=nano sudoedit /sys/module/snd_hda_intel/parameters/power_save_controller

這個超級用戶問題充分解釋了為什麼更好的原因sudoeditsudoedit:為什麼要使用它而不是 sudo vi?

相關內容