>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
C

如何用两块 Raspberry Pi Pico 开发板打造仅需 11 欧元的硬件 KVM 切换器

桌上摆着两台电脑,却只有一套键盘鼠标?通常有两种解决方案。第一种是基于软件的(比如 Barrier 或 Input Leap),但随之而来的麻烦让人头疼:网络掉线、企业 VPN 屏蔽本地流量,或者工作电脑不允许安装第三方软件。第二种方案是从 AliExpress 买个廉价的 USB 切换器。按一下小盒子上的按钮,等上几秒钟让操作系统重新初始化设备,然后一天重复几十次。

开发者 hrvach 遇到了同样的困扰,于是决定自己动手做硬件。这个项目叫 DeskHop,是一个开源设备,能在两台电脑之间即时切换键盘和鼠标。你可以通过热键切换,也可以像使用连接两台 PC 的单显示器一样,直接把鼠标光标拖过屏幕边缘即可。

DeskHop case and board

工作原理

电路围绕两块基于 RP2040 芯片的标准 Raspberry Pi Pico 开发板构建。每块板子通过 USB 连接到各自的电脑。两块微控制器通过光耦隔离芯片(TI ISO7721DR 或 ADuM1)进行 UART 通信。

Open Source Hardware Logo

这里的电源隔离是真正的隔离:两台 PC 的地线和电源线完全相互独立。如果一台电脑烧毁或产生电涌,另一台会安然无恙。

主机端的 USB 魔法来自 Pico-PIO-USB 库。RP2040 芯片中的可编程 I/O(PIO)将普通 GPIO 引脚转换为完整的 USB 端口。一块 Pico 板作为 USB 主机,连接你的键盘和鼠标,而两块板都模拟所连接电脑的标准 HID 设备。

无缝屏幕切换

DeskHop 最棒的功能是无缝桌面模拟。当你的鼠标光标移动到第一台电脑显示器的右边缘时,DeskHop 会立即将信号路由切换到第二台电脑,光标会以相同高度出现在第二台屏幕的左边缘。

DeskHop Mouse Demo

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

DeskHop Typing Demo

为了追踪光标位置,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 Image

组装元器件清单(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 打印机打印几个小时即可,电路板无需一颗螺丝即可安装到位。

DeskHop with 3D Printed Case

对于不想自己焊接的人,仓库中提供了 gerber 文件。你可以从 Elecrow 订购已焊接好的电路板或套件。

PCB Assembly Guide

固件与配置

你可以使用 CMake 或 Docker 从源码构建项目:

如果从源码构建觉得太麻烦,发布区有一个现成的 firmware.uf2 文件。要刷入固件,只需按住 Left Ctrl + Right Shift + C + O。DeskHop 会重启并伪装成一个名为 "DESKHOP" 的虚拟驱动器,你只需把 .uf2 文件拖进去即可。

提供了一个热键组合 Right Shift + F12 + Y 用于校准不同尺寸显示器之间的切换高度。

Border height difference

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

Multiple screens per output

Web Browser with URL

Web Config

作者专门用一节讨论了安全问题:

  • 系统之间没有共享剪贴板或文件传输。
  • 没有网络接口、Wi-Fi 或蓝牙。
  • 电脑无法强制更新设备固件,必须按下键盘上的物理按钮。

局限性与注意事项

项目做得很好,但没有什么是完美的。在开始动手之前,有几点需要了解:

  1. 多显示器设置。 从 Windows 10 更新 KB50036 开始,绝对 HID 坐标行为在多显示器上出现问题。光标可能会卡在第一个屏幕上。固件中有实验性解决方案,但问题仍在解决中。
  2. 复杂外设。 带屏幕的键盘、宏键盘以及有 20 个额外按键的鼠标可能无法正常工作。简单的办公键盘和没有特殊编码器的机械键盘都能正常工作。
  3. 电源。 两台电脑必须为各自的 USB 端口供电。如果一台 PC 完全断电,没有外部 hub 设备将无法启动。

Mouse polling rate

鼠标轮询率达到 1000 Hz,移动时完全感受不到延迟。

值得做吗?

DeskHop 是一个很棒的周末 DIY 项目。如果你同时在两个工作站上工作,受够了软件 KVM 的延迟或点击廉价国产切换器的按钮,这个小盒子第一天就能回本。C 源代码和 PCB 原理图完全开源,采用 GPL-3.0 许可证。

相关项目