hrvach/deskhop

GitHub: hrvach/deskhop

DeskHop 是一款低成本开源硬件 KVM 切换器,通过鼠标跨屏拖动和键盘快捷键实现两台电脑间近乎零延迟的键鼠无缝切换。

Stars: 7822 | Forks: 284

# DeskHop - 快速桌面切换 你是否曾注意到,在疯狂的科技世界里,总有那么一个古怪的小项目试图解决一个非常冷门的问题,以至于它的竞争对手可能只有左撇子螺丝刀和会自动隐藏的闹钟? 我在日常工作中使用两台不同的电脑,并在它们之间共享一套键盘/鼠标。尝试了几款在 Amazon 上找到的 USB 切换器后,我发现它们都有类似的问题——切换需要花点时间,找按钮的过程相当笨拙,而且坦白说,这种情况一直没有改善。 我只想要一种能使用键盘快捷键快速切换输出的方法,并配以在显示器之间神奇地移动鼠标指针来实现相同操作的能力。这个项目让你能够同时实现这两点,即使你的电脑运行的是不同的操作系统! ![DeskHop 外壳和电路板](https://static.pigsec.cn/wp-content/uploads/repos/cas/7e/7ee393b7e34631a50db2714c0576d0b84485b780b70f3c391e4cf87549d50578.png) ## 功能 - 完全**[免费且开源](https://certification.oshwa.org/de000149.html)** - 切换时没有明显的延迟 - 只需在电脑之间拖动鼠标指针 - 无需安装软件 - 价格实惠且容易获取的组件(<15€) - 3D 打印的卡扣式外壳 - 输出端口之间完全的电气隔离 - 兼容 Linux、macOS 和 Windows 现已提供[用户手册](misc/user-manual.pdf) ![开源硬件标志](https://static.pigsec.cn/wp-content/uploads/repos/cas/27/278afa5b756d35f2f1b2450b093b7c0e13fe5e091a4b11bc25e4ab7bdcbcc48f.svg) ## 工作原理 该设备充当键盘/鼠标与电脑之间的中介,同时与两台电脑建立并保持连接。然后根据你的选择,决定将鼠标和按键转发到哪里。键盘跟随鼠标,反之亦然,因此只需将鼠标拖到另一个桌面即可同时切换两者。 ## 鼠标 为了让鼠标光标能够神奇地跳跃,鼠标的 HID 报告描述符被修改为使用绝对坐标,然后鼠标的报告(仍然以相对移动的形式输入)在内部进行累加,从而保持对位置的精确记录。 当你试图朝另一台显示器的方向离开当前显示器区域时,它会保持 Y 坐标不变,并将最大的 X 值替换为最小的 X 值,然后翻转输出。这确保了光标能在另一台显示器上以相同的高度无缝出现,增强了平滑过渡的体验感。 ![DeskHop 鼠标演示](https://static.pigsec.cn/wp-content/uploads/repos/cas/e4/e4d525d349f3cc35732dfe7fe2aadc3de9cd307d920da7a7a01cdc75c5ae154e.gif)

从 Mac 拖动鼠标到 Linux 会自动切换输出。

