Excellent screen sharing in SteamOS Game Mode (where Vesktop struggles) #65

Open
opened 2026-10-06 20:53:06 +00:00 by robocub · 0 comments
Member

Goal: on a Steam Deck (or any SteamOS device) in Game Mode, stream your game to a call with picture and sound: easy to start with a controller, stable, and good quality. This is a place where Discord-on-Linux options (Vesktop and friends) are weak, so doing it well is a real reason to pick Vommet.

Why Game Mode is hard

Game Mode isn't a normal desktop: gamescope is the compositor, and the usual Linux screen-share path (the xdg-desktop-portal screencast picker) is a Desktop Mode thing. Apps that rely on the portal tend to show no picker, a black stream, or need a trip to Desktop Mode. Verify each of these on a real device before designing around them.

Directions to investigate

  1. Capture gamescope's output directly through PipeWire. gamescope can publish its composited output as a PipeWire video stream (Steam's own recording/streaming builds on this). If Vommet finds and subscribes to that node, no portal or picker is needed: "share what's on screen" just works. Check the gamescope version on current SteamOS, whether the node is always available, and whether a Flatpak needs extra permissions to see it.
  2. Game audio: the same PipeWire work as #4 (per-application audio node, never our own call audio). In Game Mode the game is usually the only thing playing, so even a sink-monitor fallback is useful.
  3. Controller-first UX: big "Share screen" button in the call view, no window picker needed in Game Mode, start/stop from the Steam overlay. A Steam Input action or global shortcut would avoid leaving the game.
  4. Encoding on the Deck: use the APU's hardware encoder (VA-API on AMD) through WebRTC/LiveKit if available. Software encoding would cost the game frames. Sensible defaults (720p/60 or 1080p/30) and showing what the stream is costing.
  5. Running in Game Mode at all: Vommet added to Steam as a non-Steam game. Check window sizing, on-screen keyboard, and staying connected while a game runs in the foreground.

Building blocks that exist

  • Commet already detects the Steam Deck: config/subplatforms/steamdeck.dart (upstream PR #850, merged 2026-03-18). That's the hook for Deck-specific defaults.
  • Screen share with audio (#4) is waiting on upstream's update-webrtc branch (screen share with audio, active), and this builds on it.

Upstream

No Commet issue or branch for SteamOS Game Mode screen sharing (searched 2026-10-06). Related upstream: #969 (Element Call screen share with audio), #854 (KDE screen-share dialogs).

First step

On a Steam Deck in Game Mode: run Vommet as a non-Steam game, try the current screen share, and record what happens. Also check whether a gamescope PipeWire node shows up (pw-dump | grep -i gamescope). That decides between direction 1 and a portal-based path.

Goal: on a Steam Deck (or any SteamOS device) in **Game Mode**, stream your game to a call with picture and sound: easy to start with a controller, stable, and good quality. This is a place where Discord-on-Linux options (Vesktop and friends) are weak, so doing it well is a real reason to pick Vommet. ## Why Game Mode is hard Game Mode isn't a normal desktop: **gamescope** is the compositor, and the usual Linux screen-share path (the xdg-desktop-portal screencast picker) is a Desktop Mode thing. Apps that rely on the portal tend to show no picker, a black stream, or need a trip to Desktop Mode. Verify each of these on a real device before designing around them. ## Directions to investigate 1. **Capture gamescope's output directly through PipeWire.** gamescope can publish its composited output as a PipeWire video stream (Steam's own recording/streaming builds on this). If Vommet finds and subscribes to that node, no portal or picker is needed: "share what's on screen" just works. Check the gamescope version on current SteamOS, whether the node is always available, and whether a Flatpak needs extra permissions to see it. 2. **Game audio:** the same PipeWire work as #4 (per-application audio node, never our own call audio). In Game Mode the game is usually the only thing playing, so even a sink-monitor fallback is useful. 3. **Controller-first UX:** big "Share screen" button in the call view, no window picker needed in Game Mode, start/stop from the Steam overlay. A Steam Input action or global shortcut would avoid leaving the game. 4. **Encoding on the Deck:** use the APU's hardware encoder (VA-API on AMD) through WebRTC/LiveKit if available. Software encoding would cost the game frames. Sensible defaults (720p/60 or 1080p/30) and showing what the stream is costing. 5. **Running in Game Mode at all:** Vommet added to Steam as a non-Steam game. Check window sizing, on-screen keyboard, and staying connected while a game runs in the foreground. ## Building blocks that exist - Commet already detects the Steam Deck: `config/subplatforms/steamdeck.dart` (upstream PR #850, merged 2026-03-18). That's the hook for Deck-specific defaults. - Screen share with audio (#4) is waiting on upstream's `update-webrtc` branch (screen share with audio, active), and this builds on it. ## Upstream No Commet issue or branch for SteamOS Game Mode screen sharing (searched 2026-10-06). Related upstream: #969 (Element Call screen share with audio), #854 (KDE screen-share dialogs). ## First step On a Steam Deck in Game Mode: run Vommet as a non-Steam game, try the current screen share, and record what happens. Also check whether a gamescope PipeWire node shows up (`pw-dump | grep -i gamescope`). That decides between direction 1 and a portal-based path.
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
nether/vommet#65
No description provided.