一套键盘、一只鼠标、一份剪贴板 —— 在同一局域网内的 Mac、Windows、Linux 之间共享。
把光标移出一台屏幕的边缘,它就落到下一台机器上;键盘随之切换,剪贴板(文本和图片)自动同步。不需要 KVM 硬件,也不用插线。

| 显示器布局 | 连接设备 | 设置 |
|---|---|---|
![]() |
![]() |
![]() |
IP:端口),点 添加。只有上报了屏幕信息的设备才会加入布局。chmod +x)。MyKVM 是一个实验性的早期版本,适合在本地可信网络中测试和迭代,但还没有面向不可信网络做生产级加固。当前版本和安装包见 Releases 页面。
47833(发现)和 UDP 47834(QUIC 传输)请不要把传输端口暴露到公网或不可信网络。
MyKVM 使用两条通道:局域网发现走普通 UDP 端口;输入和剪贴板走另一个 UDP 端口上的加密 QUIC 连接。
| 通道 | 默认端口 | 传输方式 | 协议标记 | 用途 |
|---|---|---|---|---|
| 发现 | UDP 47833 |
UDP 数据报 | mykvm.discovery.v1 |
局域网发现、设备探测/回应、主机信息和屏幕元数据 |
| 输入 | UDP 47834 |
QUIC datagram | mykvm.input.v1 |
鼠标移动、鼠标按键、滚轮和键盘事件(低延迟、容忍丢包) |
| 剪贴板 | UDP 47834 |
QUIC stream | mykvm.clipboard.v1 |
剪贴板文本和图片同步(可靠、有序) |
发现端口可以在设置中固定(默认 UDP 47833);QUIC 传输端口默认取发现端口 + 1(UDP 47834)。两者在端口被占用时都会向附近端口自动回退,必要时交给系统分配端口。设备会广播自己的发现端口、QUIC 端口、传输公钥和协议版本,因此局域网发现和手动添加都能连到正确端口并绑定正确的证书。
QUIC 连接使用 TLS 1.3 加密:每个端在启动时生成一张自签名证书并在发现阶段广播,连接方会 pin 住这张证书,因此输入和剪贴板流量是加密的、且只绑定到广播该证书的对端。发现通道本身仍是明文且未认证,因此请把 MyKVM 保持在可信局域网内使用。
安装依赖:
npm install
运行 Web UI:
npm run dev
运行 Tauri 桌面端:
npm run tauri:dev
构建但不打安装包:
npm run tauri:build
构建桌面安装包:
npm run tauri:bundle
Windows:
powershell -ExecutionPolicy Bypass -File .\scripts\check-dev-env.ps1
powershell -ExecutionPolicy Bypass -File .\scripts\run-tauri-dev.ps1
macOS 和 Linux:
sh scripts/check-dev-env.sh
sh scripts/run-tauri-dev.sh
macOS 的输入捕获和注入需要在系统设置中授权 Accessibility 和 Input Monitoring。
提交 PR 或发布版本前建议运行:
npm run build
npm run lint
cargo check --manifest-path src-tauri/Cargo.toml
Git 本身只负责保存源码历史和推送提交。真正的打包、编译和生成安装包由 GitHub Actions 在 GitHub runner 上完成。
Release 工作流会监听 main 分支推送:
feat: 发布下一个 minor 版本,例如 v0.1.0 到 v0.2.0。fix: 发布下一个 patch 版本,例如 v0.1.0 到 v0.1.1。feat: 或 fix: 推送会发布 v0.1.0。Release 说明取自 CHANGELOG.md 的 ## [Unreleased] 段落(面向用户的措辞),没有则回退到过滤后的提交标题。改动落地时记得同步更新该段落。
示例:
git commit -m "feat: initial desktop release"
git push origin main
工作流会自动创建 git tag,构建 macOS、Windows 和 Linux 安装包,然后发布到 GitHub Release。
| 路径 | 用途 |
|---|---|
src/App.tsx |
React 桌面控制台主界面 |
src/desktopApi.ts |
前端到 Tauri 命令的桥接层 |
src/layout.ts |
显示器布局变换和邻接逻辑 |
src/runtime.ts |
运行时状态类型 |
src-tauri/src/lib.rs |
Tauri 命令、UDP 设备发现、剪贴板同步、应用状态和性能采样 |
src-tauri/src/input.rs |
输入捕获、转发和注入运行时 |
src-tauri/src/quic_transport.rs |
加密 QUIC 传输(输入 datagram、剪贴板 stream),带证书 pin |
scripts/ |
开发和构建辅助脚本 |
欢迎提交 issue 和 pull request。改动请保持聚焦;如果影响协议行为,请在文档中说明;如果触及共享运行时代码,请同时验证 Web 构建和 Tauri 后端。
提交前缀和版本规则见 CONTRIBUTING.md。
MIT。见 LICENSE。
$ claude mcp add mykvm \
-- python -m otcore.mcp_server <graph>