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.
- 🎮 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.
- 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
-
Clone or download this repository
-
Run the installer (requires root):
sudo ./install.sh
-
Select the display output you want to override when prompted (e.g., HDMI-1, HDMI-A-1, DP-1)
-
Reboot your system for changes to take effect
After installation and reboot:
-
Check available displays and modes:
kscreen-doctor -o
-
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-1with your actual output name. -
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
-
Configure your streaming software to use the virtual display
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")
EOFAvailable resolutions (Unlimited via Extension Blocks):
- 1280x800 @ 60/90Hz
- 1920x1200 @ 60/90/120Hz
- 2560x1440 @ 60/120Hz
- 2560x1600 @ 90Hz
- Or any custom resolution you need
- EDID Generation: Creates a valid EDID (Extended Display Identification Data) binary file with custom display modes
- Firmware Installation: Copies the EDID to
/lib/firmware/edid/ - Kernel Configuration: Adds
drm.edid_firmwareparameter to bootloader configuration - Display Override: Linux kernel loads the custom EDID for the specified display output
Remove the virtual screen configuration:
sudo ./uninstall.shThen reboot to restore original display settings.
-
Verify EDID is loaded:
dmesg | grep -i edidLook for messages like "edid firmware loaded"
-
Check kernel parameters:
cat /proc/cmdline | grep drm.edid_firmware -
Ensure the correct connector name was used:
ls /sys/class/drm/card*-*
-
Check available modes with kscreen-doctor:
kscreen-doctor -o
You should see 1280x800@90 and 2560x1600@90 in the mode list
Re-run the installer with the correct connector name, or manually edit:
- GRUB:
/etc/default/grubthen runsudo update-grub - systemd-boot:
/boot/efi/loader/entries/*.conf
After reboot, ensure you're using a Wayland session:
echo $XDG_SESSION_TYPEShould output: wayland
If modes still don't appear, try:
kscreen-doctor -o --jsonFor detailed output information.
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
MIT License - feel free to use, modify, and distribute.
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.