ReFrame Remote Desktop

## Screenshots

### Even works on a Raspberry Pi!

## Features

### What ReFrame Currently Supports

- VNC
- Wayland/X11/TTY
- Intel/AMD/NVIDIA/Even Raspberry Pi!
- Pointer/Keyboard
- Remote Login
- Headless Setup
- Draw Remote Cursor

### What ReFrame May Support in Future

- RDP: PR is always welcome.

### What ReFrame Won't Support

- Sound
- No GPU/connector/EGL/OpenGL ES/DRM/KMS
- Game Streaming
- DRM Overlay Plane

## Requirements

A GPU that:

- supports DRM/KMS.
- has a proper EGL/OpenGL ES implementation.
- is able to output to monitors.

If you can run a modern Linux desktop environment, it is likely you already meet these requirements.

## Install

Please refer to the install section in README.md.

## Usage

Security Suggestion: VNC data streams are not encrypted even with password authentication, so NEVER expose this to public network directly! Connecting to it via VPN is recommended.

1. Run `systemctl start reframe-server@example.service`.
2. Try connecting to it with a VNC client via port `5933`.

For more detailed usage instructions, please refer to the README.

## Comparison with Other Linux Remote Desktop

- kmsvnc
  - ReFrame supports NVIDIA driver by decoding frames with EGL and OpenGL ES, kmsvnc uses VA-API and it cannot decode frames of NVIDIA driver correctly.
  - ReFrame gets frame buffer on each frame, so it works correctly if your compositor uses double-buffers.
  - ReFrame contains privilieged DRM/uinput process and unprivilieged VNC server process, kmsvnc runs as a whole privilieged process.
  - ReFrame supports resizing client window.
- RustDesk
  - ReFrame supports Remote Login on Wayland, RustDesk does not support it.
- GNOME Remote Desktop
  - ReFrame supports non-GNOME desktop environments.
  - ReFrame supports Remote Login with VNC, GNOME Remote Desktop only supports Remote Login with RDP clients that implements Server Redirection (Microsoft's Windows App on macOS does NOT implement it and that's why I decided to write my own solution).
- wayvnc
  - ReFrame supports non-wlroots desktop environments.
- w0vncserver
  - ReFrame supports Remote Login, w0vncserver uses per-session XDG desktop portal, which means it cannot support Remote Login.
- x0vncserver
  - ReFrame supports Wayland.