Skip to content

shadow-x78/orbiscreen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

33 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Orbiscreen

Orbiscreen

Real virtual secondary displays for Linux, streamed to Android - over Wi-Fi or USB

Version CI License Stars


πŸ“‹ Table of Contents


πŸ€” What is Orbiscreen?

Orbiscreen turns a spare Android tablet or phone into a real second monitor for your Linux desktop. Unlike X11-only or browser-only workarounds, Orbiscreen creates a kernel-level virtual display via DisplayLink's evdi, which appears as a genuine monitor to both X11 and Wayland compositors, and streams it over WebRTC with reverse touch input.


🧭 Why Orbiscreen Exists

Problem Other Projects Orbiscreen
No Linux host support spacedesk refuses officially Real kernel-level virtual display
X11-only workaround VirtScreen unmaintained since 2018 X11 and Wayland via evdi/DRM
Wayland second screen missing Weylus caps it to X11 Full Wayland path via ashpd + PipeWire
Manual IP configuration Most projects mDNS discovery + adb reverse USB

✨ Highlights

  • Real virtual display via evdi (X11 and Wayland)
  • WebRTC streaming - opens in any modern browser, no app install needed
  • Reverse touch - pointer / keyboard / stylus events flow Android β†’ host
  • mDNS discovery - Android clients find the host automatically
  • USB transport via adb reverse, no special drivers
  • Hardware encoding - VAAPI, NVENC, x264 software fallback

πŸ“Š Status

Phase Goal State
0 Workspace scaffolding + evdi feasibility βœ… Completed
1 Display + capture + encode + input (X11) βœ… Completed
2 Android client + USB transport + mDNS βœ… Completed
3 Wayland capture + portal fallback + input βœ… Completed
4 Packaging + GTK4 GUI + D-Bus service + Standalone installation βœ… Completed

See CHANGELOG.md for the complete release history.


πŸ“š Documentation Index

Topic English Guide Arabic Guide (Ψ§Ω„ΨΉΨ±Ψ¨ΩŠΨ©)
System Architecture ARCHITECTURE.md ARCHITECTURE_AR.md
Multi-Distro Packaging PACKAGING.md PACKAGING_AR.md
D-Bus Session Spec DBUS_SPEC.md DBUS_SPEC_AR.md
Troubleshooting & Fixes TROUBLESHOOTING.md TROUBLESHOOTING_AR.md
Security Architecture SECURITY.md SECURITY_AR.md

πŸš€ Quick Start & Multi-Distro Installation

1. Official Packages & Pre-built Artifacts (GitHub Releases)

Download pre-built packages from GitHub Releases:

  • Debian / Ubuntu (.deb):

    sudo dpkg -i orbiscreen_amd64.deb || sudo apt-get install -f
  • Fedora / RHEL (.rpm):

    sudo dnf install ./orbiscreen-1.x86_64.rpm
  • Universal AppImage (.AppImage):

    chmod +x orbiscreen-x86_64.AppImage
    ./orbiscreen-x86_64.AppImage
  • Standalone Tarball (.tar.gz):

    tar -xzvf orbiscreen-linux-x86_64.tar.gz
    cd release-bundle && ./install.sh
  • Android App (.apk): Install orbiscreen-android-release.apk (signed release build to bypass Play Protect warnings) or orbiscreen-android-debug.apk.

2. Building from Source

# Clone the repository
git clone https://github.com/shadow-x78/orbiscreen.git ~/Orbiscreen
cd ~/Orbiscreen

# One-command installation for Linux
./scripts/install.sh

# Probe local capture, input, and display backends
orbiscreen probe

# Start the Orbiscreen daemon (EVDI DRM or Wayland Portal auto-fallback)
orbiscreen start

⌨️ Commands

Command Description
orbiscreen start Create the virtual display and start streaming
orbiscreen start --no-mdns Start without mDNS advertising
orbiscreen list-displays List configured virtual displays
orbiscreen probe Report capture / input / display backends
orbiscreen print-config Print the resolved configuration
orbiscreen --config orbiscreen.toml --verbose probe

πŸ—οΈ Project Structure

orbiscreen/
β”œβ”€β”€ crates/
β”‚   β”œβ”€β”€ orbiscreen-core/        # types, config, errors
β”‚   β”œβ”€β”€ orbiscreen-display/     # evdi-backed virtual displays
β”‚   β”œβ”€β”€ orbiscreen-capture/     # X11 (x11rb) + Wayland (ashpd + PipeWire)
β”‚   β”œβ”€β”€ orbiscreen-encode/      # GStreamer pipeline (VAAPI / NVENC / x264)
β”‚   β”œβ”€β”€ orbiscreen-input/       # evdevil + ashpd RemoteDesktop
β”‚   β”œβ”€β”€ orbiscreen-transport/   # axum + mDNS + adb reverse + signaling scaffold
β”‚   └── orbiscreen-daemon/      # CLI binary wiring every layer together
β”œβ”€β”€ clients/
β”‚   β”œβ”€β”€ web/                    # browser WebRTC client (HTML / CSS / JS)
β”‚   └── android/                # Kotlin Android WebView host
β”œβ”€β”€ packaging/{flatpak,appimage,debian}/
β”œβ”€β”€ scripts/{setup-dev-env.sh,test-evdi.sh}
β”œβ”€β”€ .github/{workflows/,ISSUE_TEMPLATE/,dependabot.yml}
└── .editorconfig, .gitignore, .gitattributes, deny.toml, rustfmt.toml

🧩 Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  orbiscreen-daemon (CLI, clap)                               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚ display      β”‚  β”‚ capture      β”‚  β”‚ encode            β”‚   β”‚
β”‚  β”‚  evdi crate  β”‚  β”‚ x11rb/ashpd  β”‚  β”‚ gstreamer-rs      β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ input        β”‚  β”‚ transport                            β”‚  β”‚
β”‚  β”‚ evdevil/ashpdβ”‚  β”‚ axum + webrtc-rs + mdns-sd + adb     β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚ core: shared types, config, errors                   β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                  β”‚                    β”‚
       β–Ό                  β–Ό                    β–Ό
   /dev/dri/...     X11 / Wayland         Network (mDNS + UDP)

πŸ“š Documentation

Document Description
docs/ARCHITECTURE.md System topology, zero-copy pipeline & D-Bus architecture
docs/PACKAGING.md Multi-distro packaging specifications (.deb, .rpm, AppImage, Flatpak)
docs/DBUS_SPEC.md D-Bus Session Bus IPC interface specifications
docs/TROUBLESHOOTING.md Common issues, diagnostics & hardware acceleration fixes
docs/SECURITY.md Security model, WebRTC transport safety & network policies
CHANGELOG.md Full release history and versioning

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/my-feature
  3. Commit your changes
  4. Push to the branch
  5. Open a Pull Request

πŸ“œ License

Distributed under the GPL-3.0 License.


Built by shadow-x78 Β· Changelog Β· Security

Β© 2026 Orbiscreen (shadow-x78)

About

Open-source virtual secondary displays for Linux, streamed to Android tablets and phones over WebRTC. Works over Wi-Fi or USB (adb reverse). Backed by the evdi kernel-level virtual display.

Topics

Resources

Security policy

Stars

Watchers

Forks

Releases

Contributors

Languages