Skip to content

iox/plasma-virtual-screen-for-steam-deck

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Steam Deck Virtual Screen for Linux (Wayland/KDE Plasma)

A tool to create virtual displays with Steam Deck-optimized resolutions (16:10 aspect ratio) on Linux systems using Wayland + Plasma, enabling perfect resolution streaming to Steam Deck even if your PC doesn't natively support these resolutions.

Tested on: Nvidia RTX2080TI, Arch Linux (CachyOS), Plasma 6.5

I use it to override my secondary screen with unsupported display modes, so I can do amazing quality streaming into my Steam Deck.

Features

  • 🎮 Steam Deck Optimized: Generates EDID with 60Hz (LCD) and 90Hz (OLED) support
    • 1280x800 @ 60Hz & 90Hz (16:10)
    • 1920x1200 @ 60/90/120Hz (16:10)
    • 2560x1600 @ 90Hz (16:10)
  • 🖥️ Desktop Resolution:
    • 2560x1440 @ 60/120Hz (16:9)
  • 🌊 Wayland Native: Designed for KDE Plasma on Wayland with kscreen-doctor
  • ⚙️ Automated Installation: Handles kernel parameter configuration for GRUB and systemd-boot
  • 🔄 Easy Uninstall: Includes uninstaller script to remove all changes
  • 🐧 Linux Native: Pure Python and Bash, no external dependencies

Warning

Use only on VIRTUAL or SECONDARY displays!
Applying this EDID to your primary physical monitor/screen (especially the built-in Laptop/Deck screen) will likely result in a black screen because physical panels often cannot support these custom timings. Only use this for dummy plugs, virtual outputs, or external displays dedicated to streaming.

Requirements

  • Linux kernel with DRM EDID firmware loading support
  • KDE Plasma with Wayland session
  • kscreen-doctor (included with KDE Plasma)
  • Python 3.6+
  • Root access (for installation)
  • GRUB or systemd-boot bootloader

Installation

  1. Clone or download this repository

  2. Run the installer (requires root):

    sudo ./install.sh
  3. Select the display output you want to override when prompted (e.g., HDMI-1, HDMI-A-1, DP-1)

  4. Reboot your system for changes to take effect

Usage

After installation and reboot:

  1. Check available displays and modes:

    kscreen-doctor -o
  2. Set the Steam Deck resolution:

    # For Steam Deck OLED (90Hz)
    kscreen-doctor output.HDMI-A-1.mode.1280x800@90
    
    # For Steam Deck LCD (60Hz)
    kscreen-doctor output.HDMI-A-1.mode.1280x800@60
    
    # For 2x resolution OLED
    kscreen-doctor output.HDMI-A-1.mode.2560x1600@90
    
    # For 2x resolution LCD
    kscreen-doctor output.HDMI-A-1.mode.2560x1600@60
    
    # For 1440p high refresh (120Hz)
    kscreen-doctor output.HDMI-A-1.mode.2560x1440@120
    
    # For 1440p standard (60Hz)
    kscreen-doctor output.HDMI-A-1.mode.2560x1440@60

    Replace HDMI-A-1 with your actual output name.

  3. Alternatively, use KDE Display Settings GUI:

    • System Settings → Display and Monitor → Display Configuration
    • Select your display output
    • Choose from available resolutions:
      • 1280x800 @ 60Hz (LCD) or 90Hz (OLED)
      • 2560x1600 @ 60Hz (LCD) or 90Hz (OLED)
      • 2560x1440 @ 60Hz or 120Hz (Desktop/Gaming)
    • Click Apply
  4. Configure your streaming software to use the virtual display

Manual EDID Generation

To generate a custom EDID file:

# Default: 1280x800 + 2560x1440
./edid_generator.py my_custom_edid.bin

# Or create your own combination (max 4 resolutions):
python3 << 'EOF'
from edid_generator import EDIDGenerator

gen = EDIDGenerator(manufacturer_id="VRT", product_code=0x5344)
gen.add_resolution(1280, 800, 60, "1280x800@60Hz")
gen.add_resolution(1920, 1080, 60, "1080p@60Hz")
gen.add_resolution(2560, 1440, 120, "1440p@120Hz")
gen.add_resolution(3840, 2160, 60, "4K@60Hz")
gen.save("my_edid.bin")
EOF

Available resolutions (Unlimited via Extension Blocks):

  • 1280x800 @ 60/90Hz
  • 1920x1200 @ 60/90/120Hz
  • 2560x1440 @ 60/120Hz
  • 2560x1600 @ 90Hz
  • Or any custom resolution you need

How It Works

  1. EDID Generation: Creates a valid EDID (Extended Display Identification Data) binary file with custom display modes
  2. Firmware Installation: Copies the EDID to /lib/firmware/edid/
  3. Kernel Configuration: Adds drm.edid_firmware parameter to bootloader configuration
  4. Display Override: Linux kernel loads the custom EDID for the specified display output

Uninstallation

Remove the virtual screen configuration:

sudo ./uninstall.sh

Then reboot to restore original display settings.

Troubleshooting

Display not showing custom resolutions

  1. Verify EDID is loaded:

    dmesg | grep -i edid

    Look for messages like "edid firmware loaded"

  2. Check kernel parameters:

    cat /proc/cmdline | grep drm.edid_firmware
  3. Ensure the correct connector name was used:

    ls /sys/class/drm/card*-*
  4. Check available modes with kscreen-doctor:

    kscreen-doctor -o

    You should see 1280x800@90 and 2560x1600@90 in the mode list

Wrong connector name

Re-run the installer with the correct connector name, or manually edit:

  • GRUB: /etc/default/grub then run sudo update-grub
  • systemd-boot: /boot/efi/loader/entries/*.conf

Wayland session not detecting changes

After reboot, ensure you're using a Wayland session:

echo $XDG_SESSION_TYPE

Should output: wayland

If modes still don't appear, try:

kscreen-doctor -o --json

For detailed output information.

Technical Details

EDID Structure

The generated EDID includes:

  • Header: Standard EDID 1.4 format
  • Manufacturer ID: VRT (Virtual)
  • Product Code: 0x5344 (SD = Steam Deck)
  • Base Block: 4 Detailed Timing Descriptors (128 bytes total)
  • Extension Block: CTA-861 block with additional DTDs for high refresh rate compatibility

License

MIT License - feel free to use, modify, and distribute.

Disclaimer

Modifying kernel parameters and display firmware can affect system stability. Always backup your bootloader configuration before installation. The authors are not responsible for any hardware or software issues.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors