Audio and microphone
Game audio
Section titled “Game audio”Audio comes from the session’s audio sidecar (PipeWire, serving a PulseAudio socket), encoded as Opus, on its own peer connection separate from video. A struggling video stream doesn’t drag audio down. Nothing to configure.
Make audio failure stop the session
Section titled “Make audio failure stop the session”By default, if the audio sidecar is unavailable, the session continues without sound. A misconfiguration can then mute every session on a host with only a log warning. To make the session fail instead:
QUASAR_AUDIO_REQUIRED=1Use this when sound is required. Admin ▸ Sessions, session detail, shows whether audio degraded and why.
The audio sidecar must come from the same image family as the agent. A mismatched image can lack PipeWire and the session runs silent.
Microphone capture
Section titled “Microphone capture”To use a microphone:
- The administrator enables it under Admin ▸ Settings. Off by default, enforced on the server. A launch that asks for a microphone while it’s off still starts, just without one.
- The user turns it on with the microphone button on the session bar. It is off at the start of every session; nothing makes it hot on connect.
- The browser grants permission. This needs HTTPS: plain HTTP can’t use the microphone.
A live microphone shows a persistent indicator that can’t be dismissed or hidden.
Inside the container the microphone appears as a normal capture device, so Steam and games offer it. The format is fixed at stereo Opus, 48 kHz, because Chrome rejects anything else.
The host kill switch
Section titled “The host kill switch”QUASAR_MIC_DISABLED=1Disables microphone capture on this host’s agent, overriding the instance setting.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Check |
|---|---|
| No sound at all | Session detail for degraded audio, then that the sidecar image matches the agent image. Set QUASAR_AUDIO_REQUIRED=1 so the next one fails visibly. |
| Microphone button missing | The instance setting is off. |
| Button present but does nothing | Browser permission denied, page not on HTTPS, or input is captured (release capture first). |
| Sound in some apps only | The app picked a different output device inside the container. That’s the app’s own setting. |