Linux Stop the Pop
Prevent the “POP” from audio device when sound played
Debian Buster by default will have the power saving features enabled for most devices, this includes the audio device. This is all well and good when buster is installed on a mobile device, but is annoying on a desktop device.
The problem that this causes is that the kernel will shutdown the audio device in order to save power, with the downside that an audible pop/click will be heard when a sound is made (and example would be the “bell” in the terminal or a notification sound).
A few seconds after the sound is played the kernel will put the audio device back into power saving.
This can be temporarily disabled with the following two commands. This asumes you have an intel hda and will not survive a reboot.
echo 0 > /sys/module/snd_hda_intel/parameters/power_save
echo N > /sys/module/snd_hda_intel/parameters/power_save_controller
This will only work if you have an intel chipset on your system board and are using the inbuilt sound. If you are unsure, examine the pci bus
lspci -v
To make this setting stick I setup rc-local support in systemd. This will make systemd execute the /etc/rc.local script if it exists.
First, check to see if systemd has a rc-local service defined.
sudo systemctl status rc-local
By default this will not exist, so lets create one ! first we create a service definition file rc-local.service in /etc/systemd/system/
sudo nano /etc/systemd/system/rc-local.service
and past in the following contents
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Next, create /etc/rc.local and put the commands we used before to turn off the power saving feature.
sudo nano /etc/rc.local
Paste in the following:
#!/bin/bash
sleep 10
echo 0 > /sys/module/snd_hda_intel/parameters/power_save
echo N > /sys/module/snd_hda_intel/parameters/power_save_controller
Set the script to be executable.
chmod +x /etc/rc.local
Next we enable our service in systemd with:
sudo systemctl enable rc-local
and start it with:
sudo systemctl start rc-local.service
To confirm that the service is running:
sudo systemctl status rc-local.service
You should see output similar to this:
● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset:
Drop-In: /usr/lib/systemd/system/rc-local.service.d
└─debian.conf
Active: active (exited) since Sat 2019-09-07 09:37:45 AEST; 33min ago
Process: 4583 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
Reboot and enjoy your pop free sound!