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

Для того, чтобы поставить Pi-KVM на одноплатники других производителей существует хитрый хак, а именно скрипт, написанный энтузиастами. Лучше не знать, какая магия творится там внутри, но скрипт реально делает свое дело - ставит PiKVM версии 3.291.

PiKVM на Orange Pi Zero 3
PiKVM на Orange Pi Zero 3

На этом вроде бы можно и закончить, если бы не одно "но" - в самой свежей версии 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
Ubuntu 25.04

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

Но ведь мы же еще не положили патчи ядра! - спросите вы, и будете правы. Но, во первых, лучше заранее убедиться что сборка дистрибутива под вашу модель одноплатника пройдет успешно. А во вторых, первый запуск скрипта создаст дополнительные папки, необходимые для сборки кастомного дистрибутива, одна из которых будет называться userpatches. Вот она то нам и будет нужна впоследствии.

Теперь смотрим как побежали буквы. Смотреть необходимо внимательно, потому что нам необходимо узнать, куда класть патчи ядра.

KERNELPATCHDIR и все все все
KERNELPATCHDIR и все все все

Нас интересует строчка с 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 и стираем все что с ней связано. Должно получиться как то так:

Редактирование файла override.yaml
Редактирование файла override.yaml

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

Меню Drive
Меню Drive

На этом все. Благодарю за внимание.

PS. Замечания по работе исправленного скрипта установки PiKVM принимаются на github, буду рад вашим PR.

Комментарии (7)


  1. teuchezh
    04.09.2025 11:17

    Я хотел себе поставить на Домашний центр MTS-HC-001, у меня их как раз два, покупал под эксперименты когда когда распродавались по 1000 или 1500, но тут всплыл интересный факт, что у данной железки нет OTG

    Скрытый текст


    1. kerenskiy Автор
      04.09.2025 11:17

      У данной железки как раз есть отг) и даже второй юсб на разъёме mpcie.


      1. teuchezh
        04.09.2025 11:17

        Падажжите, про mpcie я в курсе, я вскрывал железку и мне показалось что на разъеме разводка чисто под питание


        1. kerenskiy Автор
          04.09.2025 11:17

          Ага, и модем в нем по волшебству работает, чисто на одном питании


          1. teuchezh
            04.09.2025 11:17

            Я имел ввиду разъем type-c, там кажется нет разводки под линии дата


  1. Dimano
    04.09.2025 11:17

    А на стареньком CubieTruck будет работать?


    1. kerenskiy Автор
      04.09.2025 11:17

      Если есть отг , должно. Никто не запрещает проверить)