Stampa diretta su stampanti d'ufficio anche con Odoo in cloud e cliente dietro NAT.
Niente IP pubblico, niente port forwarding, niente VPN da configurare. Un piccolo servizio Python
(l'Agent) gira sulla macchina del cliente, parla con il CUPS locale e scambia i job di stampa
con Odoo attraverso un canale uscente WebSocket/HTTP.
Funzionalità principali
- Stampa PDF + ZPL nativi — funziona con i report QWeb e con
printer_zpl2 per le etichette
Zebra. Raw bytes byte-per-byte sulla coda.
- Tunnel web UI CUPS — bottone Open CUPS Admin sul form del server: la pagina admin del CUPS
remoto si apre nel tuo browser passando dall'agent. Aggiungere stampanti, gestire code, ispezionare job senza SSH
né VPN. Le credenziali admin restano sulla LAN del cliente, non vengono mai memorizzate da Odoo.
- Enrollment zero-touch — generi un token di installazione su Odoo, il cliente lancia una sola riga di
comando, l'agent si registra automaticamente e crea i record
printing.printer dalle code CUPS
riportate.
- Multi-istanza — un solo binario sul cliente può servire più Odoo (utile per service
provider che gestiscono più tenant da una sola macchina LAN).
- Self-update —
--update --from-github scarica l'ultima AppImage dal repository pubblico
e sostituisce atomicamente il binario in /opt, riavviando i servizi systemd.
- Multi-architettura — AppImage pronti per x86_64, aarch64 (Raspberry Pi 4/5), armhf (Raspberry Pi 2/3).
Bundled
libcups, glibc ≥ 2.31. Static type-2 runtime — non richiede libfuse2
sul target.
- Retry automatico — i job falliti vengono ritentati ogni minuto fino a 3 volte. Tutto persistito in
printing.job con last_error visibile.
- Job state realtime — stato CUPS mappato su
available / printing /
unavailable. Heartbeat ogni 30 s con campo last_seen per monitoring.
- Push, Pull o Direct — tre modalità di trasporto selezionabili: WebSocket persistente
(default, copre cron e queue job), browser-relay (per workstation singola), HTTP diretto (quando c'è
già VPN o IP statico).