{"id":33300618,"url":"https://github.com/kunkundi/crossdesk","last_synced_at":"2026-04-01T19:38:29.659Z","repository":{"id":208187771,"uuid":"720999514","full_name":"kunkundi/crossdesk","owner":"kunkundi","description":"A lightweight, cross-platform remote desktop software with support for Web Client access | 一款支持 Web 客户端访问的轻量级跨平台远程桌面软件。","archived":false,"fork":false,"pushed_at":"2026-03-19T20:37:02.000Z","size":50303,"stargazers_count":3872,"open_issues_count":16,"forks_count":363,"subscribers_count":19,"default_branch":"file-transfer","last_synced_at":"2026-03-19T23:39:02.677Z","etag":null,"topics":["audio-streaming","codec","cplusplus","cross-platform","imgui","kcp","libdatachannel","remote-control","remote-desktop","rtc","rtp","sdl3","video-streaming","web-client","webrtc","xmake"],"latest_commit_sha":null,"homepage":"https://www.crossdesk.cn","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kunkundi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-20T06:31:52.000Z","updated_at":"2026-03-19T20:37:06.000Z","dependencies_parsed_at":"2023-12-18T04:25:02.266Z","dependency_job_id":"2120fe55-7188-4746-be13-d653994caa84","html_url":"https://github.com/kunkundi/crossdesk","commit_stats":null,"previous_names":["dijunkun/continuous-desk","kunkundi/deskport","kunkundi/crossdesk"],"tags_count":78,"template":false,"template_full_name":null,"purl":"pkg:github/kunkundi/crossdesk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunkundi%2Fcrossdesk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunkundi%2Fcrossdesk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunkundi%2Fcrossdesk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunkundi%2Fcrossdesk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kunkundi","download_url":"https://codeload.github.com/kunkundi/crossdesk/tar.gz/refs/heads/file-transfer","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunkundi%2Fcrossdesk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-streaming","codec","cplusplus","cross-platform","imgui","kcp","libdatachannel","remote-control","remote-desktop","rtc","rtp","sdl3","video-streaming","web-client","webrtc","xmake"],"created_at":"2025-11-18T10:00:53.214Z","updated_at":"2026-04-01T19:38:29.648Z","avatar_url":"https://github.com/kunkundi.png","language":"C++","readme":"# CrossDesk\n\n\u003ca href=\"https://hellogithub.com/repository/kunkundi/crossdesk\" target=\"_blank\"\u003e\u003cimg src=\"https://api.hellogithub.com/v1/widgets/recommend.svg?rid=55d41367570345f1838e02fd12be7961\u0026claim_uid=cb0OpZRrBuGVAfL\u0026theme=small\" alt=\"Featured｜HelloGitHub\" /\u003e\u003c/a\u003e\n[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-brightgreen.svg)]()\n[![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)\n[![GitHub last commit](https://img.shields.io/github/last-commit/kunkundi/crossdesk)](https://github.com/kunkundi/crossdesk/commits/web-client)\n[![Build Status](https://github.com/kunkundi/crossdesk/actions/workflows/build.yml/badge.svg)](https://github.com/kunkundi/crossdesk/actions)  \n[![Docker Pulls](https://img.shields.io/docker/pulls/crossdesk/crossdesk-server)](https://hub.docker.com/r/crossdesk/crossdesk-server/tags)\n[![GitHub issues](https://img.shields.io/github/issues/kunkundi/crossdesk.svg)]()\n[![GitHub stars](https://img.shields.io/github/stars/kunkundi/crossdesk.svg?style=social)]()\n[![GitHub forks](https://img.shields.io/github/forks/kunkundi/crossdesk.svg?style=social)]()\n\n[ [English](README_EN.md) / 中文 ]\n\nPC 客户端\n![sup_example](https://github.com/user-attachments/assets/eeb64fbe-1f07-4626-be1c-b77396beb905)\n\nWeb 客户端\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"850\" height=\"550\" alt=\"6bddcbed47ffd4b9988a4037c7f4f524\" src=\"https://github.com/user-attachments/assets/e44f73f9-24ac-46a3-a189-b7f8b6669881\" /\u003e\n\u003c/p\u003e\n\n## 简介\n\nCrossDesk 是一个轻量级的跨平台远程桌面软件，支持 Web 端控制远程设备。\n\nCrossDesk 是 [MiniRTC](https://github.com/kunkundi/minirtc.git) 实时音视频传输库的实验性应用。MiniRTC 是一个轻量级的跨平台实时音视频传输库。它具有网络透传（[RFC5245](https://datatracker.ietf.org/doc/html/rfc5245)），视频软硬编解码（H264/AV1），音频编解码（[Opus](https://github.com/xiph/opus)），信令交互，网络拥塞控制，传输加密（[SRTP](https://tools.ietf.org/html/rfc3711)）等基础能力。\n\n## 系统要求\n\n| 平台 | 最低版本 |\n|----------------|---------------------------|\n| **Windows** | Windows 10 及以上 (64 位) |\n| **macOS** | macOS Intel 15.0 及以上 ( 大于 14.0 小于 15.0 的版本可自行编译实现兼容 )\u003cbr\u003e macOS Apple Silicon 14.0 及以上 |\n| **Linux** | Ubuntu 22.04 及以上 ( 低版本可自行编译实现兼容 ) |\n\n## 使用\n\n在菜单栏“对端ID”处输入远端桌面的ID，点击“→”即可发起远程连接。\n\n![usage1](https://github.com/user-attachments/assets/3a4bb59f-c84c-44d2-9a20-11790aac510e)\n\n如果远端桌面设置了连接密码，则本端需填写正确的连接密码才能成功发起远程连接。\n\n![password](https://github.com/user-attachments/assets/1beadcce-640d-4f5c-8e77-51917b5294d5)\n\n发起连接前，可在设置中自定义配置项，如语言、视频编码格式等。\n![settings](https://github.com/user-attachments/assets/8bc5468d-7bbb-4e30-95bd-da1f352ac08c)\n\n### Web 客户端\n浏览器访问 [CrossDesk Web Client](https://web.crossdesk.cn/)。\n输入 **远程设备 ID** 与 **密码**，点击连接即可接入远程设备。如图，**iOS Safari 远程控制 Win11**：\n\n\u003cimg 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\" /\u003e\n\n## 如何编译\n\n依赖：\n- [xmake](https://xmake.io/#/guide/installation)\n- [cmake](https://cmake.org/download/)\n\nLinux环境下需安装以下包：\n\n```\nsudo 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\n```\n\n编译\n```\ngit clone https://github.com/kunkundi/crossdesk.git\n\ncd crossdesk\n\ngit submodule init \n\ngit submodule update\n\nxmake b -vy crossdesk\n```\n编译选项\n```\n--USE_CUDA=true/false: 启用 CUDA 硬件编解码，默认不启用\n--CROSSDESK_VERSION=xxx: 指定 CrossDesk 的版本\n\n# 示例\nxmake f --CROSSDESK_VERSION=1.0.0 --USE_CUDA=true\n```\n运行\n```\nxmake r crossdesk\n```\n\n### 无 CUDA 环境下的开发支持\n\n对于**未安装 CUDA 环境的 Linux 开发者，如果希望编译后的成果物拥有硬件编解码能力**，这里提供了预配置的 [Ubuntu 22.04 Docker 镜像](https://hub.docker.com/r/crossdesk/ubuntu22.04)。该镜像内置必要的构建依赖，可在容器中开箱即用，无需额外配置即可直接编译项目。\n\n进入容器，下载工程后执行：\n```\nexport CUDA_PATH=/usr/local/cuda\nexport XMAKE_GLOBALDIR=/data\n\nxmake f --USE_CUDA=true\nxmake b --root -vy crossdesk\n```\n\n对于**未安装 CUDA 环境的 Windows 开发者**，执行下面的命令安装 CUDA 编译环境：\n```\nxmake require -vy \"cuda 12.6.3\"\n```\n安装完成后执行:\n```\nxmake require --info \"cuda 12.6.3\"\n```\n输出如下:\n\n\u003cimg width=\"860\" height=\"226\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/999ac365-581a-4b9a-806e-05eb3e4cf44d\" /\u003e\n\n根据上述输出获取到 CUDA 的安装目录，即 installdir 指向的位置。将 CUDA_PATH 加入系统环境变量，或在终端中输入：\n```\nset CUDA_PATH=path_to_cuda_installdir\n```\n重新执行：\n```\nxmake f --USE_CUDA=true\nxmake b -vy crossdesk\n```\n\n#### 注意\n运行时如果客户端状态栏显示 **未连接服务器**，请先在 [CrossDesk 官方网站](https://www.crossdesk.cn/) 安装客户端，以便在环境中安装所需的证书文件。\n\n\u003cimg width=\"256\" height=\"120\" alt=\"image\" src=\"https://github.com/user-attachments/assets/1812f7d6-516b-4b4f-8a3d-98bee505cc5a\" /\u003e\n\n## 关于 Xmake\n\n#### 安装 Xmake\n使用 curl：\n```\ncurl -fsSL https://xmake.io/shget.text | bash\n```\n使用 wget：\n```\nwget https://xmake.io/shget.text -O - | bash\n```\n使用 powershell：\n```\nirm https://xmake.io/psget.text | iex\n```\n\n#### 编译选项\n```\n# 切换编译模式\nxmake f -m debug/release\n\n# 可选编译参数\n-r ：重新构建目标\n-v ：显示详细的构建日志\n-y ：自动确认提示\n\n# 示例\nxmake b -vy crossdesk\n```\n\n#### 运行选项\n```\n# 使用调试模式运行\nxmake r -d crossdesk\n```\n更多使用方法可参考 [Xmake官方文档](https://xmake.io/guide/quick-start.html) 。\n\n## 自托管服务器\n推荐使用Docker部署CrossDesk Server。\n```bash\nsudo docker run -d \\\n  --name crossdesk_server \\\n  --network host \\\n  -e EXTERNAL_IP=xxx.xxx.xxx.xxx \\\n  -e INTERNAL_IP=xxx.xxx.xxx.xxx \\\n  -e CROSSDESK_SERVER_PORT=xxxx \\\n  -e COTURN_PORT=xxxx \\\n  -e MIN_PORT=xxxxx \\\n  -e MAX_PORT=xxxxx \\\n  -v /var/lib/crossdesk:/var/lib/crossdesk \\\n  -v /var/log/crossdesk:/var/log/crossdesk \\\n  crossdesk/crossdesk-server:v1.1.6\n```\n\n上述命令中，用户需注意的参数如下：\n\n**参数**\n- EXTERNAL_IP：服务器公网 IP , 对应 CrossDesk 客户端**自托管服务器配置**中填写的**服务器地址**\n- INTERNAL_IP：服务器内网 IP\n- CROSSDESK_SERVER_PORT：自托管服务使用的端口，对应 CrossDesk 客户端**自托管服务器配置**中填写的**服务器端口**\n- COTURN_PORT: COTURN 服务使用的端口, 对应 CrossDesk 客户端**自托管服务器配置**中填写的**中继服务端口**\n- MIN_PORT/MAX_PORT：COTURN 服务使用的端口范围，例如：MIN_PORT=50000, MAX_PORT=60000，范围可根据客户端数量调整。\n- `-v /var/lib/crossdesk:/var/lib/crossdesk`：持久化数据库和证书文件到宿主机\n- `-v /var/log/crossdesk:/var/log/crossdesk`：持久化日志文件到宿主机\n\n**示例**：\n```bash\nsudo docker run -d \\\n  --name crossdesk_server \\\n  --network host \\\n  -e EXTERNAL_IP=114.114.114.114 \\\n  -e INTERNAL_IP=10.0.0.1 \\\n  -e CROSSDESK_SERVER_PORT=9099 \\\n  -e COTURN_PORT=3478 \\\n  -e MIN_PORT=50000 \\\n  -e MAX_PORT=60000 \\\n  -v /var/lib/crossdesk:/var/lib/crossdesk \\\n  -v /var/log/crossdesk:/var/log/crossdesk \\\n  crossdesk/crossdesk-server:v1.1.6\n```\n\n**注意**：\n- **服务器需开放端口：COTURN_PORT/udp，COTURN_PORT/tcp，MIN_PORT-MAX_PORT/udp，CROSSDESK_SERVER_PORT/tcp。**\n- 如果不挂载 volume，容器删除后数据会丢失\n- 证书文件会在首次启动时自动生成并持久化到宿主机的 `/var/lib/crossdesk/certs` 路径下。由于默认使用的是自签证书，无法保障安全性，建议在云服务商申请正式证书放到该目录下并重启服务。\n- 数据库文件会自动创建并持久化到宿主机的 `/var/lib/crossdesk/db/crossdesk-server.db` 路径下\n- 日志文件会自动创建并持久化到宿主机的 `/var/log/crossdesk/` 路径下\n\n**权限注意**：如果 Docker 自动创建的目录权限不足（属于 root），容器内用户无法写入，会导致：\n  - 证书生成失败，容器启动脚本会报错退出\n  - 数据库目录创建失败，程序会抛出异常并崩溃\n  - 日志目录创建失败，日志文件无法写入（但程序可能继续运行）\n  \n**解决方案**：在启动容器前手动设置权限：\n```bash\nsudo mkdir -p /var/lib/crossdesk /var/log/crossdesk\nsudo chown -R $(id -u):$(id -g) /var/lib/crossdesk /var/log/crossdesk\n```\n\n\n### 客户端\n1. 点击右上角设置进入设置页面。\u003cbr\u003e\u003cbr\u003e\n\u003cimg width=\"600\" height=\"210\" alt=\"image\" src=\"https://github.com/user-attachments/assets/6431131d-b32a-4726-8783-6788f47baa3b\" /\u003e\u003cbr\u003e\n\n2. 点击`自托管服务器配置`按钮。\u003cbr\u003e\u003cbr\u003e\n\u003cimg width=\"600\" height=\"160\" alt=\"image\" src=\"https://github.com/user-attachments/assets/24c761a3-1985-4d7e-84be-787383c2afb8\" /\u003e\u003cbr\u003e\n\n3. 输入`服务器地址`(**EXTERNAL_IP**)、`信令服务端口`(**CROSSDESK_SERVER_PORT**)、`中继服务端口`(**COTURN_PORT**)，点击确认按钮。\n   \n4. 勾选`自托管服务器配置`选项，点击确认按钮保存设置。如果服务端使用的是正式证书，则到此步骤为止，客户端即可显示已连接服务器。\n\n5. 如果使用默认证书（正式证书忽略此步骤），则需要将服务端`/var/lib/crossdesk/certs/`目录下的`api.crossdesk.cn_root.crt`自签根证书下载到运行客户端的机器，并执行下述命令安装证书：\n\nWindows 平台使用**管理员权限**打开 PowerShell 执行\n```\ncertutil -addstore \"Root\" \"C:\\path\\to\\api.crossdesk.cn_root.crt\"\n```\nLinux\n```\nsudo cp /path/to/api.crossdesk.cn_root.crt /usr/local/share/ca-certificates/api.crossdesk.cn_root.crt\nsudo update-ca-certificates\n```\nmacOS\n```\nsudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain path/to/api.crossdesk.cn_root.crt\n```\n\n### Web 客户端\n详情见项目 [CrossDesk Web Client](https://github.com/kunkundi/crossdesk-web-client)。\n\n# 常见问题\n见 [常见问题](https://github.com/kunkundi/crossdesk/blob/self-hosted-server/docs/FAQ.md) 。\n","funding_links":[],"categories":["网络信息服务","C++","🛠️ 一、工具类项目"],"sub_categories":["网络代理","🖥️ 1.4 系统工具"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkunkundi%2Fcrossdesk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkunkundi%2Fcrossdesk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkunkundi%2Fcrossdesk/lists"}