Files
crossdesk/README_EN.md
2025-12-10 03:38:05 +08:00

11 KiB
Raw Permalink Blame History

CrossDesk

Featured|HelloGitHub Platform License: LGPL v3 GitHub last commit Build Status
Docker Pulls GitHub issues GitHub stars GitHub forks

[ 中文 / English ]

PC Client sup_example

Web Client

6bddcbed47ffd4b9988a4037c7f4f524

Intro

CrossDesk is a lightweight cross-platform remote desktop software.

CrossDesk is an experimental application of MiniRTC, a lightweight cross-platform real-time audio and video transmission library. MiniRTC provides fundamental capabilities including network traversal (RFC5245), video software/hardware encoding and decoding (H264/AV1), audio encoding/decoding (Opus), signaling interaction, network congestion control, and transmission encryption (SRTP).

System Requirements

Platform Minimum Version
Windows Windows 10 or later (64-bit)
macOS macOS Intel 15.0 or later (versions between 14.0 and 15.0 can be built manually for compatibility)
macOS Apple Silicon 14.0 or later
Linux Ubuntu 22.04 or later (older versions can be built manually for compatibility)

Usage

Enter the remote desktop ID in the menu bars “Remote ID” field and click “→” to initiate a remote connection.

usage1

If the remote desktop requires a connection password, you must enter the correct password on your side to successfully establish the connection.

password

Before connecting, you can customize configuration options in the settings, such as language and video encoding format.

settings

Web Client

Visit CrossDesk Web Client. Enter the Remote Device ID and Password, then click Connect to access the remote device. As shown, iOS Safari remotely controlling Windows 11:

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__ MsgID=932911462648581698 skey=@crypt_1f5153b1_b550ca7462b5009ce03c991cca2a92a7 mmweb_appid=wx_webfilehelper

How to build

Requirements:

Following packages need to be installed on Linux:

sudo apt-get install -y software-properties-common git curl unzip build-essential libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev libxcb-xfixes0-dev libxfixes-dev libxv-dev libxtst-dev libasound2-dev libsndio-dev libxcb-shm0-dev libasound2-dev libpulse-dev

Build:

git clone https://github.com/kunkundi/crossdesk.git

cd crossdesk

git submodule init 

git submodule update

xmake b -vy crossdesk

Build options:

--USE_CUDA=true/false: enable CUDA acceleration codec, default: false
--CROSSDESK_VERSION=xxx: set the version number

# example:
xmake f --CROSSDESK_VERSION=1.0.0 --USE_CUDA=true

Run:

xmake r crossdesk

Development Without CUDA Environment

For Linux developers who do not have a CUDA environment installed and want to enable hardware codec feature, a preconfigured Ubuntu 22.04 Docker image is provided.
This image comes with all required build dependencies and allows you to build the project directly inside the container without any additional setup.

After entering the container, download the project and run:

export CUDA_PATH=/usr/local/cuda
export XMAKE_GLOBALDIR=/data

xmake f --USE_CUDA=true
xmake b --root -vy crossdesk

For Windows developers without a CUDA environment installed, run the following command to install the CUDA build environment:

xmake require -vy "cuda 12.6.3"

After the installation is complete, execute:

xmake require --info "cuda 12.6.3"

The output will look like this:

Image

From the output above, locate the CUDA installation directory — this is the path pointed to by installdir. Add this path to your system environment variable CUDA_PATH, or set it in the terminal using:

set CUDA_PATH=path_to_cuda_installdir:

Then re-run:

xmake f --USE_CUDA=true
xmake b -vy crossdesk

Notice

If the client status bar shows Disconnected during runtime, please first install the client from the CrossDesk official website to ensure the required certificate files are available in the environment.

image

About Xmake

Installing Xmake

You can install Xmake using one of the following methods:

Using curl:

curl -fsSL https://xmake.io/shget.text | bash

Using wget:

wget https://xmake.io/shget.text -O - | bash

Using powershell:

irm https://xmake.io/psget.text | iex

Build Options

# Switch build mode
xmake f -m debug/release

# Optional build parameters
-r : Rebuild the target
-v : Show detailed build logs
-y : Automatically confirm prompts

