mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-12-16 20:17:10 +08:00
250 lines
11 KiB
Markdown
250 lines
11 KiB
Markdown
# CrossDesk
|
||
|
||
<a href="https://hellogithub.com/repository/kunkundi/crossdesk" target="_blank"><img src="https://api.hellogithub.com/v1/widgets/recommend.svg?rid=55d41367570345f1838e02fd12be7961&claim_uid=cb0OpZRrBuGVAfL&theme=small" alt="Featured|HelloGitHub" /></a>
|
||
[]()
|
||
[](https://www.gnu.org/licenses/lgpl-3.0)
|
||
[](https://github.com/kunkundi/crossdesk/commits/web-client)
|
||
[](https://github.com/kunkundi/crossdesk/actions)
|
||
[](https://hub.docker.com/r/crossdesk/crossdesk-server/tags)
|
||
[]()
|
||
[]()
|
||
[]()
|
||
|
||
[ [中文](README.md) / English ]
|
||
|
||
PC Client
|
||

|
||
|
||
Web Client
|
||
<p align="center">
|
||
<img width="850" height="550" alt="6bddcbed47ffd4b9988a4037c7f4f524" src="https://github.com/user-attachments/assets/e44f73f9-24ac-46a3-a189-b7f8b6669881" />
|
||
</p>
|
||
|
||
# Intro
|
||
|
||
CrossDesk is a lightweight cross-platform remote desktop software.
|
||
|
||
CrossDesk is an experimental application of [MiniRTC](https://github.com/kunkundi/minirtc.git), a lightweight cross-platform real-time audio and video transmission library. MiniRTC provides fundamental capabilities including network traversal ([RFC5245](https://datatracker.ietf.org/doc/html/rfc5245)), video software/hardware encoding and decoding (H264/AV1), audio encoding/decoding ([Opus](https://github.com/xiph/opus)), signaling interaction, network congestion control, and transmission encryption ([SRTP](https://tools.ietf.org/html/rfc3711)).
|
||
|
||
## 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)*<br>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 bar’s “Remote ID” field and click “→” to initiate a remote connection.
|
||
|
||

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

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

|
||
|
||
### Web Client
|
||
|
||
Visit [CrossDesk Web Client](https://web.crossdesk.cn/).
|
||
Enter the **Remote Device ID** and **Password**, then click Connect to access the remote device. As shown, **iOS Safari remotely controlling Windows 11**:
|
||
|
||
<img width="645" height="300" alt="_cgi-bin_mmwebwx-bin_webwxgetmsgimg__ MsgID=932911462648581698 skey=@crypt_1f5153b1_b550ca7462b5009ce03c991cca2a92a7 mmweb_appid=wx_webfilehelper" src="https://github.com/user-attachments/assets/a5109e6f-752c-4654-9f4e-7e161bddf43e" />
|
||
|
||
## How to build
|
||
|
||
Requirements:
|
||
- [xmake](https://xmake.io/#/guide/installation)
|
||
- [cmake](https://cmake.org/download/)
|
||
|
||
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](https://hub.docker.com/r/crossdesk/ubuntu22.04) 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:
|
||
|
||
<img width="860" height="226" alt="Image" src="https://github.com/user-attachments/assets/999ac365-581a-4b9a-806e-05eb3e4cf44d" />
|
||
|
||
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](https://www.crossdesk.cn/) to ensure the required certificate files are available in the environment.
|
||
|
||
<img width="256" height="120" alt="image" src="https://github.com/user-attachments/assets/1812f7d6-516b-4b4f-8a3d-98bee505cc5a" />
|
||
|
||
## 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](https://xmake.io/guide/quick-start.html) .
|
||
|
||
## 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.2
|
||
```
|
||
|
||
The parameters you need to pay attention to are as follows:
|
||
|
||
**Parameters**
|
||
- **EXTERNAL_IP**: The server’s public IP. This corresponds to **Server Address** in the CrossDesk client’s **Self-Hosted Server Configuration**.
|
||
- **INTERNAL_IP**: The server’s internal IP.
|
||
- **CROSSDESK_SERVER_PORT**: The port used by the self-hosted service. This corresponds to **Server Port** in the CrossDesk client’s **Self-Hosted Server Configuration**.
|
||
- **COTURN_PORT**: The port used by the COTURN service. This corresponds to **Relay Service Port** in the CrossDesk client’s **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.
|
||
|
||
**Notes**
|
||
- **The server must open the following ports: 3478/udp, 3478/tcp, MIN_PORT–MAX_PORT/udp, and CROSSDESK_SERVER_PORT/tcp.**
|
||
- If you don’t 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:
|
||
```bash
|
||
sudo mkdir -p /var/lib/crossdesk /var/log/crossdesk
|
||
sudo chown -R $(id -u):$(id -g) /var/lib/crossdesk /var/log/crossdesk
|
||
```
|
||
|
||
### Certificate Files
|
||
You can find the certificate file `crossdesk.cn_root.crt` at `/var/lib/crossdesk/certs` on the host machine.
|
||
Download it to your client device and select it in the **Certificate File Path** field under the CrossDesk client’s **Self-Hosted Server Settings**.
|
||
|
||
### 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.<br>
|
||
<img width="600" height="210" alt="image" src="https://github.com/user-attachments/assets/6431131d-b32a-4726-8783-6788f47baa3b" /><br><br>
|
||
|
||
2. Click **Self-Hosted Server Configuration**.<br><br>
|
||
<img width="600" height="160" alt="image" src="https://github.com/user-attachments/assets/24c761a3-1985-4d7e-84be-787383c2afb8" /><br><br>
|
||
|
||
3. In the **Certificate File Path** selection, locate and select the **crossdesk.cn_root.crt** file.<br><br>
|
||
<img width="600" height="220" alt="image" src="https://github.com/user-attachments/assets/4af7cd3a-c72e-44fb-b032-30e050019c2a" /><br><br>
|
||
|
||
4. Check the option to use **Self-Hosted Server Configuration**.<br><br>
|
||
<img width="600" height="160" alt="image" src="https://github.com/user-attachments/assets/1e455dc3-4087-4f37-a544-1ff9f8789383" /><br><br>
|
||
|
||
### Web Client
|
||
See [CrossDesk Web Client](https://github.com/kunkundi/crossdesk-web-client)。
|
||
|
||
# FAQ
|
||
See [FAQ](https://github.com/kunkundi/crosssesk/blob/self-hosted-server/docs/FAQ.md) .
|