KlipperScreen на слабом SBC

KlipperScreen — GTK-интерфейс для Klipper на тач-экране, говорит с Moonraker по API. Ставится вместо заводского UI на слабых ARM-платах (Rockchip/Pi-класс, ~500 МБ ОЗУ). Ниже — грабли и приёмы, найденные на такой машине.

Установка без интерактива и без компиляции

Официальный KlipperScreen-install.sh интерактивен (3 промпта: сервис / X11 vs Wayland / NetworkManager) и на ARM по умолчанию компилит PyGObject/pycairo из исходников (медленно, RAM-нагрузка). Обходы:

1. Управление промптами через env (инсталлятор читает if [ -z "$VAR" ]):

sudo -u <klipper_user> -H env SERVICE=Y BACKEND=X START=0 NETWORK=n \
  DEBIAN_FRONTEND=noninteractive bash .../KlipperScreen/scripts/KlipperScreen-install.sh </dev/null

SERVICE=Y (ставить сервис), BACKEND=X (X11, пропускает промпт), START=0 (не запускать сразу — чтобы протестировать до подмены), NETWORK=n (без NetworkManager).

2. piwheels для ARM — инсталлятор сам использует pip install --extra-index-url https://www.piwheels.org/simple: готовые бинарные колёса, без компиляции. Если ставить pip вручную — указывать этот индекс, иначе PyGObject/pycairo собираются из исходников. В логе успех: Successfully installed PyGObject-3.50.2 pycairo-1.28.0 ….

Footgun: NetworkManager рвёт сеть на dhcpcd-хосте

Инсталлятор предлагает поставить network-manager для сетевой панели. Если хост на dhcpcd (типично для принтерных прошивок), установка NetworkManager может перехватить управление сетью и оборвать SSH. Защита:

sudo apt-mark hold network-manager   # apt не поставит его даже при неверном ответе
  • отвечать NETWORK=n. В логе правильного исхода: Not installing NetworkManager for the network panel.

Пользователь и home

Ставить под тем же юзером, что владеет klipper/moonraker (напр. qidi), а не под тем, чей home — симлинк (частая беда вендорских образов: /home/mks → симлинк на /home/qidi, и mks не может писать в свой же home). KlipperScreen-install.sh падает EUID==0 → под root не запускать, только sudo -u <user> -H.

X/тач на маленьком экране

  • разрешение обычно мелкое (пример: 480×272); в журнале Screen resolution: 480x272, Moonraker Connected — признак успеха;
  • тач-девайс ищется в /proc/bus/input/devices (grep -E "^N: Name=|^H: Handlers="), напр. Goodix Capacitive TouchScreen → event0; конфиг /etc/X11/xorg.conf.d/10-touchscreen.conf (Driver "evdev", Option "Device" "/dev/input/eventN", калибровка Option "Calibration");
  • если сервис не стартует из-за ConditionPathExists=/dev/tty0 в шаблоне — override /etc/systemd/system/KlipperScreen.service.d/override.conf с пустым ConditionPathExists=;
  • xinit-строку в KlipperScreen-start.sh иногда нужно дополнить флагами -seat seat1 -allowMouseOpenFail -sharevts -novtswitch -noreset.

Кастомные меню (панель в режиме простоя)

Синтаксис (из родных config/main_menu.conf, docs/Configuration.md): два корня — __main (простой) и __print (страница печати). Пункт [menu __main <name>], вложенность — добавлением сегмента пути: [menu __main <name> <child>]. Пункт с детьми = подменю; пункт с method/params = действие.

[menu __main box]
name: Бокс
icon: filament
 
[menu __main box load_s1]
name: Слот 1
icon: extrude
method: printer.gcode.script
params: {"script": "T0"}

По умолчанию пользовательские пункты добавляются к штатным (Move/Temp/Extrude), не заменяют. Бонус: любой [gcode_macro] без _ в начале имени KlipperScreen сам показывает кнопкой в панели Macros — отдельное меню нужно лишь для группировки/русских подписей.

Преференсы и пресеты прогрева

Настройки [main] (тема, гашение, сортировка) хранятся в KlipperScreen.conf в автосейв-блоке с префиксом #~# (аналог Klipper #*#), который KlipperScreen переписывает при изменении через UI. Пример переносимых значений: theme = material-darker, screen_blanking = 1800, screen_blanking_printing = 7200, only_heaters = True, print_sort_dir = date_desc.

Пресеты прогрева — обычными (не-#~#) секциями сверху файла:

[preheat PLA]
extruder: 215
heater_bed: 60

→ кнопки в панели температур. Опционально gcode: для доп-команд (напр. камера). Камеру в PETG не ставить — она для ABS/ASA, PETG от неё клинит (heat creep).

Источники

  • github.com/KlipperScreen/KlipperScreenscripts/KlipperScreen-install.sh, scripts/KlipperScreen.service, config/main_menu.conf, docs/Configuration.md
  • piwheels: https://www.piwheels.org/simple
  • родственная тема — Печать 3д модели