Как собрать аппаратурный KVM-переключатель за 11 евро на двух Raspberry Pi Pico
Знакома ситуация, когда на столе стоят два компьютера, а место есть только под один комплект из мыши и клавиатуры? Обычно проблему решают двумя путями. Первый — программный (вроде Barrier или Input Leap). Но тут начинаются танцы с бубном: сеть отвалилась, корпоративный VPN заблокировал локальный трафик, или рабочая машина вообще запрещает ставить сторонние программы. Второй путь — недорогой USB-свитч с AliExpress. Нажимаешь кнопку на коробочке, ждешь пару секунд, пока операционная система переинициализирует устройства, и так по кругу десятками раз за день.
Разработчик с ником hrvach столкнулся ровно с этой болячкой и решил сделать собственное железо. Проект получил название DeskHop. Это открытое устройство, которое переключает клавиатуру и мышь между двумя компьютерами мгновенно. Причем переключать можно как хоткеем, так и просто перетаскиванием курсора мыши за край экрана, словно у вас один монитор на два ПК.

Как это устроено внутри
В основе схемы лежат две стандартные платы Raspberry Pi Pico на чипе RP2040. Каждая плата подключается к своему компьютеру через USB. Между собой микроконтроллеры общаются по UART через микросхему гальванической развязки (TI ISO7721DR или ADuM1201).
Разделение питания здесь честное: земля и питающие линии двух ПК полностью изолированы друг от друга. Если один компьютер сгорит или выдаст скачок напряжения, второй не пострадает.
Секрет работы со стороны USB заключается в библиотеке Pico-PIO-USB. Программируемый ввод-вывод (PIO) в чипе RP2040 превращает обычные 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, не давая компьютеру уйти в спящий режим.
Железо и сборка своими руками
Проект изначально проектировался так, чтобы его мог собрать любой желающий на кухонном столе. Двухслойная печатная плата разведена с минимальным количеством компонентов.

Компоненты для сборки (версия PCB v1.1):
| Компонент | Количество | Примерная цена | | --- | --- | --- | | Raspberry Pi Pico | 2 шт. | ~8.20 € | | Разъем USB-A на плату | 2 шт. | ~0.40 € | | Изолятор TI ISO7721DR | 1 шт. | ~1.40 € | | Конденсаторы и резисторы (0805) | 8 шт. | ~0.44 € | | Чипы ESD-защиты TPD4E1U06DBVR | 2 шт. | ~0.62 € |
Итоговая себестоимость комплектующих получается в районе 11-12 евро. Корпус печатается на 3D-принтере за пару часов, фиксация платы идет на защелках без единого винта.

Для тех, кто не хочет паять самостоятельно, гербер-файлы выложены в репозитории. Плату в сборе или в виде конструктора можно заказать на Elecrow.
Прошивка и настройка
Собирать проект из исходников можно через CMake или Docker:
docker-compose -f misc/docker.yml run --rm build_container
Если собирать лень, в разделе релизов есть готовый файл firmware.uf2. Чтобы прошить устройство, достаточно зажать комбинацию Left Ctrl + Right Shift + C + O. DeskHop перезагрузится и притворится виртуальным накопителем "DESKHOP", куда нужно просто скинуть .uf2 файл.
Для калибровки высоты перехода между мониторами разного размера предусмотрено сочетание Right Shift + F12 + Y.

Настройка конфигурации сделана с акцентом на безопасность. Никаких веб-серверов или облаков. При входе в режим настройки на виртуальном диске появляется файл config.htm. Вы открываете его локально в Chrome или Yandex Browser и редактируете параметры через WebHID прямо в браузере.



Вопросам безопасности автор посвятил отдельный блок:
- Никакого общего буфера обмена или передачи файлов между системами.
- Никаких сетевых интерфейсов, Wi-Fi или Bluetooth.
- Компьютер не может принудительно обновить прошивку устройства без нажатия физических клавиш на клавиатуре.
Ограничения и подвохи
Проект получился отличный, но идеальных вещей не бывает. Перед сборкой стоит знать о нескольких нюансах:
- Многомониторные конфигурации. В Windows 10 начиная с обновления KB5003637 сломалось поведение абсолютных координат HID для нескольких мониторов. Курсор может магнитить к первому экрану. В прошивке есть экспериментальные костыли, но проблему пока решают.
- Сложная периферия. Клавиатуры с экранами, макро-пады и мыши с 20 дополнительными кнопками могут работать некорректно. Простые офисные и механики без странных экзотических энкодеров работают без проблем.
- Питание. Оба компьютера должны подавать питание на свои USB-порты. Если один ПК полностью обесточен, устройство не запустится без подключения внешнего хаба.

Частота опроса мыши достигает 1000 Гц, так что задержек при движении вы не почувствуете.
Стоит ли делать
DeskHop — отличный проект выходного дня для любителей DIY. Если вы работаете за двумя рабочими станциями одновременно и устали от задержек программных KVM или кликов кнопками на китайских коммутаторах, эта коробочка окупает затраченные 15 евро в первый же день. Исходный код C и чертежи печатных плат полностью открыты под лицензией GPL-3.0.

