14 KiB
type, topic, tags, created
| type | topic | tags | created | |||||
|---|---|---|---|---|---|---|---|---|
| tech |
|
2026-08-26 |
Печать и общие сервисы (Mac + сеть)
Проверка службы печати 2026-08-26: «не видит принтер с телефона».
Состояние на момент проверки
На Mac (admin, macOS 26.6.1, arm64) в системе зарегистрированы два принтера:
| Принтер | Способ подключения | Статус |
|---|---|---|
| Samsung CLX-216x | Сетевой ipp://192.168.2.197/printers/Samsung_CLX-216x_Series, драйвер Generic PostScript |
не pингуется в текущей сети |
| Samsung M2020 Series (SEC84251974A6B3) | AirPrint dnssd://…_ipp._tcp.local., дефолтный, PPD Samsung M2020 Series-AirPrint |
не отвечает по сети |
Системный дефолт: Samsung_M2020_Series__SEC84251974A6B3_ (idle, enabled 2026-07-29).
Ключевые находки
- CUPS слушает только локально: в
/etc/cups/cupsd.conf→Listen localhost:631+Listen /private/var/run/cupsd. Наружу (по сети, для AirPrint) служба печати НЕ отдаётся. - Шеринг печати выключен (
SharePrintersв cupsd.conf закомментирован/неактивен; вsystem_profilerоба принтераShared: No,System Printer Sharing: No). - Порт 631 наружу закрыт:
nc -z 192.168.2.197 631→ closed. - Сеть Мака —
192.168.6.x(адрес192.168.6.173, шлюз192.168.6.1). Принтер прописан в подсети192.168.2.x.
⚠️ Важное наблюдение (пересечение с TrueNAS)
Адрес 192.168.2.197 — это TrueNAS (truenas_admin, SSH через mallexxx.duckdns.org), НЕ сам принтер. Samsung CLX-216x физически подключён к TrueNAS (USB) и печатается через docker-контейнер cups-splix (драйвер splix). Запись ipp://192.168.2.197/printers/Samsung_CLX-216x_Series в системе Мака — результат обнаружения расшаренной печати TrueNAS на этом адресе.
✅ НаСТОЯЩИЙ ДИАГНОЗ (2026-08-26, подтверждено SSH на TrueNAS)
Корень проблемы: cups-splix контейнер НЕ запущен на TrueNAS.
- На TrueNAS нет ни одной работающей службы печати:
lpstat/cupsdв системе не установлены, порт 631 закрыт (и локально, и снаружи). - Ни одного docker-контейнера по печати в
docker psнет (cup/sprint/ipp — пусто). Официальный список контейнеров (docker ps -a): immich(redis/server/postgres), modbus-bridge, mbusd, zigbee2mqtt, webdav, vless-proxy, hermes-taiga, portainer(-mcp), homeassistant, caddy, watchtower, transmission, syncthing, ser2net, rclone, nodered, mosquitto, library, inpxer, inpx-web, gitea, filebrowser.cups-splixотсутствует. - Образ
cups-splixне собран (docker images | grep cups|splix→ пусто).
Конфиг cups-splix (цел, на месте)
Папка /mnt/RED_2TB/docker/cups/: Dockerfile, docker-compose.yml, docker build.txt, data/, cache/, spool/, uld/.
docker-compose.yml:
services:
cups-splix:
image: cups-splix
container_name: cups-splix
command: ["/usr/sbin/cupsd", "-f"]
network_mode: host
privileged: true
volumes:
- /dev/bus/usb:/dev/bus/usb
- /mnt/RED_2TB/docker/cups/data:/etc/cups
- /mnt/RED_2TB/docker/cups/cache:/var/cache/cups
- /mnt/RED_2TB/docker/cups/spool:/var/spool/cups
restart: unless-stopped
Dockerfile (debian:12-slim): ставит cups-daemon cups-client cups-common printer-driver-splix avahi-utils dbus usbutils nano, пользователь cupsadmin:admin (в группе lpadmin), EXPOSE 631, CMD cupsd -f.
Как поднять (из доки, раздел «Сборка»):
cd /mnt/RED_2TB/docker/cups/
docker build -t cups-splix .
docker compose up -d # или docker run из build.txt
# проверить: порт 631 открылся, принтер подцепился
Почему выпал
.ix-apps вызов docker data-root при пересоздании пула НЕ переносился → образы (=кеш) потеряны, перекачиваются заново. cups-splix — локальная сборка, она не «перекачается», нужно пересобрать. Конфиги целы.
✅ РЕЗОЛЮЦИЯ (2026-08-26, выполнено)
cups-splix поднят, печать восстановлена. Шаги, фактически выполненные на TrueNAS:
cd /mnt/RED_2TB/docker/cups
docker build -t cups-splix . # образ собран успешно (~225s), splix установлен
docker compose up -d # контейнер запущен
docker exec cups-splix lpstat -p -d # printer Samsung_CLX-216x_Series ... idle, enabled
docker exec cups-splix lpstat -a # ... accepting requests
nc -z 192.168.2.197 631 # 631 OPEN снаружи
- Принтер подключён по USB к TrueNAS:
usb://Samsung/CLX-216x%20Series?serial=9566BAGQ213134Z.&interface=1(Bus 002 Device 008,04e8:3425Samsung CLX-216x). - CUPS-конфиг сохранился в
/mnt/RED_2TB/docker/cups/data(это/etc/cups) → принтер прописан и подцепился после рестарта сам. - Образ собрался без ошибок → раньше его просто не запускали собирать (не поломка Dockerfile), а потеряли при восстановлении стека вместе с
.ix-apps. - Порт 631 открыт наружу → печать доступна по сети на
192.168.2.197:631.
Условие для телефона: телефон должен быть в сети 192.168.2.x (той же, что и TrueNAS), чтобы увидеть принтер. Если телефон в другой подсети (напр. 192.168.6.x) — это сетевой вопрос, не печатный.
Полный рецепт на будущее продублирован в truenas-infrastructure.md → раздел «Печать / cups-splix».
⚠️ ТОПОЛОГИЯ ИЗМЕНЕНА (2026-08-31) — TrueNAS больше НЕ в локальной сети
TrueNAS ушла из локальной сети и доступна только через публичный DNS mallexxx.duckdns.org (внешка 90.189.160.148). Локальный 192.168.2.197 физически недостижим (пинг 100% потеря) — TrueNAS не в 192.168.2.x и не в сети телефона.
Подтверждено SSH на TrueNAS (2026-08-31):
cups-splixUp (4 days), принтерSamsung_CLX-216x_Seriesidle / enabled / accepting requests.- Принтер подключён по USB:
usb://Samsung/CLX-216x%20Series?serial=9566BAGQ213134Z.&interface=1. - CUPS слушает
0.0.0.0:631(все интерфейсы,network_mode: host). - CUPS config:
Port 631,WebInterface Yes,ServerAlias *(разделcupsd.conf). - Снаружи
mallexxx.duckdns.org:631— CLOSED (наружу не проброшен).
Реальная картина печати:
- Samsung Mobile Print (app) — печатает. У приложения адрес вписан вручную/закэширован (не обязательно
192.168.2.197). - Штатная Android print service — добавлял вручную
ipp://192.168.2.197:631/printers/Samsung_CLX-216x_Series→ «недоступен». Ожидаемо: TrueNAS ушла из локальной сети, а адрес192.168.2.197из телефона недостижим.
Вывод: «недоступен» в штатной службе — НЕ баг настройки и НЕ проблема порта. Это прямое следствие того, что CUPS-хост (TrueNAS) физически вне сети телефона: локального пути нет, а публичный mallexxx.duckdns.org:631 закрыт. Android-штатная служба не умеет удалённый IPP через интернет без открытого наружу порта.
ОТКРЫТЫЙ ВОПРОС (не разобран, нет доступа к настройкам приложения): по какому именно адресу Samsung Mobile Print реально шлёт печать, раз 631 снаружи закрыт. Гипотезы: (1) приложение кэширует соединение с времён, когда TrueNAS была локально; (2) используется другой публичный путь (реверс-прокси Caddy на ином порту/HTTPS), не записанный в доках. Для полного разбора нужен адрес/хост из настроек принтера внутри Samsung Mobile Print. Отмечено: лог CUPS access_log показывает, что практически вся печать шла с IP 192.168.2.141 (26-30 авг, POST /printers/... Print-Job → 200 successful-ok) — т.е. Samsung Mobile Print ходил по локальному IP, когда TrueNAS ещё была в сети. Похоже, приложение реально кэшировало локальное соединение.
✅ НАСТОЯЩИЙ МЕХАНИЗМ «недоступен» в Android print service (2026-08-31, подтверждено ipptool)
Дополнительная проверка внутри контейнера (ipptool -tv → CUPS) дала ключевой факт:
printer-dns-sd-name = no-value- В контейнере cups-splix НЕ запущен
avahi-daemon(процессы: толькоcupsd;ps aux | grep avahi— пусто). Пакетыdbus+avahi-utilsв образе есть, ноavahi-daemonне установлен и не стартует, а CMD — толькоcupsd -f.
Механика: Samsung Mobile Print — вендорское приложение, ходит на CUPS напрямую по IPP (POST Print-Job по IP) → работает даже без mDNS. Android штатная служба печати (Mopria/Default) даже при ручном добавлении по IP затем делает mDNS/AirPrint-проверку принтера (_ipp._tcp / _ipps._tcp.local), чтобы получить printer-uuid и capabilities. Если mDNS-анонса нет (printer-dns-sd-name = no-value, avahi не запущен) — Android помечает принтер «недоступен», даже если IPP по-IP физически отвечает. Полный ответ CUPS на Get-Printer-Attributes — successful-ok [PASS], принтер idle/accepting/shared — подтверждает: CUPS здоров, всё дело в отсутствии mDNS-анонса.
PLAN + ПРАВКИ (2026-08-31, частично выполнено): поднять mDNS через avahi-daemon
Место: папка /mnt/RED_2TB/docker/cups/.
Выполнено:
- ✅ Бэкап конфига:
/mnt/RED_2TB/docker/cups/backup_20260831-003619.tar.gz(создан внутри контейнераtar→docker cp; md50e303a6a57ae767d1e14cd72c8039fe4). Внутри:/etc/cups,/var/spool/cups,/var/cache/cups. Дубль в/tmp/cups_backup_<ts>.tar.gzна хосте. - ✅ Новый
Dockerfile(в cups/, заменил старый): в apt добавленavahi-daemon+procps; убранuseradd-ку только не трогал; добавленCOPY entrypoint.sh /entrypoint.sh;ENTRYPOINT ["/entrypoint.sh"]вместо пустогоCMD ["cupsd","-f"]. - ✅
entrypoint.sh(в cups/): стартуетdbus-daemon --system --fork, затемavahi-daemon --no-drop-root --syslogв фоне, затемexec cupsd -f. - ✅ Образ
cups-splix-newсобран на TrueNAS (docker build -t cups-splix-new ., ~108s, без ошибок).
НЕ выполнено (ждёт OK Alex на пересоздание работающего контейнера):
- ⏳
docker stop cups-splix && docker rm cups-splix(данные в volumes на хостеdata/cache/spoolНЕ теряются) - ⏳
docker tag cups-splix-new cups-splix && docker rmi <старый> - ⏳
docker compose up -d→ проверка:ps aux | grep avahi,ipptoolдаётprinter-dns-sd-nameнеno-value,ippfindнаходит принтер по mDNS.
Pitfall (обнаружен): docker-compose.yml в cups/ — -rw------- root:root (600), truenas_admin перезаписать не может (Permission denied) → compose НЕ менял. Это ок: ENTRYPOINT переопределяет command, лишний cupsd не стартует (скрипт сам делает exec cupsd -f, аргументы $@ игнорирует). Если потребуется убрать command из compose — править через root/UI.
Pitfall (бэкап): data/ cache/ spool/ под TrueNAS — drwx------ root:lp (0700), truenas_admin их напрямую не читает → бэкап делать ТОЛЬКО через контейнер (docker exec ... tar → docker cp), либо через /admin (root).