Home
Softono
crossdesk

crossdesk

Open source C++
4.1K
Stars
387
Forks
13
Issues
21
Watchers
1 week
Last Commit

About crossdesk

CrossDesk is a lightweight, cross-platform remote desktop application that enables users to control devices from Windows, macOS, or Linux systems, as well as directly through any modern web browser without installing additional client software. Built as an experimental implementation of the MiniRTC real-time media transmission library, it supports low-latency video and audio streaming with hardware and software encoding options including H264 and AV1 for video and Opus for audio. The software utilizes secure communication protocols with encryption via SRTP and complies with RFC5245 for network traversal. Key features include peer-to-peer connections initiated by entering a unique device ID and optional connection passwords, customizable settings for language and video codecs, and support for secure desktop scenarios on Windows. On Windows platforms, an optional background service enhances control during locked, login, or secure desktop states by enabling keyboard and mouse input forwarding and secure attentio

Platforms

Web Self-hosted

Languages

C++

CrossDesk

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

[ English / 中文 ]

PC 客户端 sup_example

Web 客户端

6bddcbed47ffd4b9988a4037c7f4f524

简介

CrossDesk 是一个轻量级的跨平台远程桌面软件,支持 Web 端控制远程设备。

CrossDesk 是 MiniRTC 实时音视频传输库的实验性应用。MiniRTC 是一个轻量级的跨平台实时音视频传输库。它具有网络透传(RFC5245),视频软硬编解码(H264/AV1),音频编解码(Opus),信令交互,网络拥塞控制,传输加密(SRTP)等基础能力。

系统要求

平台 最低版本
Windows Windows 10 及以上 (64 位)
macOS macOS Intel 15.0 及以上 ( 大于 14.0 小于 15.0 的版本可自行编译实现兼容 )
macOS Apple Silicon 14.0 及以上
Linux Ubuntu 22.04 及以上 ( 低版本可自行编译实现兼容 )

使用

在菜单栏“对端ID”处输入远端桌面的ID,点击“→”即可发起远程连接。

usage1

如果远端桌面设置了连接密码,则本端需填写正确的连接密码才能成功发起远程连接。

password

发起连接前,可在设置中自定义配置项,如语言、视频编码格式等。 settings

Web 客户端

浏览器访问 CrossDesk Web Client。 输入 远程设备 ID密码,点击连接即可接入远程设备。如图,iOS Safari 远程控制 Win11

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

Windows 服务(CrossDesk Service)

CrossDesk 在 Windows 平台提供本地辅助服务 CrossDesk Service,服务名为 CrossDeskService。该服务用于锁屏、登录界面和安全桌面等受保护场景下的远程控制增强能力,包括:

  • 上报远端当前是否处于锁屏、登录、凭据输入或安全桌面状态;
  • 支持从控制端发送 Ctrl+Alt+Del(SAS);
  • 在锁屏、登录和安全桌面阶段转发键盘、鼠标输入。

Windows 安装包会自动打包 crossdesk_service.execrossdesk_session_helper.exe,并在安装时注册为按需启动的 Windows 服务。CrossDesk 客户端启动时会尝试启动已安装的服务;当本机没有 CrossDesk 客户端进程运行时,服务会自动退出。卸载客户端时会同步停止并移除该服务。

如果是手动编译或手动部署 Windows 版本,请确保 CrossDesk.execrossdesk_service.execrossdesk_session_helper.exe 位于同一目录。安装或卸载服务需要使用管理员权限打开 PowerShell:

# 安装
.\CrossDesk.exe --service-install
# 启动
.\CrossDesk.exe --service-start
# 查看状态
.\CrossDesk.exe --service-status
.\CrossDesk.exe --service-stop
# 卸载
.\CrossDesk.exe --service-uninstall

如果远端 Windows 服务未安装、未启动或暂时不可用,基础远程桌面连接仍可使用,但锁屏、登录界面和安全桌面阶段的控制能力会受限,客户端会提示“远端Windows服务不可用”。

如何编译

依赖:

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

编译

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

cd crossdesk

git submodule init 

git submodule update

xmake b -vy crossdesk

编译选项

--USE_CUDA=true/false: 启用 CUDA 硬件编解码,默认不启用
--CROSSDESK_VERSION=xxx: 指定 CrossDesk 的版本

# 示例
xmake f --CROSSDESK_VERSION=1.0.0 --USE_CUDA=true

运行

xmake r crossdesk

无 CUDA 环境下的开发支持

对于未安装 CUDA 环境的 Linux 开发者,如果希望编译后的成果物拥有硬件编解码能力,这里提供了预配置的 Ubuntu 22.04 Docker 镜像。该镜像内置必要的构建依赖,可在容器中开箱即用,无需额外配置即可直接编译项目。

