[GH-ISSUE #325] Feature Request: Switch to PipeWire to enable VR support #226

Closed
opened 2026-10-15 12:58:27 +00:00 by bsakaguchi · 12 comments
Owner

Originally created by @macher91 on GitHub (Dec 30, 2025).
Original GitHub issue: https://github.com/games-on-whales/wolf/issues/325

I'd like to request a option to switch from PulseAudio to PipeWire to enable VR support on Wolf.

Currently, VR is impossible to run due to the PulseAudio dependency. I’ve verified a working solution using the Steam-Headless/docker-steam-headless image: after updating Mesa to the latest version and swapping the audio backend to PipeWire, VR works perfectly.

Implementing these changes in Wolf would unlock VR capabilities out of the box.

Thanks!

Originally created by @macher91 on GitHub (Dec 30, 2025). Original GitHub issue: https://github.com/games-on-whales/wolf/issues/325 I'd like to request a option to switch from PulseAudio to PipeWire to enable VR support on Wolf. Currently, VR is impossible to run due to the PulseAudio dependency. I’ve verified a working solution using the `Steam-Headless/docker-steam-headless` image: after updating Mesa to the latest version and swapping the audio backend to PipeWire, VR works perfectly. Implementing these changes in Wolf would unlock VR capabilities out of the box. Thanks!
Author
Owner

@Gylfkxjyjdll commented on GitHub (Dec 30, 2025):

I am very interested in this but Im on holiday until mid-January.
Do you use SteamVR Gamestream or Alvr? I tried it previously and was unsuccessful due to a different subnet between Docker and the host (a simple fix but I was unable to be patient due to work commitments).
Could you share a bit more about how you go about this?

<!-- gh-comment-id:3699731202 --> @Gylfkxjyjdll commented on GitHub (Dec 30, 2025): I am very interested in this but Im on holiday until mid-January. Do you use SteamVR Gamestream or Alvr? I tried it previously and was unsuccessful due to a different subnet between Docker and the host (a simple fix but I was unable to be patient due to work commitments). Could you share a bit more about how you go about this?
Author
Owner

@ABeltramo commented on GitHub (Jan 3, 2026):

Moonlight doesn't support VR streaming. Using something like Alvr with a Wolf session is outside the scope of this project and just "switching to PipeWire" wouldn't enable VR support 😉

<!-- gh-comment-id:3706971283 --> @ABeltramo commented on GitHub (Jan 3, 2026): Moonlight doesn't support VR streaming. Using something like Alvr with a Wolf session is outside the scope of this project and just "switching to PipeWire" wouldn't enable VR support 😉
Author
Owner

@macher91 commented on GitHub (Jan 10, 2026):

Sorry for the late answer. I have a custom steam-headless (josh5) with backport mesa (Trixie) and pipewire, Steam VR beta is working. I didn't say anything about moonlight. So with some adjustments it could work also on wolf images. Alvr is also working. I can share some proofs or I can put my custom steam-headless to GitHub repo. I think switching to edge mesa and pipewire could enable VR features, as Steam VR/alvr has own "streaming" server

<!-- gh-comment-id:3733388549 --> @macher91 commented on GitHub (Jan 10, 2026): Sorry for the late answer. I have a custom steam-headless (josh5) with backport mesa (Trixie) and pipewire, Steam VR beta is working. I didn't say anything about moonlight. So with some adjustments it could work also on wolf images. Alvr is also working. I can share some proofs or I can put my custom steam-headless to GitHub repo. I think switching to edge mesa and pipewire could enable VR features, as Steam VR/alvr has own "streaming" server
Author
Owner

@macher91 commented on GitHub (Jan 13, 2026):

@Gylfkxjyjdll @ABeltramo I was able to run Half-Life: Alyx using SteamVR Beta(no alvr) on wolf using pipewire container and custom steam docker image. I tried with default pulse server but its crashing. Also without updated mesa is not working.

Dockerfile:

FROM ghcr.io/games-on-whales/steam:edge

COPY --chmod=777 startup.sh /opt/gow/startup-app.sh
RUN apt update \
    && apt install -y software-properties-common \
    && add-apt-repository ppa:kisak/kisak-mesa \
    && apt update \
    && apt upgrade -y

startup-app.sh:

#!/bin/bash
set -e

unset PULSE_SERVER
unset PULSE_SINK
unset PULSE_SOURCE
unset SDL_AUDIODRIVER

export PULSE_SERVER=unix:/run/user/1000/pulse/native
export SDL_AUDIODRIVER=pipewire

echo "--- Audio Wrapper Config ---"
echo "PULSE_SERVER set to: $PULSE_SERVER"


... ORIGINAL startup-app.sh

Only issue is that audio is not passed to moonlight.

@ABeltramo can you consider to reopen this FR? Or maybe you can just guide me how to get audio using custom audio server container?

<!-- gh-comment-id:3744936595 --> @macher91 commented on GitHub (Jan 13, 2026): @Gylfkxjyjdll @ABeltramo I was able to run Half-Life: Alyx using SteamVR Beta(no alvr) on wolf using pipewire container and custom steam docker image. I tried with default pulse server but its crashing. Also without updated mesa is not working. Dockerfile: ``` FROM ghcr.io/games-on-whales/steam:edge COPY --chmod=777 startup.sh /opt/gow/startup-app.sh RUN apt update \ && apt install -y software-properties-common \ && add-apt-repository ppa:kisak/kisak-mesa \ && apt update \ && apt upgrade -y ``` startup-app.sh: ``` #!/bin/bash set -e unset PULSE_SERVER unset PULSE_SINK unset PULSE_SOURCE unset SDL_AUDIODRIVER export PULSE_SERVER=unix:/run/user/1000/pulse/native export SDL_AUDIODRIVER=pipewire echo "--- Audio Wrapper Config ---" echo "PULSE_SERVER set to: $PULSE_SERVER" ... ORIGINAL startup-app.sh ``` Only issue is that audio is not passed to moonlight. @ABeltramo can you consider to reopen this FR? Or maybe you can just guide me how to get audio using custom audio server container?
Author
Owner

@ABeltramo commented on GitHub (Jan 14, 2026):

How would you play a VR game with Moonlight? Does Steam turns the VR 3D space into 2D? And how do you pass back the motion and gyro inputs from the headset?

Can you share a screen recording of that?

<!-- gh-comment-id:3748049721 --> @ABeltramo commented on GitHub (Jan 14, 2026): How would you play a VR game with Moonlight? Does Steam turns the VR 3D space into 2D? And how do you pass back the motion and gyro inputs from the headset? Can you share a screen recording of that?
Author
Owner

@macher91 commented on GitHub (Jan 15, 2026):

@ABeltramo To clarify, I don't want to play VR games via Moonlight. I have Wolf running on my home lab server (Unraid), which is headless (no monitors connected). My goal is to launch VR games inside the Wolf Steam container so I can play them remotely on my Quest 3. I understand that Wolf is designed for remote play using Sunshine/Moonlight, but with current setup, I can't get VR games to run at all—even if I just wanted to use Moonlight to view the VR mirror window.

<!-- gh-comment-id:3753714693 --> @macher91 commented on GitHub (Jan 15, 2026): @ABeltramo To clarify, I don't want to play VR games via Moonlight. I have Wolf running on my home lab server (Unraid), which is headless (no monitors connected). My goal is to launch VR games inside the Wolf Steam container so I can play them remotely on my Quest 3. I understand that Wolf is designed for remote play using Sunshine/Moonlight, but with current setup, I can't get VR games to run at all—even if I just wanted to use Moonlight to view the VR mirror window.
Author
Owner

@ABeltramo commented on GitHub (Jan 15, 2026):

I don't want to play VR games via Moonlight.

So then this is outside the scope of Wolf.

Unfortunately there's not that many contributors and I only have a limited amount of free time to spend on Wolf.
Changing from PulseAudio to Pipewire would be a fairly big change since we have code in Wolf that communicate with the Pulse socket to automatically provision the virtual sinks, set the audio params, encoding pipeline and so on.
If anyone would like to write all the code required PRs are very welcome though.

<!-- gh-comment-id:3754934457 --> @ABeltramo commented on GitHub (Jan 15, 2026): > I don't want to play VR games via Moonlight. So then this is outside the scope of Wolf. Unfortunately there's not that many contributors and I only have a limited amount of free time to spend on Wolf. Changing from PulseAudio to Pipewire would be a fairly big change since we have code in Wolf that communicate with the Pulse socket to automatically provision the virtual sinks, set the audio params, encoding pipeline and so on. If anyone would like to write all the code required **PRs are very welcome** though.
Author
Owner

@macher91 commented on GitHub (Jan 16, 2026):

Fair enough 😅 thanks for answer ;)

