Многие слышали про DIY проект Pi-KVM, позволяющий превратить ненужную малинку в IP-KVM. Не смотря на то, что разработчик проекта выпускает свое собственное железо, проект опенсурсный, но заточен только под одноплатные микрокомпьютеры Raspberry Pi 2, 3, 4 и Zero 2 W.
Для того, чтобы поставить Pi-KVM на одноплатники других производителей существует хитрый хак, а именно скрипт, написанный энтузиастами. Лучше не знать, какая магия творится там внутри, но скрипт реально делает свое дело - ставит PiKVM версии 3.291.

На этом вроде бы можно и закончить, если бы не одно "но" - в самой свежей версии 4.94 (на момент написания данной статьи) реализован режим эмуляции DVD-ROM, который позволяет монтировать большие ISO образы. Да и в принципе приятно когда установлен свежий софт, с исправленными глюками и багами, а не версия времен динозавров.
Попробовав установить версию 4.94 оригинальным скриптом меня ожидало фиаско. Во первых, самая свежая версия жить не может без python3.13, а скрипт на данный момент под него не заточен. А во вторых, реализация функции эмуляции DVD-ROM не такая уж и тривиальная задача, как оказалось. И даже если у вас получится поставить PiKVM, работать эмуляция не будет - автор проекта внес изменения в исходники модуля ядра (раз, два), добавив дополнительную функцию в f_mass_storage
для usb_gadget
.
Но так как проект опенсурсный, мы можем сделать тоже самое. Для этого нам понадобится... собрать свой собственный армбиан, применив данные патчи к ядру!
На самом деле ничего страшного в этом нет, так как среда сборки Armbian довольно продуманна, и позволяет кастомизировать готовые образы практически как угодно. Почитать про сборку собственного дистрибутива можно тут и тут. А мы же сразу приступим к действиям.
Сборка Armbian с патчами ядра.
Для сборки собственного кастомного дистрибутива понадобится Linux. Можно попробовать собрать дистрибутив и на Windows 10/11 с подсистемой WSL2 на котором запущен Armbian / Ubuntu Noble 24.04.x, но я буду использовать Armbian Build Framework на машине с установленным Ubuntu Noble 24.04.x. Можно заюзать любой Linux который умеет в Docker.
Качаем исходники Armbian Build Framework
git clone https://github.com/armbian/build
cd build
Попав в папку build
, можно уже что-нибуть собрать с помощью команды
./compile.sh
Нас встретит консольный псевдографический "мастер", который поможет собрать дистрибутив в пару-тройку кликов энтером. Параметры менять нет необходимости, поэтому выбираем дефолтные значения, за исключением модели вашего одноплатного компьютера и версии Armbian OS.
Если ваш одноплатный компьютер отсутствует в списке официально поддерживаемых, загляните в меню Show CSC/WIP/EOS/TVB и попробуйте найти его там.

Я буду собирать образ под Orange Pi Zero 3, который как раз и находится в списке оборудования, поддерживаемого сообществом (CSC). Там же находятся ТВ-приставки и оборудование которое уже не продается (EOS).

Для работы PiKVM необходим python3.13 и janus (Janus WebRTC Server). Если первый можно найти в репозиториях Armbian Trixie и Ubuntu 25.04 Plucky Puffin, то с последним все гораздо интереснее. В Debian Trixie его нет. Его выпилили. А ставить Janus WebRTC Server из исходников что-то совсем не хочется.

В Ubuntu 25.04 (Plucky) пакет janus имеется, и не смотря на то что эта версия ОС поддерживается только коммьюнити (csc), выбора у нас пока нет, поэтому смело выбираем пункт с вышеназванной осью (выбирая остальные параметры по умолчанию).
Но ведь мы же еще не положили патчи ядра! - спросите вы, и будете правы. Но, во первых, лучше заранее убедиться что сборка дистрибутива под вашу модель одноплатника пройдет успешно. А во вторых, первый запуск скрипта создаст дополнительные папки, необходимые для сборки кастомного дистрибутива, одна из которых будет называться userpatches
. Вот она то нам и будет нужна впоследствии.
Теперь смотрим как побежали буквы. Смотреть необходимо внимательно, потому что нам необходимо узнать, куда класть патчи ядра.

