MS-DOS 6.22 VM with audio through SPICE has no audio.

Techflash

New Member
Aug 2, 2023
5
0
1
Hello. I am attempting to use an MS-DOS 6.22 VM on Proxmox VE. The application I am running lists compatibility with AC97, as well as some Intel HDA cards.
I tested both, and they are both detected, and initialized during startup of the app. However, connecting via `remote-viewer` has no audio output.
Does anybody know what the issue could be?
 
I have already read this page, and my VM was already set up accordingly, however it didn't work, that's the reason that I posted here.
It assumes you can install a SPICE server or agent inside the VM. I assume there is no such thing for MS-DOS. Maybe QEMU can emulate sound cards of that time like a SoundBlaster or AdLib? You can pass QEMU arguments via the args:-setting in the VM configuration file. I don't expect them to work well with the SPICE remote-viewer though. Maybe FreeDOS or DosBox might be an easier way to go?
 
Hello. I am attempting to use an MS-DOS 6.22 VM on Proxmox VE. The application I am running lists compatibility with AC97, as well as some Intel HDA cards.
I tested both, and they are both detected, and initialized during startup of the app. However, connecting via `remote-viewer` has no audio output.
Does anybody know what the issue could be?
Are you connecting to the VM from HOST( promxox) or from 3rd Computer remotely?

There is a solution for that without using SPICE.
( If you on the HOST - proxmox, your soundcard directly connected to you )

We using directly the HOST's pulseaudio for the audio ( it is faster than the SPICE ).
(If you connect from 3rd Computer remotely to the VM, more extra configuration needed! )

Proxmox HOST:

Code:
$> apt-get install pulseaudio

Code:
# We need a separate user for the Pulseaudio daemon.
# The "pulse" user created by the "pulseaudio" package, but we dont use this user, need a separate user with HOME directory, without shell.
# $> id pulse
$> useradd -g pulse -G audio -s /sbin/nologin -m pulseaudio

Code:
# We need to add the "root" user to the "audio" group, because otherwise the qemu can't connect to the pulseaudio socket file
$> usermod -G audio root

Code:
# Modify the file:
/etc/pulse/default.pa

load-module module-native-protocol-unix auth-group=audio socket=/tmp/pulseserver

Code:
# Modify the file:
/etc/pulse/daemon.conf

exit-idle-time=-1

Code:
# Modify the file:
/etc/pulse/client.conf

default-server = unix:/tmp/pulseserver
autospawn = no

Code:
# Create following new file:
/etc/systemd/system/pulsedaemon.service

[Unit]
Description=Sound Server

[Service]
User=pulseaudio
ExecStart=/usr/bin/pulseaudio
Restart=on-failure

[Install]
WantedBy=sound.target

Code:
# Systemd daemon for the "pulsedaemon.service" that we created
$> systemctl enable pulsedaemon.service
$> systemctl restart pulsedaemon.service
$> systemctl status pulsedaemon.service

Code:
# Edit your VM config file, add to following:
# Before, remove all sound related device from the VM using the proxmox WEBGUI.

/etc/pve/qemu-server/<vmid>.conf
args: -device ich9-intel-hda,bus=pci.0,addr=0x1b -device hda-micro,audiodev=hda -audiodev pa,id=hda,server=unix:/tmp/pulseserver,out.mixing-engine=off


Code:
# Start you VM
$> qm start <vmid>

Done.
 
Last edited:
It assumes you can install a SPICE server or agent inside the VM. I assume there is no such thing for MS-DOS. Maybe QEMU can emulate sound cards of that time like a SoundBlaster or AdLib? You can pass QEMU arguments via the args:-setting in the VM configuration file. I don't expect them to work well with the SPICE remote-viewer though. Maybe FreeDOS or DosBox might be an easier way to go?
Both are unlikely, it really needs complete control over the hardware, DOSBox most definetly won't work, and FreeDOS is unlikely. Also, this app was designed for semi-modern PCs (no SB16 or AdLib support, it's real audio, not MIDI), just... running under DOS.
 
Are you connecting to the VM from HOST( promxox) or from 3rd Computer remotely?

There is a solution for that without using SPICE.
( If you on the HOST - proxmox, your soundcard directly connected to you )

We using directly the HOST's pulseaudio for the audio ( it is faster than the SPICE ).
(If you connect from 3rd Computer remotely to the VM, more extra configuration needed! )

Proxmox HOST:

Code:
$> apt-get install pulseaudio

Code:
# We need a separate user for the Pulseaudio daemon.
# The "pulse" user created by the "pulseaudio" package, but we dont use this user, need a separate user with HOME directory, without shell.
# $> id pulse
$> useradd -g pulse -G audio -s /sbin/nologin -m pulseaudio

Code:
# We need to add the "root" user to the "audio" group, because otherwise the qemu can't connect to the pulseaudio socket file
$> usermod -G audio root

Code:
# Modify the file:
/etc/pulse/default.pa

load-module module-native-protocol-unix auth-group=audio socket=/tmp/pulseserver

Code:
# Modify the file:
/etc/pulse/daemon.conf

exit-idle-time=-1

Code:
# Modify the file:
/etc/pulse/client.conf

default-server = unix:/tmp/pulseserver
autospawn = no

Code:
# Create following new file:
/etc/systemd/system/pulsedaemon.service

[Unit]
Description=Sound Server

[Service]
User=pulseaudio
ExecStart=/usr/bin/pulseaudio
Restart=on-failure

[Install]
WantedBy=sound.target

Code:
# Systemd daemon for the "pulsedaemon.service" that we created
$> systemctl enable pulsedaemon.service
$> systemctl restart pulsedaemon.service
$> systemctl status pulsedaemon.service

Code:
# Edit your VM config file, add to following:
# Before, remove all sound related device from the VM using the proxmox WEBGUI.

/etc/pve/qemu-server/<vmid>.conf
args: -device ich9-intel-hda,bus=pci.0,addr=0x1b -device hda-micro,audiodev=hda -audiodev pa,id=hda,server=unix:/tmp/pulseserver,out.mixing-engine=off


Code:
# Start you VM
$> qm start <vmid>

Done.
Won't work, I need remote audio via another device, not output via the speakers (since there are none) on the Proxmox host.
 
FreeDOS is not an emulated DOS, it is intended to run on real hardware. But it comes with some more modern drivers and things as compared with MD-DOS 6.22. It is actually intended for exactly your use-case of "DOS program running on modern hardware". Just FYI.

Also, you're in a VM. The sound hardware is fake. That being said, there are ways to connect the QEMU emulated sound hardware to pulseaudio or pipewire but that's not built-in to Proxmox as far as I know. You could probably install pipewire on the host and then pass QEMU parameters to your VM to get it to send output to pipewire but I'm not an expert on how to do that.
 
FreeDOS is not an emulated DOS, it is intended to run on real hardware. But it comes with some more modern drivers and things as compared with MD-DOS 6.22. It is actually intended for exactly your use-case of "DOS program running on modern hardware". Just FYI.

Also, you're in a VM. The sound hardware is fake. That being said, there are ways to connect the QEMU emulated sound hardware to pulseaudio or pipewire but that's not built-in to Proxmox as far as I know. You could probably install pipewire on the host and then pass QEMU parameters to your VM to get it to send output to pipewire but I'm not an expert on how to do that.
I could try FreeDOS I guess, but I've had issues with it in the past, and I'm pretty sure it won't fix the issue of the SPICE audio not being sent to my viewer...
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!