PicoTTY: один Raspberry Pi Pico на сервер вместо полноценного IP-KVM
PicoTTY выводит текстовую консоль Linux через USB CDC и одновременно эмулирует USB-клавиатуру для BIOS, GRUB и аварийных сочетаний. На каждую машину ставится Pico или Pico 2 с проводным Ethernet, а Raspberry Pi Zero 2 W сводит узлы в общую панель. Ключевой компромисс системы связан с питанием узла от самого управляемого компьютера.
Проект PicoTTY предлагает компактную схему удалённого доступа к мини-ПК и самосборным серверам, у которых нет BMC, IPMI и выделенного последовательного порта. На стороне каждой целевой машины работает Raspberry Pi Pico или Pico 2 с Ethernet-контроллером WIZnet W5100S. Центральный Raspberry Pi Zero 2 W принимает соединения от периферийных узлов, хранит историю и предоставляет браузерную панель для нескольких машин.
Инженерная основа PicoTTY — составное USB-устройство. Один кабель подключает Pico к USB-порту сервера, после чего микроконтроллер объявляет два интерфейса: CDC ACM для последовательной консоли и HID keyboard для ввода клавиш. Первый канал получает текст ядра, загрузчика и терминала, если на целевой системе заранее включена serial console. Второй позволяет отправить Ctrl+Alt+Del, Magic SysRq, команды загрузчику или символы в initramfs ещё до запуска пользовательской ОС.
Такое разделение связано с порядком инициализации. CDC-консоль становится полезной после USB-enumeration и настройки соответствующего устройства в Linux. HID-клавиатура обычно доступна прошивке и загрузчику существенно раньше, поэтому узел способен подать управляющий ввод в момент, когда удалённый текстовый вывод ещё отсутствует. Практическая обратная связь в BIOS или UEFI при этом зависит от serial redirection конкретной платы: видеоканала в PicoTTY нет.
Ethernet вынесен в W5100S по SPI. Это освобождает единственный USB-контроллер RP2040 для device-режима, необходимого целевой машине. W5100S содержит 10/100 Ethernet PHY, четыре аппаратных сокета и 16 KiB общей памяти TX/RX, чего достаточно для постоянного консольного TCP-канала при скромных требованиях serial-over-IP. Архитектура избегает USB-host-обвязки и видеозахвата, оставляя на узле простую связку «текстовый вывод плюс клавиатурный ввод».
На центральном узле заявлены WebSocket-консоли, SQLite-журнал, макросы клавиатуры, YAML-сценарии с ожиданием заданного текста, очередь команд для временно потерянных устройств, запись терминальных сессий и сырой serial bridge для minicom либо PuTTY. В прошивке предусмотрены OTA-обновления с контрольными суммами, canary-развёртыванием и watchdog-откатом. Эти функции описаны в репозитории проекта; независимых измерений задержки, устойчивости соединений и поведения после массового сброса USB пока не опубликовано.
Полноценного out-of-band управления PicoTTY не обеспечивает. Pico питается от USB VBUS управляемой машины, поэтому при выключенном сервере, отказе блока питания или проблеме с USB-портом исчезает и сам удалённый узел. Система также не управляет ATX-питанием и не заменяет сетевой PDU. Для восстановления после таких отказов потребуются отдельное always-on питание, управление кнопкой питания или внешняя силовая инфраструктура.
В результате PicoTTY занимает промежуточную нишу между обычным SSH и дорогим IP-KVM. Схема особенно применима к лабораторным стойкам и компактным Proxmox-узлам, где serial console уже включена, а задача сводится к чтению panic-лога, выбору загрузочного пункта и отправке аварийных клавиатурных команд через отдельную проводную сеть.