When VirtualBox is configured to use Intel HD Audio:
In a Debian 12 virtual machine using PulseAudio, audio works normally. Running systemctl --user status pulseaudio shows the message:
Disabling timer-based scheduling because running inside a VM
This triggers the fallback to the LPIB read method. The kernel log (dmesg) shows:
snd_hda_intel 0000:00:05.0: Invalid position buffer, using LPIB read method instead
In a Debian 13 virtual machine using PipeWire, there is no sound by default. Any of the following three methods can trigger the “using LPIB read method instead” fallback and restore audio functionality:
Method 1
cat /etc/modprobe.d/intelhda.conf
options snd-hda-intel position_fix=1
Method 2
cat \~/.config/wireplumber/wireplumber.conf.d/vbox+hda.conf
monitor.alsa.rules = \[
{
matches = \[
{
node.name = “\~alsa_input.pci.*"
cpu.vm.name = "\~.*”
}
{
node.name = “\~alsa_output.pci.*"
cpu.vm.name = "\~.*”
}
\]
actions = {
update-props = {
api.alsa.disable-tsched = true
}
}
}
\]
Method 3
aplay -D sysdefault /usr/share/sounds/alsa/Front_Center.wav
Explanation
Method 1 forces the driver to use the LPIB read method when the driver is loaded.
Method 2 works similarly to PulseAudio. For virtual machines, it disables timer-based scheduling (Disabling timer-based scheduling), which causes the snd_hda_intel driver to fall back to the LPIB read method.
Method 3 manually triggers the snd_hda_intel driver to switch to the LPIB read method.
For Debian 12 systems using PipeWire, the PipeWire/WirePlumber stack is relatively old. Even when using a Lua script (which is required by older WirePlumber versions), Method 2 is still unable to trigger the snd_hda_intel driver to switch to the LPIB read method. As a result, only Method 1 or Method 3 can be used.