rpi: настроить домашнюю печать на Brother DCP-L2620DW

This commit is contained in:
2026-10-11 15:18:56 +03:00
parent 4965f70299
commit 629b11f03f
4 changed files with 65 additions and 0 deletions
+7
View File
@@ -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] <PDF/PNG/JPEG>` — одна копия, 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`).
+23
View File
@@ -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 <job-id>`.
Word DOCX перед печатью нужно преобразовать в PDF: напрямую CUPS его не понимает.
⚠️ hostname через mDNS позволяет пережить смену DHCP-адреса; если принтер
не объявляет mDNS или выключен, отправка упадёт. Политика `abort-job` исключает
неожиданную автоматическую печать давно забытых заданий после включения.
Очередь не публикуется в сеть (`printer-is-shared=false`); CUPS остаётся локальным.
Отправлять на бумагу только по прямой просьбе пользователя. Сообщение о принятии
задания означает приём в очередь; итог следует проверить через `lpstat`.
+25
View File
@@ -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"
+10
View File
@@ -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