[Contribute Advice] 关于pcie独立声卡自动省电问题
Tofloor
poster avatar
ksgt0025
deepin
an hour ago
Author

我的声卡有继电器,每次没有声音播放的时候,声卡就会进入省电模式,检测到需要有声音播放需求的软件或者有声音的网页时系统才会给声卡上电。当然这不是我的声卡自有的功能,而是linux系统省电机制问题。我用了不同的发行版,发现都有这个问题,我试着把性能模式改为高性能模式,但是也没能解决这个问题。这个问题会导致声卡的继电器来回的吸合,尤其是在晚上继电器的声音哒哒哒的声音令人烦躁。我通过DeepSeek,尝试了很多种方案,依次排除,寻得了一种较为完美的解决方案。方法就是创建一个udev的规则,并且在开机前自动运行这个规则文件。

创建udev规则:

sudo nano /etc/udev/rules.d/90-sound-power.rules

规则代码:

# 禁用声卡电源管理
SUBSYSTEM=="sound", ACTION=="add", RUN+="/bin/bash -c 'echo N > /sys/module/snd_hda_intel/parameters/power_save_controller'"
SUBSYSTEM=="sound", ACTION=="add", RUN+="/bin/bash -c 'echo 0 > /sys/module/snd_hda_intel/parameters/power_save'"
SUBSYSTEM=="sound", ACTION=="change", RUN+="/bin/bash -c 'echo N > /sys/module/snd_hda_intel/parameters/power_save_controller'"
SUBSYSTEM=="sound", ACTION=="change", RUN+="/bin/bash -c 'echo 0 > /sys/module/snd_hda_intel/parameters/power_save'"

创建脚本:

sudo nano /etc/systemd/system/udev-reload.service

创建服务规则代码:

[Unit]
Description=Reload Udev Rules with Delay
After=systemd-udevd.service multi-user.target
Wants=systemd-udevd.service

[Service]
Type=oneshot
Environment=PATH=/bin:/usr/bin:/sbin:/usr/sbin
ExecStartPre=/bin/sleep 15
ExecStart=/bin/udevadm control --reload-rules
ExecStart=/bin/udevadm trigger
RemainAfterExit=yes
TimeoutSec=60
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

启用服务后重启电脑:

sudo systemctl enable udev-reload.service
sudo systemctl start udev-reload.service

重启后敲入命令,如果分别是N和0则代表成功:

cat /sys/module/snd_hda_intel/parameters/power_save_controller
cat /sys/module/snd_hda_intel/parameters/power_save

上面这个代码可能不是很稳定,第一次用这个代码,切换电源模式的时候,比如高性能和平衡模式、省电模式来回切换,需要重启才能生效。但是我最近重新装了deepin25,并且重新使用了上方的代码,发现不管切换那种电源模式不会失效了。上一次的系统还是deepin25。还有就是写入grub文件、modprobe.d目录的方案都试过了,是无效的。声卡芯片:C-Media CM8828。

希望官方能重视一下这个问题,并且以更简洁的代码去解决这个问题。比如选择高性能和平衡模式的时候声卡不进行省电,选择节能模式可以节能。

Reply Favorite View the author
All Replies

No replies yet