<!-- gh-comment-id:3761332249 --> @macher91 commented on GitHub (Jan 16, 2026): Fair enough 😅 thanks for answer ;)
Author
Owner

@jsw08 commented on GitHub (Apr 1, 2026):

I don't want to play VR games via Moonlight.

So then this is outside the scope of Wolf.

Unfortunately there's not that many contributors and I only have a limited amount of free time to spend on Wolf. Changing from PulseAudio to Pipewire would be a fairly big change since we have code in Wolf that communicate with the Pulse socket to automatically provision the virtual sinks, set the audio params, encoding pipeline and so on. If anyone would like to write all the code required PRs are very welcome though.

How does this stop you from switching to pipewire? Pipewire-pulse is a drop-in replacement.

<!-- gh-comment-id:4169658828 --> @jsw08 commented on GitHub (Apr 1, 2026): > > I don't want to play VR games via Moonlight. > > So then this is outside the scope of Wolf. > > Unfortunately there's not that many contributors and I only have a limited amount of free time to spend on Wolf. Changing from PulseAudio to Pipewire would be a fairly big change since we have code in Wolf that communicate with the Pulse socket to automatically provision the virtual sinks, set the audio params, encoding pipeline and so on. If anyone would like to write all the code required **PRs are very welcome** though. How does this stop you from switching to pipewire? Pipewire-pulse is a drop-in replacement.
Author
Owner

