mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-05 23:51:04 +03:00
adds an opt-in `drm` feature for unattended remote access on Wayland: it captures below the compositor via libdrmtap, so there is no xdg-desktop-portal consent dialog and it works at the login screen. off by default. when the feature is off the build is byte-identical. everything is gated behind feature = "drm" or lives only in the separate rustdesk-unattended-wayland deb, whose package name is the informed consent. architecture (agreed with the maintainer): the capture runs inside the root --service, which already holds the privilege it needs, and streams frames to the user --server over a service-scoped _drm ipc channel. libdrmtap is loaded with dlopen at runtime (no link-time dependency, so the base build is unchanged and it still runs on ubuntu 18), and the .so is built in ci from the rustdesk-org/libdrmtap fork and shipped only in the drm deb. no setcap helper. - service: DrmReader reads scanout directly via the dlopen loader; an IpcDrmCapturer serves _drm consumers with a per-connection capture worker; durable availability cache + pre-warm to avoid enumerate/re-probe restarts - capture: multi-display (targets the selected crtc), hardware cursor over _drm, transient-errno retry with a bounded stall, rejects non-32bpp scanouts before the frame copy - robustness: only active, crtc-bound outputs are offered (an unbound crtc_id=0 connector is filtered and a client-selected 0 is refused, both fall back to pipewire); a per-display rapid-rebuild guard demotes a flapping display to pipewire; per-display (not global) zero-frame failure tracking - root-service hardening: bounded frame allocation and a concurrent-connection cap so a malformed scanout or a buggy consumer cannot OOM or thread-exhaust the service; a negative availability verdict expires so displays that appear after startup recover without a --server restart; exactly-one .so selection in the packaging so a stale object is never silently shipped - build: libdrmtap.so cloned at build time from rustdesk-org/libdrmtap main and bundled only for the --drm deb; ci builds a separate rustdesk-unattended-wayland deb (incl. an ubuntu 18.04 container) - DRM_CAPTURE_SECURITY.md: threat model and hardening notes
61 lines
1018 B
Plaintext
61 lines
1018 B
Plaintext
/build
|
|
/target
|
|
.vscode
|
|
.idea
|
|
.DS_Store
|
|
.env
|
|
libsciter-gtk.so
|
|
src/ui/inline.rs
|
|
extractor
|
|
__pycache__
|
|
src/version.rs
|
|
*dmg
|
|
*exe
|
|
*tgz
|
|
cert.pfx
|
|
*.bak
|
|
*png
|
|
*svg
|
|
*jpg
|
|
sciter.dll
|
|
**pdb
|
|
src/bridge_generated.rs
|
|
src/bridge_generated.io.rs
|
|
*deb
|
|
rustdesk
|
|
*.cache
|
|
# appimage
|
|
appimage/AppDir
|
|
appimage/*.AppImage
|
|
appimage/appimage-build
|
|
appimage/*.xz
|
|
# flutter
|
|
flutter/linux/build/**
|
|
flutter/linux/cmake-build-debug/**
|
|
# flatpak
|
|
flatpak/.flatpak-builder/**
|
|
flatpak/ccache/**
|
|
flatpak/.flatpak-builder/build/**
|
|
flatpak/.flatpak-builder/shared-modules/**
|
|
flatpak/.flatpak-builder/shared-modules/*.tar.xz
|
|
flatpak/.flatpak-builder/debian-binary
|
|
flatpak/build/**
|
|
flatpak/repo/**
|
|
flatpak/*.flatpak
|
|
# bridge file
|
|
lib/generated_bridge.dart
|
|
# vscode devcontainer
|
|
.gitconfig
|
|
.vscode-server/
|
|
.ssh
|
|
.devcontainer/.*
|
|
# build cache in examples
|
|
examples/**/target/
|
|
# ===
|
|
vcpkg_installed
|
|
flutter/lib/generated_plugin_registrant.dart
|
|
libsciter.dylib
|
|
flutter/web/
|
|
# libdrmtap is cloned at build time by build.py (not a submodule)
|
|
/third_party/libdrmtap/
|