进入容器,下载工程后执行:

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

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

对于未安装 CUDA 环境的 Windows 开发者,执行下面的命令安装 CUDA 编译环境:

xmake require -vy "cuda 12.6.3"

安装完成后执行:

xmake require --info "cuda 12.6.3"

输出如下:

Image

根据上述输出获取到 CUDA 的安装目录,即 installdir 指向的位置。将 CUDA_PATH 加入系统环境变量,或在终端中输入:

set CUDA_PATH=path_to_cuda_installdir

重新执行:

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

注意

运行时如果客户端状态栏显示 未连接服务器,请先在 CrossDesk 官方网站 安装客户端,以便在环境中安装所需的证书文件。

image

关于 Xmake

安装 Xmake

使用 curl:

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

使用 wget:

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

使用 powershell:

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

编译选项

# 切换编译模式
xmake f -m debug/release

# 可选编译参数
-r :重新构建目标
-v :显示详细的构建日志
-y :自动确认提示

# 示例
xmake b -vy crossdesk

运行选项

# 使用调试模式运行
xmake r -d crossdesk

更多使用方法可参考 Xmake官方文档

自托管服务器

推荐使用Docker部署CrossDesk Server。

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.6

上述命令中,用户需注意的参数如下:

参数

  • EXTERNAL_IP:服务器公网 IP , 对应 CrossDesk 客户端自托管服务器配置中填写的服务器地址
  • INTERNAL_IP:服务器内网 IP
  • CROSSDESK_SERVER_PORT:自托管服务使用的端口,对应 CrossDesk 客户端自托管服务器配置中填写的服务器端口
  • COTURN_PORT: COTURN 服务使用的端口, 对应 CrossDesk 客户端自托管服务器配置中填写的中继服务端口
  • MIN_PORT/MAX_PORT:COTURN 服务使用的端口范围,例如:MIN_PORT=50000, MAX_PORT=60000,范围可根据客户端数量调整。
  • -v /var/lib/crossdesk:/var/lib/crossdesk:持久化数据库和证书文件到宿主机
  • -v /var/log/crossdesk:/var/log/crossdesk:持久化日志文件到宿主机

示例

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.6

注意

  • 服务器需开放端口:COTURN_PORT/udp,COTURN_PORT/tcp,MIN_PORT-MAX_PORT/udp,CROSSDESK_SERVER_PORT/tcp。
  • 如果不挂载 volume,容器删除后数据会丢失
  • 证书文件会在首次启动时自动生成并持久化到宿主机的 /var/lib/crossdesk/certs 路径下。由于默认使用的是自签证书,无法保障安全性,建议在云服务商申请正式证书放到该目录下并重启服务。
  • 数据库文件会自动创建并持久化到宿主机的 /var/lib/crossdesk/db/crossdesk-server.db 路径下
  • 日志文件会自动创建并持久化到宿主机的 /var/log/crossdesk/ 路径下

权限注意:如果 Docker 自动创建的目录权限不足(属于 root),容器内用户无法写入,会导致:

  • 证书生成失败,容器启动脚本会报错退出
  • 数据库目录创建失败,程序会抛出异常并崩溃
  • 日志目录创建失败,日志文件无法写入(但程序可能继续运行)

解决方案:在启动容器前手动设置权限:

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

客户端

  1. 点击右上角设置进入设置页面。

    image
  2. 点击自托管服务器配置按钮。

    image
  3. 输入服务器地址(EXTERNAL_IP)、信令服务端口(CROSSDESK_SERVER_PORT)、中继服务端口(COTURN_PORT),点击确认按钮。

  4. 勾选自托管服务器配置选项,点击确认按钮保存设置。如果服务端使用的是正式证书,则到此步骤为止,客户端即可显示已连接服务器。

  5. 如果使用默认证书(正式证书忽略此步骤),则需要将服务端/var/lib/crossdesk/certs/目录下的api.crossdesk.cn_root.crt自签根证书下载到运行客户端的机器,并执行下述命令安装证书:

Windows 平台使用管理员权限打开 PowerShell 执行

certutil -addstore "Root" "C:\path\to\api.crossdesk.cn_root.crt"

Linux

sudo cp /path/to/api.crossdesk.cn_root.crt /usr/local/share/ca-certificates/api.crossdesk.cn_root.crt
sudo update-ca-certificates

macOS

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain path/to/api.crossdesk.cn_root.crt

Web 客户端

详情见项目 CrossDesk Web Client

常见问题

常见问题

致谢