Skip to content

[FEAT] Enable virtual touchscreen gamepad for primary client (controller role) #116

@ptichalouf

Description

@ptichalouf

Is this a new feature request?

  • I have searched the existing issues

Wanted change

Currently, virtual touchscreen gamepad controls are only available for "viewer" role clients (Player 2-4 via sharing links or ?token= with "role": "viewer", "slot": N).

The primary client with "role": "controller" can only use:

  • Keyboard/mouse
  • Physical Bluetooth/USB gamepad

Reason for change

When using a mobile device (tablet, phone) as the primary and only client to play games, there's no way to get both:

  • ✅ The video stream
  • ✅ Virtual touchscreen gamepad controls

The current workaround requires two devices/connections:

  1. Open a "controller" session on another device (PC, hidden tab)
  2. Open a "viewer" session on mobile to get touchscreen controls

This is impractical for single-user mobile gaming scenarios.

Proposed code change

Add an option to enable virtual touchscreen gamepad for the primary client. Possible implementations:

Option A - New environment variable:

SELKIES_ENABLE_CONTROLLER_TOUCHPAD=true

Option B - New role in Control Plane API:

{"role": "controller", "slot": 1, "enable_touch_gamepad": true}

Option C - Automatic detection:
Enable touchscreen controls automatically when the client is detected as a touch device.

Use Case

  • Playing emulator games (Citron, RetroArch, etc.) on a tablet without a physical controller
  • Mobile-first gaming setups
  • Situations where carrying a Bluetooth controller isn't practical

Environment

  • Container: lscr.io/linuxserver/citron:latest (based on baseimage-selkies)
  • Client: Mobile browser (Android/iOS)
  • Setup: Single user, no need for multiplayer sharing

Additional Context

The touchscreen gamepad UI already exists and works great for viewer/player2-4 sessions. This request is simply to make it available for the primary session as well.

Thank you for the amazing work on Selkies! 🎮

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    Status

    Issues

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions