[2026-08-31] cups-splix mDNS/AirPrint fix: Android print service sees Samsung CLX-216x

This commit is contained in:
Alexey Martemyanov
2026-08-31 13:55:02 +06:00
parent 8e512eefd1
commit 2ae4de034a
2 changed files with 23 additions and 1 deletions
+23
View File
@@ -417,6 +417,29 @@ nc -z 192.168.2.197 631 # проверить порт наружу
- Принтер: `usb://Samsung/CLX-216x%20Series?serial=9566BAGQ213134Z.&interface=1` (USB ID `04e8:3425` Samsung CLX-216x).
- Порт 631: открыт наружу после подъёма.
### ✅ mDNS/AirPrint анонс принтера — включён 2026-08-31 (Android print service видит принтер)
Проблема: Android **штатная служба печати** (в отличие от Samsung Mobile Print, который ходит прямо по IP) ищет принтер **только через mDNS/Bonjour** (`_ipp._tcp.local`). CUPS не анонсировал: в контейнере не было `avahi-daemon`, а `printer-dns-sd-name` в IPP был `no-value` → Android помечал принтер «недоступен», даже добавленный вручную по IP.
**Решение (выполнено):** пересобрали cups-splix — теперь запускает `dbus-daemon` + `avahi-daemon` рядом с cupsd через `entrypoint.sh`, и в `cupsd.conf` включено `Browsing On` + `BrowseLocalProtocols dnssd`. После этого CUPS регистрирует принтер в avahi → mDNS-анонс с **`mopria-certified=1.3`** на IPv4 `192.168.2.197` физического интерфейса `enp3s0`. Android (Mopria) теперь находит принтер сам в локальной сети.
**Что изменилось в конфиге** (папка `/mnt/RED_2TB/docker/cups/`):
- `Dockerfile`: добавлен `avahi-daemon` в apt, написан `entrypoint.sh`, `ENTRYPOINT` вместо `CMD` (`.old` образ сохранён как `cups-splix-old`).
- `entrypoint.sh`: стартует `dbus-daemon --system`, затем `avahi-daemon --no-drop-root`, затем `exec cupsd -f`.
- `data/cupsd.conf`: `Browsing Off``Browsing On` + добавлена строка `BrowseLocalProtocols dnssd` (бэкап `cupsd.conf.pre-avahi`).
**⚠️ Важный питфолл:** после правки конфига НЕ использовать `docker restart cups-splix` — он убивает avahi-daemon (defunct), перед новым подъёмом обязателен **`docker stop cups-splix && docker rm cups-splix && docker compose up -d`** (полный пересоздание, чтобы entrypoint перевыполнился с нуля).
**Проверка анонса:**
```bash
docker exec cups-splix sh -c "timeout 6 avahi-browse -rt -p _ipp._tcp | grep ';enp3s0;IPv4;'"
# должно показать: ... Samsung\032CLX-216x... truenas.local;192.168.2.197;631; "mopria-certified=1.3" ...
```
**Бэкап конфига (2026-08-31):** `/mnt/RED_2TB/docker/cups/backup_20260831-003619.tar.gz` (md5 `0e303a6a57ae767d1e14cd72c8039fe4`) — tar из /etc/cups, /var/spool/cups, /var/cache/cups.
> Диагностика и полное объяснение: [[mac-print-shared-services]]
> ⚠️ **2026-08-31: топология изменена.** TrueNAS больше НЕ в локальной сети (только публичный DNS `mallexxx.duckdns.org`). `192.168.2.197` из телефона/внешки недостижим, и **снаружи `mallexxx.duckdns.org:631` закрыт**. Подтверждено SSH: `cups-splix` **Up**, принтер idle/enabled/accepting, CUPS слушает `0.0.0.0:631`, но наружу не проброшен. → Samsung Mobile Print (app) печатает (у него адрес вписан вручную/закэширован), а штатная Android print service с `ipp://192.168.2.197:631/...` показывает «недоступен» (ожидаемо, локального пути нет). **Дополнительно (2026-08-31):** корень «недоступен» в штатной службе — не только сеть, но и **отсутствие mDNS/AirPrint-анонса** (avahi-daemon не запущен; `printer-dns-sd-name = no-value`). План исправления (новый Dockerfile + entrypoint с avahi, бэкап, образ собран) — в [[mac-print-shared-services]] раздел «PLAN + ПРАВКИ»; пересоздание контейнера ждёт OK Alex. Подробный разбор: [[mac-print-shared-services]].
## Связанные заметки