# Example
xmake b -vy crossdesk

Run Options

# Run in debug mode
xmake r -d crossdesk

For more information, please refer to the official Xmake documentation .

Self-Hosted Server

It is recommended to deploy CrossDesk Server using Docker.

sudo docker run -d \
  --name crossdesk_server \
  --network host \
  -e EXTERNAL_IP=xxx.xxx.xxx.xxx \
  -e INTERNAL_IP=xxx.xxx.xxx.xxx \
  -e CROSSDESK_SERVER_PORT=xxxx \
  -e COTURN_PORT=xxxx \
  -e MIN_PORT=xxxxx \
  -e MAX_PORT=xxxxx \
  -v /var/lib/crossdesk:/var/lib/crossdesk \
  -v /var/log/crossdesk:/var/log/crossdesk \
  crossdesk/crossdesk-server:v1.1.3

The parameters you need to pay attention to are as follows:

Parameters

  • EXTERNAL_IP: The servers public IP. This corresponds to Server Address in the CrossDesk clients Self-Hosted Server Configuration.
  • INTERNAL_IP: The servers internal IP.
  • CROSSDESK_SERVER_PORT: The port used by the self-hosted service. This corresponds to Server Port in the CrossDesk clients Self-Hosted Server Configuration.
  • COTURN_PORT: The port used by the COTURN service. This corresponds to Relay Service Port in the CrossDesk clients Self-Hosted Server Configuration.
  • MIN_PORT / MAX_PORT: The port range used by the COTURN service. Example: MIN_PORT=50000, MAX_PORT=60000. Adjust the range depending on the number of clients.
  • -v /var/lib/crossdesk:/var/lib/crossdesk: Persists database and certificate files on the host machine.
  • -v /var/log/crossdesk:/var/log/crossdesk: Persists log files on the host machine.

Example:

sudo docker run -d \
  --name crossdesk_server \
  --network host \
  -e EXTERNAL_IP=114.114.114.114 \
  -e INTERNAL_IP=10.0.0.1 \
  -e CROSSDESK_SERVER_PORT=9099 \
  -e COTURN_PORT=3478 \
  -e MIN_PORT=50000 \
  -e MAX_PORT=60000 \
  -v /var/lib/crossdesk:/var/lib/crossdesk \
  -v /var/log/crossdesk:/var/log/crossdesk \
  crossdesk/crossdesk-server:v1.1.3

Notes

  • The server must open the following ports: COTURN_PORT/udp, COTURN_PORT/tcp, MIN_PORTMAX_PORT/udp, and CROSSDESK_SERVER_PORT/tcp.
  • If you dont mount volumes, all data will be lost when the container is removed.
  • Certificate files will be automatically generated on first startup and persisted to the host at /var/lib/crossdesk/certs.
  • The database file will be automatically created and stored at /var/lib/crossdesk/db/crossdesk-server.db.
  • Log files will be created and stored at /var/log/crossdesk/.

Permission Notice If the directories automatically created by Docker belong to root and have insufficient write permissions, the container user may not be able to write to them. This can cause:

  • Certificate generation failure, leading to startup script errors and container exit.
  • Database directory creation failure, causing the program to throw exceptions and crash.
  • Log directory creation failure, preventing logs from being written (though the program may continue running).

Solution: Manually set permissions before starting the container:

sudo mkdir -p /var/lib/crossdesk /var/log/crossdesk
sudo chown -R $(id -u):$(id -g) /var/lib/crossdesk /var/log/crossdesk

Server Side

Place crossdesk.cn.key and crossdesk.cn_bundle.crt into the /path/to/your/certs directory.

Client Side

  1. Click the settings icon in the top-right corner to enter the settings page.

    image

  2. Click Self-Hosted Server Configuration button.

    image

  3. Enter the Server Address (EXTERNAL_IP), Signaling Service Port (CROSSDESK_SERVER_PORT), and Relay Service Port (COTURN_PORT).

    image

  4. If the self-hosted server is later reset or the certificate is replaced for any reason, you can click the Reset Certificate Fingerprint button to clear the certificate fingerprint saved on the client.

    image

Web Client

See CrossDesk Web Client

FAQ

See FAQ .