如何用两块 Raspberry Pi Pico 开发板打造仅需 11 欧元的硬件 KVM 切换器
桌上摆着两台电脑,却只有一套键盘鼠标?通常有两种解决方案。第一种是基于软件的(比如 Barrier 或 Input Leap),但随之而来的麻烦让人头疼:网络掉线、企业 VPN 屏蔽本地流量,或者工作电脑不允许安装第三方软件。第二种方案是从 AliExpress 买个廉价的 USB 切换器。按一下小盒子上的按钮,等上几秒钟让操作系统重新初始化设备,然后一天重复几十次。
开发者 hrvach 遇到了同样的困扰,于是决定自己动手做硬件。这个项目叫 DeskHop,是一个开源设备,能在两台电脑之间即时切换键盘和鼠标。你可以通过热键切换,也可以像使用连接两台 PC 的单显示器一样,直接把鼠标光标拖过屏幕边缘即可。

工作原理
电路围绕两块基于 RP2040 芯片的标准 Raspberry Pi Pico 开发板构建。每块板子通过 USB 连接到各自的电脑。两块微控制器通过光耦隔离芯片(TI ISO7721DR 或 ADuM1)进行 UART 通信。
这里的电源隔离是真正的隔离:两台 PC 的地线和电源线完全相互独立。如果一台电脑烧毁或产生电涌,另一台会安然无恙。
主机端的 USB 魔法来自 Pico-PIO-USB 库。RP2040 芯片中的可编程 I/O(PIO)将普通 GPIO 引脚转换为完整的 USB 端口。一块 Pico 板作为 USB 主机,连接你的键盘和鼠标,而两块板都模拟所连接电脑的标准 HID 设备。
无缝屏幕切换
DeskHop 最棒的功能是无缝桌面模拟。当你的鼠标光标移动到第一台电脑显示器的右边缘时,DeskHop 会立即将信号路由切换到第二台电脑,光标会以相同高度出现在第二台屏幕的左边缘。

键盘会自动跟随鼠标。你在 Linux 上写代码,把鼠标移到 Mac 屏幕,下一次按键就会发送到 macOS。

为了追踪光标位置,DeskHop 将 HID 鼠标描述符切换为绝对坐标模式。设备内部对相对移动进行累加,计算出屏幕上的精确位置。
如果用鼠标切换不方便,Left Ctrl + Caps Lock 热键始终可用。
实用附加功能和运行模式
作者在固件中添加了多种专用模式,以解决双系统使用中的常见痛点:
- 鼠标减速模式(
Right Ctrl + Right Alt)。 按下组合键后,鼠标灵敏度会急剧下降。在图形编辑器中需要精确选取单个像素,或在视频中精确移动滑块时非常有用。 - 游戏模式(
Left Ctrl + Right Shift + G)。 绝对鼠标坐标会破坏许多 3D 游戏和虚拟机中的控制。在游戏模式下,DeskHop 会禁用自动屏幕切换,恢复为标准的相对定位模式。 - 切换锁定(
Right Ctrl + K)。 将控制锁定在当前电脑,防止在视频通话时不小心挥手导致光标飞到第二台显示器。 - 屏幕保护模式(
Left Ctrl + Right Shift + S)。 光标开始在屏幕上随机跳动,像 Pong 游戏中的球一样,防止电脑进入休眠。
硬件与 DIY 组装
项目从一开始的设计理念就是让任何人都能在餐桌上完成搭建。双层 PCB 使用的元器件数量很少。

组装元器件清单(PCB v1.1):
| 组件 | 数量 | 预估价格 | | --- | --- | --- | | Raspberry Pi Pico | 2 个 | ~8.20 € | | 板载 USB-A 接口 | 2 个 | ~0.40 € | | TI ISO7721DR 隔离器 | 1 个 | ~1.40 € | | 电容和电阻(0805) | 8 个 | ~0.44 € | | TPD4E1U06DBVR ESD 保护芯片 | 2 个 | ~0.62 € |
元器件总成本约为 11-12 欧元。外壳用 3D 打印机打印几个小时即可,电路板无需一颗螺丝即可安装到位。

对于不想自己焊接的人,仓库中提供了 gerber 文件。你可以从 Elecrow 订购已焊接好的电路板或套件。
固件与配置
你可以使用 CMake 或 Docker 从源码构建项目:
如果从源码构建觉得太麻烦,发布区有一个现成的 firmware.uf2 文件。要刷入固件,只需按住 Left Ctrl + Right Shift + C + O。DeskHop 会重启并伪装成一个名为 "DESKHOP" 的虚拟驱动器,你只需把 .uf2 文件拖进去即可。
提供了一个热键组合 Right Shift + F12 + Y 用于校准不同尺寸显示器之间的切换高度。

配置设计注重安全性。没有 Web 服务器或云服务。当你进入设置模式时,虚拟驱动器上会出现一个 config.htm 文件。你可以在 Chrome 或 Yandex Browser 中本地打开它,通过 WebHID 在浏览器中直接编辑参数。



作者专门用一节讨论了安全问题:
- 系统之间没有共享剪贴板或文件传输。
- 没有网络接口、Wi-Fi 或蓝牙。
- 电脑无法强制更新设备固件,必须按下键盘上的物理按钮。
局限性与注意事项
项目做得很好,但没有什么是完美的。在开始动手之前,有几点需要了解:
- 多显示器设置。 从 Windows 10 更新 KB50036 开始,绝对 HID 坐标行为在多显示器上出现问题。光标可能会卡在第一个屏幕上。固件中有实验性解决方案,但问题仍在解决中。
- 复杂外设。 带屏幕的键盘、宏键盘以及有 20 个额外按键的鼠标可能无法正常工作。简单的办公键盘和没有特殊编码器的机械键盘都能正常工作。
- 电源。 两台电脑必须为各自的 USB 端口供电。如果一台 PC 完全断电,没有外部 hub 设备将无法启动。

鼠标轮询率达到 1000 Hz,移动时完全感受不到延迟。
值得做吗?
DeskHop 是一个很棒的周末 DIY 项目。如果你同时在两个工作站上工作,受够了软件 KVM 的延迟或点击廉价国产切换器的按钮,这个小盒子第一天就能回本。C 源代码和 PCB 原理图完全开源,采用 GPL-3.0 许可证。
相关项目
