- What is Orbiscreen?
- Why Orbiscreen Exists
- Highlights
- Status
- Documentation Index
- Quick Start & Packaging
- Commands
- Architecture
- License
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.
| 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 |
- 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
| 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.mdfor the complete release history.
| 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 |
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): Installorbiscreen-android-release.apk(signed release build to bypass Play Protect warnings) ororbiscreen-android-debug.apk.
# 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| 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 probeorbiscreen/
βββ 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
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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)
| 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 |
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes
- Push to the branch
- Open a Pull Request
Distributed under the GPL-3.0 License.
Built by shadow-x78 Β· Changelog Β· Security
Β© 2026 Orbiscreen (shadow-x78)