Нас интересует строчка с KERNELPATCHDIR
. Папка с патчами должна находиться в зависимости от архитектуры процессора и версии ядра в директории userpatches
.
В принципе, на этом месте сборку дистрибутива можно прервать нажав Ctrl+C, и наконец положить волшебные патчи в нужное место.
В моем случае патчи ядра располагаются в папке archive/sunxi-6.12, а полный путь относительно директории build
будет выглядеть как userpatches/kernel/archive/sunxi-6.12/
. Папку sunxi-6.12
необходимо создать руками и положить туда два патча. Если у вас установлено окружение рабочего стола, выполнить эти простые вещи для вас не составит труда. Если вы работаете с голой консолью, то находясь в папке build
запустите
mkdir userpatches/kernel/archive/sunxi-6.12
cd userpatches/kernel/archive/sunxi-6.12
wget https://raw.githubusercontent.com/pikvm/packages/refs/heads/master/packages/linux-rpi-pikvm/2001-msd-dvd.patch
wget https://raw.githubusercontent.com/pikvm/packages/refs/heads/master/packages/linux-rpi-pikvm/2002-msd-inq.patch
Не забудьте поменять имя папки sunxi-6.12
на свое!
Запускаем сборку дистрибутива заново (./compile.sh
) и ждем успешного завершения. Наберитесь терпения, это не быстрый процесс. Будут скачаны исходники ядра, применены патчи и собрано новое ядро, и только потом - дистрибутив Armbian.
Готовый файл образа будет лежать в папке build/output/images
. Запишите образ на SD-карту размером не менее 32Гб (большой объем пригодится для хранения установочных образов ISO), вставьте ее в одноплатный компьютер и загрузите ОС.
После первого запуска обязательно отключите обновление ядра с помощью armbian-config
в меню Sustem - Updates - Disable Armbian firmware upgrades
.
Половина дела сделана. Осталось установить PiKVM.
Установка PiKVM 4.94 на Ubuntu 25.04
Как я уже упоминал, для работы последней версии PiKVM необходим Python 3.13 и собранный с патчами ядра дистрибутив Ubuntu Plucky. Обязательно учтите эти требования!
Работа скрипта разделена на две части - первый запуск скрипта устанавливает необходимые пакеты, собирает из исходников ustreamer и wiringpi, создает пользователей, а вторая часть (после обязательной перезагрузки) окончательно устанавливает PiKVM, и немного подрихтовывает систему для его работы.
Для начала обновим пакеты системы до актуальных версий
sudo apt update && apt upgrade
Если система предложит обновить ядро, значит вы не отключили обновления ядра в armbian-config
. Обязательно выберете Disable Armbian firmware upgrades
, иначе ядро с необходимыми патчами будет заменено.
Установим некоторые пакеты
sudo apt install -y git vim make python3-dev gcc xz-utils wget
Склонируем репозиторий
git clone https://github.com/kerenskiy/kvmd-armbian.git --depth 1
Перейдем в папку со скриптом и запустим его
cd kvmd-armbian
./install.sh
После того, как закончится первая часть работы скрипта будет предложено перезагрузить систему. После перезагрузки снова перейдите в папку со скриптом и запустите его второй раз.
На втором этапе работы скрипта будет предложено проверить работоспособность PiKVM. Сделать это можно перейдя в браузере по ip адресу который получил микрокомпьютер, и если веб админка откроется, значит мы все сделали правильно. Смело жмем "y" и перезагружаем микрокомпьютер после завершения выполнения работы второй части скрипта.
Осталось подготовить все необходимое для работы эмулятора CD\DVD-дисковода PiKVM. Выключаем одноплатный компьютер и вытаскиваем из него SD-карточку. Её придется переразметить - уменьшить основной раздел с ОС до 4-8Гб, создать второй раздел на освободившемся пространстве и отформатировать его в файловую систему ext4. Чем и как это сделать - каждый решает сам. Можно воспользоваться Acronis Disk Director, GParted или любыми другими программами для работы с дисками. В моем случае я просто воткнул карточку в компьютер с Kubuntu и разбил ее с помощью стандартной утилиты "Управление дисками KDE".

Возвращаем карточку обратно в одноплатный компьютер и загружаем ОС. Для того, чтобы свежесозданный раздел появился в системе и мог использоваться PiKVM для хранения установочных образов, необходимо дописать в файле /etc/fstab
точку монтирования, выполнив команду
sudo nano /etc/fstab
и поместив следующий текст в самом конце файла (на новой строке):
/dev/mmcblk0p2 /var/lib/kvmd/msd ext4 nodev,nosuid,noexec,ro,errors=remount-ro,data=journal,X-kvmd.otgmsd-root=/var/lib/kvmd/msd,X-kvmd.otgmsd-user=kvmd 0 0
Перезагружаем одноплатный компьютер чтобы изменения вступили в силу и включаем функционал MSD (Mass Storage Device) в конфиге PiKVM.
sudo nano /etc/kvmd/override.yaml
Ищем секцию msd
и стираем все что с ней связано. Должно получиться как то так:

Еще раз перезагружаемся и проверяем работу msd - в интерфейсе PiKVM должно появиться меню Drive, с помощью которого можно загружать образы и монтировать их в хост системе.

На этом все. Благодарю за внимание.
PS. Замечания по работе исправленного скрипта установки PiKVM принимаются на github, буду рад вашим PR.
teuchezh
Я хотел себе поставить на Домашний центр MTS-HC-001, у меня их как раз два, покупал под эксперименты когда когда распродавались по 1000 или 1500, но тут всплыл интересный факт, что у данной железки нет OTG
Скрытый текст
kerenskiy Автор
У данной железки как раз есть отг) и даже второй юсб на разъёме mpcie.
teuchezh
Падажжите, про mpcie я в курсе, я вскрывал железку и мне показалось что на разъеме разводка чисто под питание
kerenskiy Автор
Ага, и модем в нем по волшебству работает, чисто на одном питании
teuchezh
Я имел ввиду разъем type-c, там кажется нет разводки под линии дата