实际的切换正好发生在其中一个箭头停止移动,而另一个箭头开始移动的那一刻。 ## 键盘 它充当 USB Host 并定期查询你的键盘,在 HID 报告中寻找预设的热键(对我来说通常是 Ctrl + Caps Lock)。找到后,它会将所有后续的字符转发到另一个输出端口。 为了能直观地指示你当前正在使用哪个输出端口,你可以重新利用键盘的 LED 灯,让它们提供必要的反馈。 它还会记住每台电脑的 LED 状态,因此你可以完全从上次离开的状态继续。 ![DeskHop 打字演示](https://static.pigsec.cn/wp-content/uploads/repos/cas/4f/4f2aa1116e01ec00e7d6b562eea50e420cf527f225e7b1b2c277e4117a43aad0.gif) ## 构建说明 为了避免构建时出现版本不匹配和报告的路径问题,以及免去你下载大型 SDK 的麻烦,本项目现在内置了最小化的 pico sdk 和 tinyusb。 在 Debian/Ubuntu 系统上,请确保安装了以下内容: ``` apt update apt install \ build-essential \ cmake \ gcc-arm-none-eabi \ libnewlib-arm-none-eabi \ python3 ``` 你应该可以通过运行以下命令来构建: ``` cmake -S . -B build cmake --build build ``` 此外,要重新构建 Web UI,请检查 webconfig/ 目录并执行 ```./render.py```,你需要安装 jinja2。 另一种替代方法是使用 docker,通过 'docker compose' 或 'docker-compose': ``` docker-compose -f misc/docker.yml run --rm build_container ``` 这确保了构建的可重复性。 要重新构建磁盘,请检查 disk/ 文件夹并运行 ```./create.sh```,如有需要可根据你的系统进行调整。你需要 **dosfstools**(用于提供 mkdosfs), ## 使用预编译镜像 或者,你可以使用[预编译镜像](https://github.com/hrvach/deskhop/releases)。从 0.6 版本开始,只有一个通用的镜像。你需要 .uf2 文件,只需通过以下方式之一将其复制到设备中即可: ## 固件升级 **选项 1** - (适用于固件 0.6 及更高版本)同时按下 **left ctrl + right shift + c + o**,将设备置于“配置模式”。你的键盘所连接的设备将重启,并变成一个名为 "DESKHOP" 的 U 盘。你需要做的就是将 .uf2 文件复制到其中。一旦镜像验证通过,设备将进行刷写并重启,然后继续升级另一块板子。在此操作期间,LED 灯会闪烁。完成后,它会写入 flash 并重启,从而完成操作。 _注意_ - 这不是一个普通的通用 U 盘,你不能用它来复制文件。 **选项 2** - 使用 ROM bootloader - 在连接每个 Pico 时按住板载按钮,然后将 uf2 文件复制到出现的 U 盘中。0.6 之后的镜像支持直接按住按钮而无需折腾电源,但“插入时按住按钮”的方法应该始终有效,无论设备处于什么状态。 **选项 3** - CDC Flash 指令(仅限 Debug 版本) - 如果固件在编译时启用了 `DH_DEBUG_CDC_FLASH=ON`,你可以通过 CDC 串口指令触发 bootloader 模式: ``` echo -n 'flash' > /dev/tty.usbmodem11104 ``` 这会立即将设备重置为 bootloader 模式,此时它会显示为 "RPI-RP2" 驱动器。此功能专为开发工作流而设计。 ## 其他功能 ### 鼠标减速 有没有试过想把那个 YT 视频的进度条拖到一个特定的位置,但是你的鼠标跳得太厉害,以至于你突然变得像 5 岁小孩玩“手术”游戏一样,动作变得超级小心翼翼? **按下右 CTRL + 右 ALT** 即可切换慢速鼠标模式。鼠标指针会大幅减速,让你能够完成更精细的操作;再次快速按下相同的按键,即可让鼠标恢复正常移动。 ### 切换锁定 如果你想将自己锁定在一个屏幕上,请使用 ```RIGHT CTRL + K```。 这将确保你不会意外离开当前屏幕。若要关闭,请再次按下相同的组合键。 ### 锁定双屏 你可以使用 ```RIGHT CTRL + L``` 同时锁定两台电脑。 要使用此功能,请先在配置中为每个输出端口设置相应的 OS(因为它们的快捷键不同)。 ### 游戏模式 如果你在玩游戏,绝对鼠标模式可能会导致游戏无法正常运行。为了解决这个问题,引入了**游戏模式**,可以通过 ```LEFT CTRL + RIGHT SHIFT + G``` 进行切换。在游戏模式下,你将被锁定在当前屏幕,并且你的鼠标将表现为标准的相对鼠标。这应该也能解决各种虚拟机问题、目前不支持的操作系统等问题。 ### 屏幕保护程序 据说内置此功能是为了防止电脑进入待机状态,但说实话——它只是看起来很有趣。**默认关闭**,它会让你的鼠标指针像 Pong 游戏里的球一样在屏幕上弹来弹去。启用后,它会在用户配置头文件中定义的一段不活动时间后激活,并在你向该屏幕发送任何输出时自动关闭。 潜在的使用示例——我有一个有 Bug 的 USB 扩展坞,从待机状态恢复视频时会出现问题,因此不让它进入睡眠状态是一个很方便的权宜之计。 ## 硬件 [该电路](schematics/DeskHop_v1.1.pdf) 基于两块 Raspberry Pi Pico 板,选择它们是因为它们便宜(4.10 € / 块),可以手工焊接,而且大多数供应商都有现货。 Pico 之间通过 UART 连接,并由 Analog Devices ADuM1201 双通道数字隔离器(约 3€)或更便宜、更快且引脚兼容的 TI ISO7721DR(约 1.5€)隔开,后者是首选。 虽然它们通常不支持双 USB,但多亏了一个[令人惊叹的项目](https://github.com/sekigon-gonnoc/Pico-PIO-USB)——该项目利用了 RP2040 中可编程 IO 的魔法实现了 USB——它得以同时充当 USB Host 和设备。 ## PCB [已更新] 为了使 DIY 构建尽可能简单,走线被保留在一面,并且零件数量保持在最低限度。 ![PCB 图片](https://static.pigsec.cn/wp-content/uploads/repos/cas/9b/9b8ead4916eaabc49a6f423f43dcd04a3fef60692222aafe838ff77c6f322b22.png) USB D+/D- 差分线的长度本应完全相同,但刻意做得稍微不对称,以抵消 PICO PCB 本身上相应 GPIO 走线的长度差异,因此总长度应该是匹配的。 Zd(差分阻抗)的目标是 90 欧姆(设法达到了约 107 欧姆,足够接近了 :))。 厚度设计为 1.6 毫米,以使卡扣能按预期工作。 PCB 有 2 个版本(对用户来说没有重大差异)。原版(v1.0)更容易焊接和组装,而 v1.1 提供了一些升级,例如: - 增加了 ESD 保护(TPD4E1U06DBVR) - 增加了用于键盘/鼠标连接器的 VBUS 电容 - 丝印方向标记 - 为预焊接排针的克隆板预留了孔位,方便对齐 - USB 27 欧姆电阻 由于微小的瞬态电压抑制器 IC 和 0805 电阻,这个版本手工焊接起来稍微困难一些,但完全是可行的。理论上可以省略 TVS(不建议这么做),它仍然可以工作。 即将推出——带有裸露 rp2040 芯片的电路板,不需要 Pico,体积更小,更方便。 ## 外壳 因为我不太擅长 3D 建模,所以外壳[简单而基础](case/),但能发挥作用。它应该很容易打印,使用约 33g 耗材,耗时几个小时。 水平方向的 PCB 移动通过穿过孔位的定位销来限制,垂直方向的移动则通过两侧的卡扣来限制——无需螺丝。外壳经过了轻微的重新设计,加上了 Logo 和两个额外的卡扣,因此提供了更好的密封性。 两块板子上的 Micro USB 接口与外壳侧面有一段距离,因此稍微大一点的孔应该就能让线缆伸进去。 顶盖采用卡扣式设计,带有用于打开的螺丝刀槽。顶部的标记是凹下去的,可以用蜡笔等工具进行上色以获得更好的对比度(或者直接保持原样)。 ![带有 3D 打印外壳的 DeskHop](https://static.pigsec.cn/wp-content/uploads/repos/cas/c4/c4198137a0c03bebf4e4867a9ef3f58f677116e6315324442757fa91973cc523.gif) ## 物料清单
点击此处查看原版 PCB v1.0 的 BOM | 组件 | 数量 | 单价 / € | 总价 / € | |--------------------|-----|----------------|----------| | Raspberry Pi Pico | 2 | 4.10 | 8.20 | | ADuM1201BRZ | 1 | 2.59 | 2.59 | | Cap 1206 SMD 100nF | 2 | 0.09 | 0.18 | | USB-A PCB conn. | 2 | 0.20 | 0.40 | | Headers 2.54 1x03 | 2 | 0.08 | 0.16 | | | | | | | | | Total | 11.53 | 可以使用 TI ISO7721DR 代替 ADuM——它的引脚兼容,价格便宜得多,且规格更好。
### PCB v1.1 | 组件 | 零件 | 数量 | 单价 / € | 总价 / €| |----------------|---------------------|-----|----------------|----------| | U1, U2 | Raspberry Pi Pico | 2 | 4.10 | 8.20 | | J1, J4 | USB-A PCB conn. | 2 | 0.20 | 0.40 | | U4 | TI ISO7721DR | 1 | 1.40 | 1.40 | | | (**或** ADuM1201BRZ)| | | | | C1, C2 | Cap 0805 SMD 100nF | 2 | 0.09 | 0.18 | | R1, R2, R3, R4 | Res 0805 SMD 27ohm | 4 | 0.03 | 0.12 | | U3, U5 | TPD4E1U06DBVR | 2 | 0.31 | 0.62 | | C3, C4 | Cap 4.7uF SMD 0805 | 2 | 0.07 | 0.14 | | J2, J3 | Headers 2.54 1x03 | 2 | 0.08 | 0.16 | | | | | | | | | | | Total | 11.22 | USB-A 连接器可以是 Molex MX-67643-0910,或者是尺寸相同、更便宜/经济的替代品。 额外步骤: - 制作 PCB([已提供 Gerber](pcb/),请选择 1. 毫米厚度) - 3D 打印外壳([已提供 stl 文件](case/),约 33g 耗材) ## 组装指南 如果你有电子方面的经验,你不需要看这个。然而,你们中的一些人可能没有,在这种情况下,这个视频可能会指导你完成整个过程。请注意,焊接后你应该清洗 PCB 上的助焊剂,以防止腐蚀。 执行此操作的标准流程是使用异丙醇和一把旧牙刷。但你猜怎么着?我不会把我的旧牙刷放到网上,所以这部分你就只能自己即兴发挥了 :) [![PCB 组装指南](https://static.pigsec.cn/wp-content/uploads/repos/cas/0c/0c4ff2e516e1f6c31837afeb091af555c53ef8eea6535dbbefef3868a96afee1.jpg)](https://www.youtube.com/watch?v=LxI9NYi_oOU) [注意] 视频组装指南涵盖的是 pcb v1.0。修改后的版本非常相似,操作流程基本一致。 ## 使用指南 ### 键盘快捷键 - (固件版本 0.68+) _配置_: - ~~```Left Shift```~~ ```Left Ctrl + Right Shift + C + O``` - 进入配置模式 - ```Right Shift + F12 + D``` - 删除 flash 配置 - ```Right Shift + F12 + Y``` - 保存屏幕切换偏移量 _使用_: - ```Right CTRL + Right ALT``` - 切换慢速鼠标模式 - ```Right CTRL + K``` - 锁定/解锁鼠标桌面切换 - ```Right CTRL + L``` - 同时锁定两个输出(需提前设置输出 OS,见下文快捷键) - ~~```Left Shift```~~ ```Left CTRL + Right Shift + G``` - 切换游戏模式(锁定屏幕,作为标准鼠标运行) - ```Left CTRL + Right Shift + S``` - 启用屏幕保护程序 - ```Left CTRL + Right Shift + X``` - 禁用屏幕保护程序 - ```Left CTRL + Caps Lock``` - 在输出之间切换 注意:有些键盘不能正确地同时发送两个 Shift 键的信号,这就是为什么更改快捷键的原因——为了让所有人都能使用。对造成的混乱深表歉意。 ### 切换光标高度校准 此步骤不是必需的,但如果你的屏幕没有完美对齐或大小不同,它可能会很方便。这样做的目的是让鼠标指针在完全相同的高度出现。 ![边框高度差异](https://static.pigsec.cn/wp-content/uploads/repos/cas/45/45589fc44102058264238079515a894f237a49bd3676d895368c4efb50fe1854.png) 只需将你的鼠标停放在较大屏幕上,处于较小/较低屏幕的高度处(如图所示),然后按下 ```Right Shift + F12 + Y```。你的 LED(和大写锁定灯)应闪烁以示确认。 对底部边框重复此操作(如果它位于较大屏幕的边框上方)。这将被保存到 flash 中,从现在起它将保留此校准值。 ### 每个输出端口的多个屏幕 Windows 和 Mac 在处理多个屏幕和绝对定位时存在问题,因此需要权宜之计(目前仍处于实验阶段)。目前正在开发一种更好的解决方法,但目前你必须为每个输出端口设置操作系统和屏幕数量。 你的主屏幕需要位于中间,而辅助屏幕位于边缘。要配置实际选项,请打开设备的 Web 配置页面。 ![每个输出端口的多个屏幕](https://static.pigsec.cn/wp-content/uploads/repos/cas/ae/ae555ac23ad5857be7c8ca9f0cd4ed2b9e14f3a955576610dcaaa0ca80943364.png) ### Web 配置模式 从固件 0.6 开始,引入了改进的配置模式。要配置你的设备,请按照以下说明操作: 1. 按下 Left Ctrl + Right Shift + C + O - 你的设备将重启并进入配置模式(在你插入键盘的那一侧)。在配置会话期间,LED 将持续闪烁。 2. 将出现一个名为 "DESKHOP" 的新 U 盘,里面有一个文件 config.htm 3. 使用 Chromium / Chrome 打开该文件。遗憾的是,目前不支持 FF,因为他们不愿实现 WebHID。 4. 点击连接并允许 deskhop 设备进行配对。 ![带有 URL 的 Web 浏览器](https://static.pigsec.cn/wp-content/uploads/repos/cas/b0/b09ba3768297c5d52b5e7b2ee2b07c68aa6953ab42020e1e34fa748be5440fc2.png) 5. 根据你的意愿配置选项,然后点击保存将其写入设备。 6. 点击菜单中的“exit”退出配置模式,以增加安全性。 ![Web 配置](https://static.pigsec.cn/wp-content/uploads/repos/cas/2e/2eb3a3295a4e02a908239828866cb3212aa3c325fdaecdaf85809adbd6d837c8.png)
Linux 无法识别设备?点击这里。 **问**:Linux 上的 Chromium 无法使用。 **答**:你可能需要调整 /dev 权限,或者创建相应的 udev 规则文件,并确保你的用户在正确的组中,如下所示: /etc/udev/rules.d/99-deskhop.rules ``` KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c000", GROUP="plugdev", MODE="0660" ```

**问**:为什么不干脆像 Via 那样创建一个好用的在线网页,而要搞这种奇怪的 U 盘玩意? **答**:从随机的在线位置加载与你的输入设备交互的 JavaScript 会带来潜在的安全风险。配置网页仅限本地使用,绝对不会从外部加载任何内容。 请注意,配置网页并不因为刻意的代码混淆而显得“奇怪”——它是由于存储空间非常有限而进行自解压的。整个源代码 100% 开放,是这个仓库的一部分。我们鼓励你自己重新构建一切。 ### 功能验证 当你连接一个新的 USB 外设时,电路板会使 LED 闪烁两次,并指示另一块电路板也这样做。这样你就可以测试每块板的 USB 和对外通信是否正常。 进行此测试的方法是先将键盘插在一侧,然后再插在另一侧。如果一切正常,在两种情况下 LED 都会快速地来回闪烁。 ## 安全与保障 有些功能是故意缺失的,尽管它们会使设备更易于使用或配置更简单。以下是这些决定的简要说明: - 系统之间没有复制粘贴或_任何_信息共享。这可以防止信息泄露。 - 没有用户的明确同意,就无法进行 WebHID 设备管理。输出电脑没有任何入站连接,唯一的例外是标准的键盘 LED 开/关消息,且被严格限制为 1 字节的数据。 - 无法从输出端触发固件升级。只有用户通过特殊的键盘快捷键进行的明确且刻意的操作才能执行此操作。 - 不会暴露已插入键盘/鼠标的自定义 endpoint,也不会向这些设备转发信息。它们潜在的漏洞实际上被阻挡在了电脑之外。 - 不允许保留任何输入历史记录。 - 无论出于何种原因,都不会有由设备发起的按键操作。输出的唯一内容就是你输入/触发的指令。 - 输出端在物理上是分开的,并且实现了电气隔离,最小隔离电压为 2kV。 - 设备之间交换的所有数据包都是固定长度的,传输的配置选项被限制在一个简短的列表内。大多数选项是只读的。跨设备的固件升级可以被禁用。 - 没有 bluetooth 或 wifi,没有网络,没有 Internet 访问等。 - 在任何情况下,任何连接的电脑都不会被视为受信任的。 - 配置模式在一段时间的非活动状态后会自动禁用。 - 全部代码都是开源的,没有任何二进制斑块,并且进行了详尽的注释以解释其目的。我鼓励你永远不要信任任何人,并始终通过手动审查来确保你知道自己正在运行的是什么。 这仍然不能保证任何事,但我相信它制定了一套合理的基本规则,可以保护你的安全。 ## 常见问题解答 1. 我只有两个 Pico,可以不用 PCB 和隔离器吗? _当然可以。建议使用隔离器,但没有它应该也能工作。_ 2. 如果我的显示器有两个不同的分辨率会怎样? _鼠标移动是在抽象坐标空间中完成的,你的电脑会计算这与物理屏幕的对应关系,所以应该可以直接使用。_ 3. 我可以在哪里购买? _我不卖任何东西,这只是一个个人的、非商业性的爱好项目。_ _**更新 1**:看来你可以在 [Elecrow 通过此链接](https://www.elecrow.com/deskhop-fast-desktop-switching.html) 订购 1 件(无论是 PCB、组装好的 PCB 还是完全组装好的设备)_ _据用户反馈,你的**电路板送达时将是空白的**,你必须自己写入固件。_ _**更新 2**:我从未向 Elecrow 索取过任何东西,但几天前他们提出用一小笔预算赞助该项目,这将用于未来的电路板打样。由于我的目标是创建一个具有 2 个以上输出端口的更好电路板等,我相信打样服务可能对该项目有所脾益。_ 4. 当通过鼠标更改活动屏幕时,键盘会跟随吗(反之亦然)? _是的,这样做的目的是让它表现得像一台单独的电脑一样。_ 5. 这适用于键盘/鼠标组合接收器吗,比如罗技的优联接收器? _它应该可以工作。在最近的一次固件更新后,对组合接收器的支持应该要好得多。_ 6. 这适用于带有独立无线接收器的无线鼠标和键盘吗(一个用于鼠标,另一个用于键盘)? _它应该可以工作——我试过带有独立接收器的安克无线鼠标,工作得非常好。_ 7. 我在构建或编译时遇到问题 _请查看[故障排除 Wiki](https://github.com/hrvach/deskhop/wiki/Troubleshooting),里面可能有一些答案。_ ## 软件替代方案 如果在你的特定情况下可行,你可以使用多种软件替代方案。 1. [Barrier](https://github.com/debauchee/barrier) - 免费,开源 2. [Input Leap](https://github.com/input-leap/input-leap) - 免费,开源 3. [Synergy](https://symless.com/synergy) - 商业软件 4. [Mouse Without Borders](https://www.microsoft.com/en-us/garage/wall-of-fame/mouse-without-borders/) - 免费,仅限 Windows 5. [Universal Control](https://support.apple.com/en-my/HT212757) - 免费,Apple 产品 ## 缺点 - Windows 10 在更新 KB5003637 中破坏了 HID 绝对坐标的行为,因此你无法在 Windows 上使用多个屏幕(鼠标将停留在主屏幕上)。目前有一个实验性的解决方法,并且正在开发更好的方案。 - 代码需要清理、进行一些重构等。 - 未经过各种设备的广泛测试,我不知道它如何与你的硬件协同工作。很有可能无法做到开箱即用。 - 高级键盘(带有旋钮、额外按钮或滑块)可能会遇到这些额外硬件无法使用的问题。 - 带有 300 个按钮的超现代鼠标,可能会出现某些按钮无法按预期工作的情况。 - 注意:**需要连接两台电脑并为 USB 供电才能使其工作**(因为每块板子由其插入的电脑供电)。如今,许多台式机和笔记本电脑即使在关机时也会提供电力。如果你需要在完全断开一块板子的情况下运行,你应该能够使用 USB 集线器将键盘和鼠标插入单个端口。 - MacOS 在处理多个屏幕时存在问题,最新的固件提供了一个实验性的权宜之计来修复此问题。 ## 进展 那么,大家的热情是怎么回事?我简直不敢相信——请允许我感谢大家!我从未想过这个简单的个人项目会引起这样的关注,因此最初的功能非常基础(就像我的厨艺一样),并且主要涵盖了我自己的使用场景。请继续关注固件更新,它将带来更广泛的设备兼容性、更多的功能和更少的 Bug。由于这是一个爱好项目,感谢你对时间限制的理解,我承诺会尽我所能。 计划中的功能: - 针对多屏幕 Windows 和 MacOS 的更好解决方案 - 透明/游戏模式 - 支持超过 2 个输出端口 - 配置 UI 的改进 - ……以及更多! 正在开发一个 _lite_ 版本,它仅提供单个 Pico W 板即可实现基本功能,从而进一步降低成本,让你无需添加额外的硬件或 PCB 即可试用。 鼠标轮询现在应该可以以 1000 Hz 的频率工作(图表中的下降是因为我的手臂由于大量的运动而感到疼痛 :-)): ![鼠标轮询率](https://static.pigsec.cn/wp-content/uploads/repos/cas/7f/7fb2f843694daced4dc934f5536ed7a07c842998bc26cf1f5d60a32d7b982ca5.png) ## 赞助/捐赠 我这样做不是为了利润或任何其他目的,只是想通过为每个人创造更好的工作环境来帮助人们。 如果你想进一步支持这个项目,请考虑向像**无国界医生**这样的慈善机构进行小额捐赠。 [![通过 PayPal 向无国界医生捐款](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://donate.doctorswithoutborders.org/secure/donate) 请允许我感谢所有提供帮助或正在考虑提供帮助的人! ## 免责声明 我恳请任何尝试构建此项目的人理解并承认,我对任何伤害、损坏或其他后果不承担任何责任。你的安全很重要,我鼓励你谨慎对待这个项目,采取必要的预防措施,并在整个过程中对自己的健康和安全承担个人责任。请不要触电、烧伤、感到压力或愤怒。祝你玩得开心,享受其中! 祝你切换愉快!
标签:Bash脚本, USB, 外设切换, 客户端加密, 嵌入式, 桌面效率, 硬件, 请求拦截, 逆向工具, 键鼠共享