A native Linux GUI application to create and manage virtual displays at any resolution and refresh rate.
Built with GTK3 and xrandr. Works with VR, OBS, Sunshine, and any desktop sharing software.
Part of the VirtualDrivers project.
- Create virtual displays at any resolution and refresh rate
- Remove virtual displays individually or all at once
- Resolution presets — Full HD, QHD, 4K, Ultrawide, and more, or enter a custom resolution
- Refresh rate presets — 30 / 60 / 75 / 90 / 120 / 144 / 165 / 240 Hz, or enter a custom value
- Automatic output detection — finds available xrandr outputs
- Flexible positioning — place virtual displays left, right, above, below, or mirror an existing monitor
- Reduced blanking — optional CVT reduced blanking for lower bandwidth
- Persistent config — remembers your virtual displays across sessions
- Native GTK3 GUI — follows your system theme
- Multi-GPU support — NVIDIA, AMD, and Intel
| GPU | Method | Setup Required |
|---|---|---|
| AMD | xrandr (direct) | None — works out of the box |
| Intel | xrandr (direct) | None — works out of the box |
| NVIDIA | xorg.conf + xrandr | One-time setup + session restart |
NVIDIA's proprietary driver does not allow adding modes to disconnected outputs at runtime. The app handles this automatically:
- Click Setup Now (or Menu > Setup Virtual Outputs)
- Select which NVIDIA outputs to enable as virtual displays (e.g.,
HDMI-0) - Enter your password — the app writes:
/etc/X11/xorg.conf.d/99-linux-vdd.conf— forces NVIDIA to treat the output as connected/usr/share/linux-vdd/virtual-edid.bin— virtual EDID supporting 24–240 Hz up to 4K
- Log out and back in for the configuration to take effect
- After restart, create virtual displays at any resolution/refresh rate instantly
To remove the NVIDIA config: Menu > Remove NVIDIA Config, then restart your session.
These work immediately with no setup. The app uses standard xrandr to create modes and enable disconnected outputs directly.
- Linux with X11 (Xorg)
- Python 3.8+
- PyGObject (GTK3 bindings)
- xrandr
Most desktop Linux distributions already have these installed.
git clone https://github.com/VirtualDrivers/Linux-Virtual-Display-Driver.git
cd Linux-Virtual-Display-Driver
python3 vdd.pychmod +x install.sh
sudo ./install.shThis installs the app to /opt/linux-vdd/, adds a launcher to your PATH, and creates a .desktop entry so it appears in your application menu. Supports apt, pacman, dnf, and zypper.
To uninstall:
chmod +x uninstall.sh
sudo ./uninstall.shThe app uses xrandr to:
- Generate a CVT modeline for your chosen resolution and refresh rate (pure Python — no dependency on the
cvtbinary) - Create the mode in the X server (
xrandr --newmode) - Add the mode to an available output (
xrandr --addmode) - Enable the output with positioning (
xrandr --output ... --mode ...)
Virtual displays are created on disconnected outputs — most GPU drivers expose one or more of these (e.g., VIRTUAL1, DP-2, HDMI-2).
If the app reports no available outputs:
- NVIDIA — Use the built-in Setup Virtual Outputs flow (see NVIDIA above)
- Intel — Check for
VIRTUAL1/VIRTUAL2outputs inxrandr - AMD — Disconnected HDMI/DP outputs should appear automatically
- Any GPU — Install
xf86-video-dummyfor a dummy output, or load theevdikernel module (sudo modprobe evdi)
- Verify the output is listed in
xrandroutput - For NVIDIA: ensure you completed the setup flow and restarted your session
- Check
~/.config/linux-vdd/displays.jsonfor saved state
Virtual display state is saved to ~/.config/linux-vdd/displays.json and restored on next launch.
NVIDIA xorg configuration is stored in /etc/X11/xorg.conf.d/99-linux-vdd.conf.
| Shortcut | Action |
|---|---|
Ctrl+N |
Add virtual display |
linux_vdd/
__init__.py # Package metadata
modeline.py # CVT modeline calculator
display_manager.py # GPU detection, xrandr backend, NVIDIA setup
dialogs.py # Add Display + NVIDIA Setup dialogs
app.py # GTK3 Application, main window, CSS
vdd.py # Entry point
install.sh # System-wide installer
uninstall.sh # Uninstaller
Personal / Non-Commercial Use: GNU GPLv3 — free to use, modify, and redistribute.
Commercial Use: Requires a separate license. Contact VirtualDrivers for commercial licensing.
See LICENSE for full details.