diff --git a/servers/rpi.md b/servers/rpi.md index 618d16c..a990408 100644 --- a/servers/rpi.md +++ b/servers/rpi.md @@ -63,6 +63,13 @@ OneDrive на внешний HDD. Мониторится с fr1 через pushg - ⚠️ `BackupStale` видит только **существующие** серии — задача, ни разу не отчитавшаяся, им не ловится. Для этого `BackupNeverReported` на `absent()` (с 2026-10-11): OneDrive 12 ч, серверы 26 ч, роутер 30 ч, проверка OneDrive 8 дней; и `PushMetricsStale` на отсутствие SMART-метрик 1 ч. Доставка в Telegram проверена тестовым алертом 2026-10-11. - Алерты — группа `rpi` в `stacks/monitoring/prometheus/rules/alerts.yml`. +## Домашняя печать (с 2026-10-11) +- Brother DCP-L2620DW обнаружен через mDNS: `192.168.10.24`, `BRW2C9C58C1EEA7.local`, IPP порт 631 `/ipp/print`; чёрно-белый, A4, двусторонняя печать. Ранее службы печати на rpi не было. +- Установлены `cups`, `cups-client`, `cups-filters`, `cups-ipp-utils` (CUPS 2.4.10); включён `cups.service`. Очередь по умолчанию `home-brother`, драйвер `everywhere`, URI `ipp://BRW2C9C58C1EEA7.local:631/ipp/print`. По умолчанию A4, одна сторона; `printer-is-shared=false`, CUPS слушает только `127.0.0.1:631` и `[::1]:631`. Доступ из Telegram — команда агента, без отдельного открытого веб-интерфейса. +- Код настройки и команда — `stacks/rpi-print/`; `home-print` установлен в `/usr/local/bin/` (root, 755). `home-print status` — состояние/очередь; `home-print [--duplex] ` — одна копия, A4 с подгонкой. Печать только по прямой просьбе пользователя; приём задания в очередь не означает, что бумага уже вышла. +- ⚠️ DOCX напрямую не печатается — сначала преобразовать в PDF. Hostname выбран вместо DHCP-IP, чтобы пережить смену адреса; требуется mDNS и включённый принтер. `printer-error-policy=abort-job` исключает неожиданную автоматическую печать старых заданий после ошибки; ошибочный прогон нужно отправить заново. +- Проверено: запрос атрибутов IPP (`ipptool`) PASS, принтер idle/enabled, A4/Gray/duplex доступны. Портрет успешно преобразован фильтрами CUPS PNG → PDF → PWG Raster (A4, 300 dpi), без ошибок. Физическая тестовая печать не запускалась. + ## Агент Astra (с 2026-10-11) Агент на базе **Codex** (OpenAI), работает на самой малине, управление — из Telegram-бота **@rasp_contol_bot**. Код бота — отдельный репо **`ruzzy/astra-bot`** (там же схема работы). - Пользователь `astra` (группы `sudo`, `adm`, `systemd-journal`, `users`), пароль заблокирован, **sudo NOPASSWD** (`/etc/sudoers.d/90-astra`) — по решению пользователя. SSH-вход под ним — ключом `~/.ssh/id_ed25519` с Mac (алиас `ssh rpi-astra`). diff --git a/stacks/rpi-print/README.md b/stacks/rpi-print/README.md new file mode 100644 index 0000000..effa45b --- /dev/null +++ b/stacks/rpi-print/README.md @@ -0,0 +1,23 @@ +# Домашняя печать с rpi + +Принтер: Brother DCP-L2620DW, обнаружен 2026-10-11 через mDNS, +`192.168.10.24`, hostname `BRW2C9C58C1EEA7.local`. +Чёрно-белый, A4, двусторонняя печать; IPP `/ipp/print`, порт 631. +Код настройки — `setup.sh`; очередь `home-brother`, драйвер IPP Everywhere. + +Установка: `sudo apt-get install --no-install-recommends cups cups-client cups-filters cups-ipp-utils`, +затем `sudo sh stacks/rpi-print/setup.sh` и +`sudo install -o root -g root -m 755 stacks/rpi-print/home-print /usr/local/bin/home-print`. + +Печать PDF/PNG/JPEG: `lp -d home-brother -o media=A4 -o fit-to-page /path/to/file`. +Двусторонняя: добавить `-o sides=two-sided-long-edge`. +Очередь: `lpstat -W not-completed -o home-brother`; отмена: `cancel `. +Word DOCX перед печатью нужно преобразовать в PDF: напрямую CUPS его не понимает. + +⚠️ hostname через mDNS позволяет пережить смену DHCP-адреса; если принтер +не объявляет mDNS или выключен, отправка упадёт. Политика `abort-job` исключает +неожиданную автоматическую печать давно забытых заданий после включения. +Очередь не публикуется в сеть (`printer-is-shared=false`); CUPS остаётся локальным. + +Отправлять на бумагу только по прямой просьбе пользователя. Сообщение о принятии +задания означает приём в очередь; итог следует проверить через `lpstat`. diff --git a/stacks/rpi-print/home-print b/stacks/rpi-print/home-print new file mode 100644 index 0000000..8765902 --- /dev/null +++ b/stacks/rpi-print/home-print @@ -0,0 +1,25 @@ +#!/bin/sh +# Usage: home-print status | home-print [--duplex] FILE.pdf|FILE.png|FILE.jpg +set -eu +printer=home-brother +if [ "${1:-}" = status ]; then + lpstat -p "$printer" + lpstat -W not-completed -o "$printer" + exit +fi +sides=one-sided +if [ "${1:-}" = --duplex ]; then + sides=two-sided-long-edge + shift +fi +if [ "$#" -ne 1 ] || [ ! -f "$1" ]; then + echo 'Укажите один существующий PDF/PNG/JPEG-файл' >&2 + exit 2 +fi +case "$1" in + *.pdf|*.PDF|*.png|*.PNG|*.jpg|*.JPG|*.jpeg|*.JPEG) ;; + *) echo 'Поддерживаются PDF/PNG/JPEG; Word сначала преобразуйте в PDF' >&2; exit 2 ;; +esac +# Absolute path prevents a filename from becoming an lp option. +file=$(realpath -- "$1") +exec lp -d "$printer" -n 1 -o media=A4 -o fit-to-page -o sides="$sides" "$file" diff --git a/stacks/rpi-print/setup.sh b/stacks/rpi-print/setup.sh new file mode 100644 index 0000000..2d880d9 --- /dev/null +++ b/stacks/rpi-print/setup.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# Run as root after installing cups cups-client cups-filters cups-ipp-utils. +set -eu +systemctl enable --now cups.service +lpadmin -p home-brother -E -v ipp://BRW2C9C58C1EEA7.local:631/ipp/print -m everywhere \ + -D 'Brother DCP-L2620DW' -L 'Дом' \ + -o printer-is-shared=false -o PageSize=A4 -o sides-default=one-sided \ + -o printer-error-policy=abort-job +lpadmin -d home-brother +lpstat -p home-brother -v