@macher91 commented on GitHub (Apr 1, 2026):

can you share example of configuration how to do it "drop-in replacement"?

<!-- gh-comment-id:4170798751 --> @macher91 commented on GitHub (Apr 1, 2026): can you share example of configuration how to do it "drop-in replacement"?
Author
Owner

@jsw08 commented on GitHub (Apr 1, 2026):

The stock configuration of pipewire works fine. All you have to do is to run pipewire, a sessionmanager; preferably wirepulmber and the pipewire-pulse service. The last being a translation layer that provides compatibility with pulseaudio based applications.

Here's a description of pipewire-pulse from their mandoc:

pipewire-pulse starts a PulseAudio-compatible daemon that integrates with the PipeWire media server, by running a pipewire process through a systemd service. This daemon is a drop-in replacement for the PulseAudio daemon.

You can run the three using a service manager, launch script or you can configure pipewire to launch them for you.

<!-- gh-comment-id:4171310990 --> @jsw08 commented on GitHub (Apr 1, 2026): The stock configuration of pipewire works fine. All you have to do is to run pipewire, a sessionmanager; preferably wirepulmber and the pipewire-pulse service. The last being a translation layer that provides compatibility with pulseaudio based applications. Here's a description of pipewire-pulse from their mandoc: > pipewire-pulse starts a PulseAudio-compatible daemon that integrates with the PipeWire media server, by running a pipewire process through a systemd service. This daemon is a drop-in replacement for the PulseAudio daemon. You can run the three using a service manager, launch script or you can configure pipewire to launch them for you.
Author
Owner

@winiciuscota commented on GitHub (Apr 14, 2026):

it would be very useful having alvr support for wolf, maybe in a different container
steam-headless worked for me but I was getting a very inconsistent behavior on x11vnc, it would simply stop working sometimes, so I had to revert to using a vm+gpu passtrough on my proxmox/gaming machine

<!-- gh-comment-id:4241212031 --> @winiciuscota commented on GitHub (Apr 14, 2026): it would be very useful having alvr support for wolf, maybe in a different container steam-headless worked for me but I was getting a very inconsistent behavior on x11vnc, it would simply stop working sometimes, so I had to revert to using a vm+gpu passtrough on my proxmox/gaming machine
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
games-on-whales/wolf#226
No description provided.