我是 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
作为 Glen 答案的补充,出于安全原因,最好使用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
为什么sudoedit
更好,在这个超级用户问题中得到了充分的解释,sudoedit:为什么要用它代替 sudo vi?