Skip to content
MuNeNiCKPublic

About

RDP server for Hyprland

Topics

Resources

Stars

114 stars

Watchers

2 watching

Forks

Latest commit

 

History

302 Commits

Folders and files

Repository files navigation

hypr-rdp

Native RDP server for Hyprland.

  • H.264 video with VA-API acceleration and automatic software fallback
  • PipeWire audio forwarding
  • Keyboard and mouse input
  • Bidirectional text and image clipboard sync
  • Bidirectional clipboard file transfer
  • TLS certificates and optional session hooks

Requires Hyprland 0.54+. AVC420 is the default codec; AVC444 is experimental and currently uses software encoding.

Installation

Arch Linux (AUR)

yay -S hypr-rdp       # Stable release
yay -S hypr-rdp-git   # Latest git build

Nix

nix run github:MuNeNICK/hypr-rdp#hypr-rdp -- --help
nix build github:MuNeNICK/hypr-rdp#hypr-rdp

Use nix develop github:MuNeNICK/hypr-rdp#hypr-rdp for a development shell.

Prebuilt binary

Download from GitHub Releases:

tar xzf hypr-rdp-v*.tar.gz
sudo install -Dm755 hypr-rdp /usr/local/bin/hypr-rdp

Runtime dependencies: libva, pipewire, libxkbcommon, Linux-PAM, and pactl for the default audio routing mode. Hardware encoding also needs an appropriate VA-API driver. The software encoder uses bundled OpenH264. Receiving clipboard files on the desktop also needs FUSE and fusermount3 (Arch: fuse3).

Build from source

Install a current stable Rust toolchain, a C/C++ compiler, and development headers for libva, PipeWire, libxkbcommon, Wayland, GBM, and Linux-PAM (Debian/Ubuntu: libpam0g-dev).

git clone https://github.com/MuNeNICK/hypr-rdp.git
cd hypr-rdp
cargo build --release --locked
sudo install -Dm755 target/release/hypr-rdp /usr/local/bin/hypr-rdp

Inbound clipboard file transfer requires the client-to-server Cargo feature, enabled by default. To use software encoding with inbound transfer, build with --no-default-features --features client-to-server.

Quick start

Run as the same user as Hyprland, inside its session:

hypr-rdp -u user -p pass --bind 0.0.0.0:3389

Connect your RDP client to the machine's address on port 3389. Without --bind, hypr-rdp listens on 127.0.0.1:3389. A self-signed TLS certificate is generated on first start; use --cert and --key to supply your own.

By default, hypr-rdp creates a headless output sized for the client. To capture an existing monitor or set a fixed resolution:

hypr-rdp -u user -p pass --output DP-1
hypr-rdp -u user -p pass --resolution 2560x1440 --fps 60
hypr-rdp -u user -p pass --resolution 3024x1896 --scale 2

--scale applies only to the headless output. When starting outside the desktop session, set WAYLAND_DISPLAY; set HYPRLAND_INSTANCE_SIGNATURE too if instance discovery is ambiguous.

With configured username/password credentials, a new authenticated connection replaces the current one. In the default authentication mode, omitting credentials allows unauthenticated connections, served one at a time.

Configuration

Create ~/.config/hypr-rdp/config.toml:

bind = "0.0.0.0:3389"
username = "user"
password = "pass"
fps = 30
# resolution = "1920x1080"
# scale = 2
# output = "DP-1"
# audio_mode = "mirror"
# keyboard_layout_policy = "compositor"

CLI arguments override the config file. Use password_file instead of password to read a password from a file, or --password-file on the command line.

To use the desktop user's Linux password, set auth_mode = "pam" and remove username, password, and password_file. Install the appropriate PAM service as /etc/pam.d/hypr-rdp (included in Arch packages). PAM requires a TLS-capable client (FreeRDP: /sec:tls, without NLA) and allows only the user running the existing desktop, one connection at a time. Clients must supply credentials in TLS mode; mstsc may require saved credentials in Windows Credential Manager instead of displaying a password prompt.

Common settings are listed below. Config keys use underscores in place of hyphens. Run hypr-rdp --help for all options.

Option Values / purpose Default
--auth-mode configured credentials or Linux pam configured
--pam-service PAM service name hypr-rdp
--capture-mode wlr or ext capture protocol wlr
--egfx-codec avc420, experimental avc444, auto, or clearcodec (lossless, damage-only ClearCodec instead of H.264 for EGFX clients) avc420
--h264-backend auto, software, or vaapi auto
--bitrate Video bitrate in bits/s 10000000
--quality H.264 quality, 0–51 (lower is better) 23
--rate-control vbr or cqp vbr
--fps Maximum frame rate 30
--audio-mode redirect to RDP, mirror local playback, or off redirect
--keyboard-layout-policy client layout or existing compositor keymap client
--config Config file path ~/.config/hypr-rdp/config.toml
--file-transfer-mode both, to-client, to-server, or off; directions are relative to the RDP client both
--file-transfer-max-entries Selection entry budget, including skipped entries; maximum 100000 10000
--file-transfer-max-chunk-bytes Maximum bytes per read request 8388608

Clipboard file transfer copies files or folders in either file manager and pastes them into the other; the RDP client must support clipboard file streaming. Cut acts as copy and source files are never deleted, so keep them unchanged until the transfer finishes. When the client negotiates clipboard-data locking, an active paste can keep reading its original selection after another selection is copied. Up to four replaced inbound selections are retained until their locks are released; older selections are cancelled at that limit. Without locking, wait for a transfer to finish before copying another selection.

Session hooks

Run commands when a session starts and ends:

on_session_start = "hyprctl dispatch dpms off eDP-1"
on_session_end = "hyprctl dispatch dpms on eDP-1"

Commands run as the hypr-rdp user through /bin/sh -c, after session establishment and on disconnect (including service stop). They run in order, waiting up to 10 seconds for the previous command; timed-out commands are not killed.

For screen blanking, name a local monitor that is not being captured. Blanking all outputs or the captured output also interrupts the remote display.

License

MIT

About

RDP server for Hyprland

Topics

Resources

Stars

114 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages