deskhop – 快速桌面开关
您是否曾经注意到,在疯狂的技术世界中,总是有一个古怪的小项目试图解决问题,以至于唯一的竞争对手可能是左手螺丝刀和一个自隐藏的闹钟?
我在日常工作流程中使用两台不同的计算机,并在它们之间共享一个键盘/鼠标对。尝试在亚马逊上找到的几个USB切换盒,使我意识到它们都遇到了类似的问题 – 需要一段时间才能切换,在尝试找到该按钮时,该过程非常笨拙,坦率地说,随着时间的流逝,它不会变得更好。
我想要的是一种使用键盘快捷键来快速切换输出的方法,并通过神奇地将鼠标指针移动在显示器之间的功能,从而可以使用相同的功能。即使您的计算机运行了不同的操作系统,该项目也可以同时完成这两者!
特征
- 完全免费和开源
- 切换时没有明显的延迟
- 只需在计算机之间拖动鼠标指针
- 没有安装软件
- 负担得起且可获得的组件(<15欧元)
- 3D可打印的快照案例
- 您的输出之间的完全电隔离
- 使用Linux,MacOS和Windows
用户手册现在可用
它如何工作
该设备充当键盘/鼠标和计算机之间的中介,同时建立和维护两台计算机的连接。然后,它根据您的选择,选择将鼠标转发的位置和击键。键盘遵循鼠标,反之亦然,因此只需将鼠标拖到另一个桌面上,这两个都会切换。
老鼠
为了使鼠标光标神奇地越过,更改了鼠标HID报告描述符以使用绝对坐标,然后鼠标报告(仍然以相对运动为中)积累了内部,将精确的计数保持在位置上。
当您尝试以其他监视器的方向离开监视器区域时,它可以保持Y坐标并将最大X交换为最小X,然后翻转输出。这样可以确保光标无缝地出现在另一个监视器上的相同高度上,从而增强了光滑过渡的感知。
将鼠标从Mac拖到Linux自动切换输出。
实际开关发生在一个箭头停止移动而另一个箭头开始的那一刻。
键盘
它充当USB主机并定期查询您的键盘,它在HID报告中寻找预先配置的热键(通常为我ctrl + Caps锁定)。当发现时,它将将所有后续字符转发到另一个输出。
要具有视觉指示,您可以在任何给定时刻使用哪种输出,您可以重新使用键盘LED,并让它们提供必要的反馈。
它还记得每台计算机的LED状态,因此您可以准确地拿出留下的状态。
如何构建
为了避免版本不匹配和报告时报告的路径问题,并避免您不必下载大型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 Compose”或“ Docker-Compose”使用Docker:
docker-compose -f misc/docker.yml run --rm build_container
这样可以确保可再现的构建。
要重建磁盘,请检查磁盘/文件夹并运行./create.sh ,请在需要时调整系统。您需要DOSFSTOOLS (提供MKDOSFS),
使用预先构建的图像
另外,您可以使用预构建的图像。由于版本为0.6,只有一个通用图像。您需要以以下方式之一将.UF2文件复制到设备:
升级固件
选项1- (固件0.6及以后)通过同时按左CTRL +右移 + C + O ,将设备放在“配置模式”中。您的键盘被插入将重新启动并变成称为“ deskhop ”的USB驱动器。您需要做的就是将.UF2文件复制到它。验证图像后,设备将闪烁并重新启动,然后继续升级另一个板。在此操作中,LED会闪烁。完成后,它将写入Flash和Reboot,完成操作。
注意– 这不是实际的通用USB驱动器,您无法使用它将文件复制到它。
选项2-使用ROM启动程序 – 连接每个PICO时,请按下板上按钮,然后将UF2复制到出现的闪存驱动器。图像较晚的0.6支撑持续按钮而无需在电源供电周围固定按钮,但是无论设备状态如何,“插入时保持按钮”应始终工作。
MISC功能
鼠标放缓
曾经试图将YT视频滑块移至特定位置,但是您的鼠标移动过于跳动,突然间,您像5岁那样超级移动手,然后再次播放“操作”?
按右CTRL +右ALT切换慢小鼠模式。鼠标指针将大大减慢,使您能够完成更精确的精度工作,并通过再次按相同的键来使鼠标正常移动。
开关锁
如果要将自己锁定到一个屏幕上,请使用RIGHT CTRL + K这将确保您不会意外离开当前屏幕。要关闭,请再次按相同的键组合。
锁定两个屏幕
您可以使用RIGHT CTRL + L一次锁定这两台计算机。要使用此功能,请首先为配置中的每个输出设置OS(因为快捷方式不同)。
游戏模式
如果您是游戏,那么您的游戏可能与绝对鼠标模式无法正常工作。为了解决该问题,引入了游戏模式,由LEFT CTRL + RIGHT SHIFT + G进行切换。在游戏模式下,您将锁定到当前屏幕上,并且鼠标的行为就像是标准的相对鼠标。这还应解决各种虚拟机问题,当前不支持操作系统等。
屏幕保护程序
据说是为了防止计算机进入待机,但说实话 – 看着很有趣。默认情况下,将使您的鼠标指针像乒乓球一样在屏幕上弹跳。启用后,它在用户配置标头定义的不活动时间后激活,并在向该屏幕发送任何输出后自动关闭。
潜在的用法示例 – 我有一个越野车USB码头,该码头不会恢复待机视频,因此不允许它睡觉可以是方便的解决方法。
硬件
该电路基于两个Raspberry Pi Pico板,因为它们便宜(4.10€ / pc),因此可以手工焊接,大多数供应商都可以使用它们。
PICOS使用UART连接,并通过模拟设备ADUM1201双通道数字隔离器(〜3€)或更便宜,更快且与PIN兼容的Ti ISO7721DR(〜1.5欧元),这是首选的选择。
尽管他们通常不支持双重USB,但由于一个惊人的项目,使用RP2040中的可编程io巫师实施了USB,因此有支持它既可以充当USB主机又是设备。
PCB [更新]
为了使DIY构建尽可能简单,将轨迹保持在一侧,并且零件数量保持在最小。
USB D+/D-差分线的长度应相同,但是它们的目的是略有不对称的,以应对相应的GPIO痕迹PICO PCB本身的长度差,因此总长度应匹配。
ZD(差异阻抗)的目的为90欧姆(设法获得〜107,足够接近:))。
该厚度的设计为1.6毫米,可按预期工作。
PCB有2个版本(用户没有重大差异)。原始(v1.0)更容易焊接和组装,而v1.1提供了一些升级,例如:
-
添加了ESD保护(TPD4E1U06DBVR)
-
为键盘/鼠标连接器添加了VBU电容器
-
丝网取向标记
-
带有标头的克隆板的孔预先售出且更容易对齐
-
USB 27欧姆电阻
由于瞬态电压抑制器IC和0805电阻器,该版本的焊接稍难稍难,但这完全可行。从理论上讲,电视可以省略(不建议),它仍然可以起作用。
即将到来的 – 带有裸露的RP2040的板,不需要Picos,更小,更方便。
案件
由于我对3D不太好,因此案例简单而基本,但可以做到这一点。它应该易于打印,使用〜33克细丝,需要几个小时。
水平的PCB运动被钉在侧面的孔和垂直运动的钉子上通过侧面的凸耳滑动 – 不需要螺钉。该箱子进行了轻微的重新设计,以配备徽标和两个额外的快照凸耳,因此它提供了更好的密封。
两个板上的微型USB连接器都偏离了外壳的侧面,因此稍大的孔应允许电缆伸入。
盖子是一种快速设计的设计,带有螺丝刀插槽以打开。顶部的标记是嵌入式的,可以用蜡笔完成,以提供更好的对比度(或简单地左右)。
材料清单
单击此处查看原始PCB V1.0 BOM
| 成分 | 数量 | 单价 /€ | 价格 /€ |
|---|---|---|---|
| 覆盆子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连接。 | 2 | 0.20 | 0.40 |
| 标题2.54 1×03 | 2 | 0.08 | 0.16 |
| 全部的 | 11.53 |
可以使用Ti ISO7721DR代替ADUM – 它与PIN兼容,更便宜并且具有更好的规格。
PCB V1.1
| 成分 | 部分 | 数量 | 单价 /€ | 价格 /€ |
|---|---|---|---|---|
| U1,U2 | 覆盆子pi pico | 2 | 4.10 | 8.20 |
| J1,J4 | USB-A PCB连接。 | 2 | 0.20 | 0.40 |
| U4 | ti iso7721dr | 1 | 1.40 | 1.40 |
| (或ADUM1201BRZ) | ||||
| C1,C2 | 上限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 | 标题2.54 1×03 | 2 | 0.08 | 0.16 |
| 全部的 | 11.22 |
USB-A连接器可以是Molex MX-67643-0910,也可以是具有相同维度的便宜/预算。
其他步骤:
- 制作PCB(提供Gerber,选择1.6毫米厚度)
- 3D打印案例(提供的STL文件,〜33G细丝)
集会指南
如果您在电子产品方面有一定的经验,则不需要这个。但是,有些人可能不会,在这种情况下,此视频可能会帮助您完成整个过程。请注意,焊接后,您应清洁PCB的通量,以防止腐蚀。
这样做的标准过程是使用异丙醇和旧牙刷。但是猜怎么着?我不是把我的旧牙刷放在网上,所以您只需要即兴创作那部分:)
[注意]视频组件指南涵盖PCB V1.0。修订版非常相似,并且过程基本相同。
用法指南
键盘快捷键 – (FW版本0.68+)
配置:
Left ShiftLeft Ctrl + Right Shift + C + O输入配置模式Right Shift + F12 + D删除Flash配置Right Shift + F12 + Y保存屏幕开关偏移量
用法:
-
Right CTRL + Right ALT切换较慢的鼠标模式 Right CTRL + K锁/解锁鼠标桌面开关Right CTRL + L一次锁定两个输出(在之前设置输出操作系统,请参见下面的快捷方式)Left ShiftLeft CTRL + Right Shift + G切换游戏模式(锁定到屏幕,充当标准鼠标)-
Left CTRL + Right Shift + S启用屏幕保护程序 Left CTRL + Right Shift + X禁用屏幕保护程序Left CTRL + Caps Lock– 输出之间切换
注意:有些键盘不能同时正确发送这两个转变,这就是为什么更改快捷方式的原因 – 为所有人工作。为混乱表示歉意。
开关光标高度校准
不需要此步骤,但是如果您的屏幕不完全对齐或尺寸不同,则可以方便。目的是让鼠标指针以完全相同的高度出现。
只需将鼠标停在较小/下屏幕高的较大屏幕上(图表),然后按Right Shift + F12 + Y 。您的LED(和CAPS锁)应在确认中闪烁。
重复底部边框(如果它在较大的屏幕边框上方)。这将被保存到Flash,并且从现在开始就可以保持此校准值。
每个输出多个屏幕
Windows和Mac有多个屏幕和绝对定位的问题,因此需要解决方法(仍然实验)。正在建设中有一个更好的解决方法,但是目前您必须为每个输出和屏幕数设置操作系统。
您的主屏幕需要在中间,边缘屏幕上的屏幕。要配置实际选项,请打开设备的Web配置页面。
Web配置模式
从FW 0.6开始,引入了改进的配置模式。要配置设备,请按照以下说明:
-
按左CTRL +右Shift + C + O-您的设备将重新启动并输入配置模式(在键盘上插入了)。 LED将在配置会话期间继续眨眼。
-
一个新的USB驱动器将出现名为“ deskhop ”,带有一个文件,config.htm
-
用铬 /铬打开该文件。不幸的是,现在不支持FF,因为它们避免实施WebHID。
-
单击连接并允许deskhop设备配对。
-
随时配置选项,然后单击“保存”以写入设备。
-
单击菜单中的“退出”以离开配置模式以增加安全性。
Linux看不到设备?点击这里。
问:Linux上的铬无效。
答:您可能需要调整 /开发权限或创建一个相应的UDEV规则文件,并确保您的用户在正确的组中,例如:
/etc/udev/rules.d/99- deskhop .rules
KERNEL==\"hidraw*\", SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"1209\", ATTRS{idProduct}==\"c000\", GROUP=\"plugdev\", MODE=\"0660\"
问:为什么不简单地创建一个不错的在线网页,例如Via而不是处理这种怪异的USB驱动器?
答:从随机的在线位置加载JavaScript与输入设备进行交互是一种潜在的安全风险。配置网页仅是本地的,没有外部加载。
请注意,由于故意混淆,配置网页并不是“怪异” – 由于存储非常有限,它是自我压缩的。整个来源是100%开放的,并且是此存储库的一部分。鼓励您自己重建一切。
功能验证
当您连接新的USB外围设备时,板将两次闪烁LED,并指示另一个板进行同样的操作。这样,您可以测试USB和发出的通信是否适用于每个董事会。
首先将键盘插入一侧,然后再在另一侧进行测试。如果一切正常,LED在两种情况下都会快速闪烁。
安全与安全
尽管它可以使设备更易于使用或更简单地配置,但某些功能是故意缺少的。这是这些决定的快速分解:
- 系统之间没有副本或任何信息共享。这样可以防止信息泄漏。
- 未经明确的用户同意,没有WebHID设备管理。没有输出计算机的入站连接性,唯一的标准键盘LED/关闭消息除外,并且硬限制为1字节的数据。
- 没有FW升级从输出触发。只有通过特殊键盘快捷键进行明确和故意的用户操作才能做到这一点。
- 没有插入键盘/鼠标自定义端点或向这些设备转发的信息。它们的潜在漏洞有效地从计算机上进行了防火墙。
- 不允许保留输入历史记录。
- 由于任何原因,都没有设备发射的击键。唯一出现的是您键入/触发的内容。
- 输出是物理分离的,并以最小的分离电压为2KV进行液体分离。
- 设备之间交换的所有数据包均具有固定长度,传输的配置选项仅限于简短列表。大多数选项都是只读的。可以禁用跨设备固件升级。
- 没有蓝牙或wifi,网络,互联网访问等。
- 在任何情况下,任何连接的计算机都不被认为是信任的。
- 一段时间不活动后,配置模式将自动禁用。
- 整个代码都是开源的,没有任何二进制斑点,并彻底发表了解释其目的。我鼓励您永远不要信任任何人,并始终确保您通过手动审核知道您正在运行的内容。
这仍然不能保证任何事情,但我相信它制定了一套合理的基本规则,以确保您安全和受到保护。
常问问题
-
我只有两个picos,我可以没有PCB和隔离器吗?
当然。建议使用隔离器,但没有它应该可以使用。
-
如果我的监视器上有两种不同的分辨率,会发生什么?
鼠标运动是在抽象的坐标空间中完成的,您的计算机可以算出与物理屏幕相对应的方式,因此它应该可以正常工作。
-
我在哪里可以买到呢?
我什么都没卖,这只是一个个人的非商业爱好项目。
更新1 :似乎您可以从Elecrow中以1(用于PCB,组装PCB或完全组装的设备的数量订购)订购,如果您按照用户报告的按照此链接进行此链接,则您的董事会将空白到达,您必须自己编写固件。
更新2 :我从来没有问Elecrow任何事情,但是几天前,他们提出要赞助该项目,预算较小,该项目将用于未来的董事会原型制作。由于我的目标是创建一个拥有2个以上输出等的更好董事会,因此我相信原型服务可能对该项目有益。
-
当通过鼠标更改活动屏幕时,键盘是否遵循(反之亦然)?
是的,这个想法是使其表现得像一台计算机一样。
-
这种使用键盘/鼠标组合加密狗(例如Logitech统一接收器)是否可以使用?
它应该起作用。经过最近的FW更新后,对组合接收器的支持应该更好。
-
这与具有单独的无线接收器的无线鼠标和键盘(一个用于鼠标,另一个用于键盘)?
它应该工作 – 尝试使用单独的接收器的Anker Wireless鼠标,而且工作正常。
-
我在构建或编译方面有问题
查看可能有一些答案的故障排除Wiki。
软件替代方案
如果在您的特定情况下可以使用,则可以使用几种软件替代方案。
- 障碍 – 免费的开源
- 输入Leap-免费的开源
- 协同作用 – 商业
- 鼠标没有边界 – 免费,仅Windows
- 通用控制 – 免费,苹果事物
缺点
- Windows 10在KB5003637中打破了HID的绝对坐标行为,因此您不能在Windows上使用超过1个屏幕(鼠标将停留在主屏幕上)。有一个实验性解决方法,途中有一个更好的解决方法。
- 代码需要清理,一些重构等。
- 我不知道多种设备测试,我不知道它如何与您的硬件一起使用。很有可能事情可能无法开箱即用。
- 高级键盘(带有旋钮,额外的按钮或滑块)可能会面临此额外硬件不起作用的问题。
- 带有300个按钮的超现代鼠标可能会看到一些按钮无法正常工作。
- 注意:两台计算机都需要连接并为USB提供电源以使其工作(因为每个板都由其插入的计算机供电)。即使在如今关闭时,许多台式机和笔记本电脑也将提供电源。如果您需要用一个完全断开连接的一个板运行,则应可以使用USB集线器将键盘和鼠标插入一个端口。
- MACOS有一个以上屏幕的问题,最新的固件提供了修复它的实验性解决方法。
进步
那么,所有热情有什么意义?我简直不敢相信 – 请允许我感谢大家!我从没想到过对一个简单的个人项目的这种兴趣,因此最初的功能非常基本(就像我的烹饪技能一样),并且主要涵盖我自己的用户酶。请继续关注固件更新,这些更新将带来更广泛的设备兼容性,更多功能和更少的错误。由于这是一个爱好项目,因此感谢您对时间限制并承诺尽我所能的理解。
计划的功能:
- 多屏窗口和MacOS的更好的解决方法
- 透明 /游戏模式
- 支持2个以上的输出
- 配置UI的改进
- …还有更多!
在Lite版本上工作,该版本仅提供一个Pico W板提供基本功能,从而进一步降低了成本,即使没有添加的硬件或PCB,也可以尝试一下。
鼠标的投票现在应以1000 Hz的速度工作(图中的倾角是我的手臂受到所有动作的伤害:-):):
赞助商 /捐赠
我不是为了盈利或任何其他原因这样做,只是尝试通过为每个人创造更好的工作环境来帮助人们。如果您想进一步支持该项目,请考虑向像医生这样的慈善机构捐款。
请允许我感谢所有帮助或考虑的人!
免责声明
我友好地要求任何试图建立这个项目的人都了解并承认我对任何伤害,损害或其他后果都不承担任何责任。您的安全很重要,我鼓励您仔细处理该项目,采取必要的预防措施,并在整个过程中对您的福祉承担个人责任。请不要被电死,燃烧,压力或生气。玩得开心,享受!
开关快乐!
