6.2 KiB
P-Touch Web fuer Brother PT-P700
Kleine Flask-Weboberflaeche zum Erstellen von Etiketten und Drucken auf einem Brother P-Touch P700, der per USB an einem Unraid-Host haengt.
Die Weboberflaeche bildet die wichtigsten P-touch-Editor-Funktionen nach:
- Bandbreite, Laenge, Rand und Ausrichtung
- frei positionierbare Objekte auf einem Etiketten-Canvas
- Textfelder, Symbole, Rahmen/Formen, Linien und Tabellen
- Bildimport mit Schwarz/Weiss-Konvertierung
- QR-Code und Code128-Barcode
- Layout speichern/laden im Browser
- serverseitige Vorschau und Druck ueber
ptouch-print - vereinfachte Mobile-Webansicht unter
/mobile - Schnittmodi: normal, Kettendruck/Streifen, Schnittmarke und Streifen mit Schnittmarke
Wichtig fuer den PT-P700
Der PT-P700 muss im normalen Druckermodus laufen, nicht im "Editor Lite" Massenspeicher-Modus. Falls er im Host als USB-Laufwerk erscheint, Editor Lite am Geraet deaktivieren bzw. das Laufwerk auswerfen und den Drucker neu verbinden.
Wenn lsusb so etwas zeigt, ist der Drucker noch im falschen Modus:
Brother Industries, Ltd PT-P700 P-touch Label Printer RemovableDisk
Dann am PT-P700 die Editor Lite-Taste druecken, bis die Editor-Lite-LED aus ist. Danach USB kurz abziehen und wieder einstecken. Erst wenn der Drucker nicht mehr als RemovableDisk erscheint, kann ptouch-print drucken.
Der Container braucht Zugriff auf USB. In Unraid geht das am einfachsten mit:
/dev/bus/usb:/dev/bus/usbprivileged: true
Start lokal
docker compose up --build
Danach: http://localhost:8080
Mobile Ansicht: http://localhost:8080/mobile
Beim Dockerfile-Image startet der Container ueber /usr/local/bin/ptouch-web-start. Bei der Unraid-GUI-Variante ohne eigenes Image wird stattdessen sh /srv/ptouch-web/start.sh als Container-Befehl gesetzt.
Unraid Docker-GUI ohne eigenes Image
Diese Variante nutzt ein fertiges Alpine/Python-Basisimage und mountet dieses Projekt in den Container. start.sh installiert beim Start Flask, Pillow und baut ptouch-print.
Nachteil: Beim ersten Start braucht der Container Internet und der Start dauert laenger. Nach einem Container-Neuerstellen kann das erneut passieren.
Dateien auf Unraid ablegen:
/mnt/user/appdata/ptouch-web/app
/mnt/user/appdata/ptouch-web/start.sh
/mnt/user/appdata/ptouch-web/requirements.txt
/mnt/user/appdata/ptouch-web/labels
In Unraid: Docker -> Add Container.
Name:ptouch-webRepository:python:3.12-alpineNetwork Type:bridgePrivileged:OnPost Arguments:sh /srv/ptouch-web/start.shConsole shell commandist egal- Bei
CommandoderEntrypoint, falls sichtbar:Command: leer lassen, wennPost Argumentsgesetzt istEntrypoint: leer
- Port hinzufuegen:
- Container Port:
8080 - Host Port:
8080 - Protocol:
TCP
- Container Port:
- Path hinzufuegen fuer die App:
- Container Path:
/srv/ptouch-web - Host Path:
/mnt/user/appdata/ptouch-web - Access Mode:
Read/Write
- Container Path:
- Path hinzufuegen:
- Container Path:
/data/labels - Host Path:
/mnt/user/appdata/ptouch-web/labels - Access Mode:
Read/Write
- Path hinzufuegen fuer USB:
- Container Path:
/dev/bus/usb - Host Path:
/dev/bus/usb - Access Mode:
Read/Write
- Variablen hinzufuegen:
APP_DIR=/srv/ptouch-webFLASK_APP=app.appPRINT_ENABLED=1PRINT_COMMAND=ptouch-print --image {image}LABEL_DIR=/data/labelsLABEL_DPI=180
Wichtig: /srv/ptouch-web muss den Inhalt dieses Projektordners enthalten, also direkt app/, start.sh und requirements.txt.
Konfiguration
Umgebungsvariablen:
PRINT_ENABLED=1druckt wirklich. Mit0wird nur ein PNG erzeugt.PRINT_COMMAND=ptouch-print --image {image}ist das Druckkommando.LABEL_DPI=180passt zum PT-P700.LABEL_DIR=/data/labelsspeichert erzeugte PNG-Dateien.
Wenn ptouch-print auf deinem Setup andere Optionen braucht, nur PRINT_COMMAND anpassen. Der Platzhalter {image} wird von der App ersetzt. Fuer Schnittoptionen kannst du optional {cut_args} im Kommando platzieren; ohne Platzhalter haengt die App die Schnittargumente automatisch an.
Hinweis: Der PT-P700 unterstuetzt laut Brother Auto Cut und Kettendruck, aber keinen Halbschnitt. Die Option Kettendruck / Streifen rendert mehrere Kopien als ein langes Druckbild, damit keine Vollschnitte zwischen den Labels entstehen.
USB testen
Im laufenden Container:
ptouch-print --info
Wenn kein Drucker gefunden wird, zuerst pruefen:
- Ist Editor Lite deaktiviert?
- Sieht Unraid den Drucker unter USB?
- Ist
/dev/bus/usbim Container sichtbar? - Laeuft der Container privilegiert?
Wenn ptouch-print meldet:
PT-P700 (PLite Mode) found
ist Editor Lite noch aktiv. Das ist kein Containerproblem, sondern der USB-Modus des Druckers.
Wenn ptouch-print meldet:
PT-P700 found on USB bus ..., device ...
libusb_open error :LIBUSB_ERROR_IO
sieht der Container den Drucker, kann ihn aber nicht oeffnen. Dann pruefen:
- Container in Unraid wirklich mit
Privileged: Onstarten. /dev/bus/usbals PfadRead/Writenach/dev/bus/usbmounten.- Keine zusaetzliche Device-Zeile nur fuer
/dev/usb/lp0verwenden. - Auf dem Unraid-Host pruefen, ob
usblpgeladen ist:lsmod | grep usblp - Falls
usblpgeladen ist, testweise entladen:modprobe -r usblp - USB-Kabel danach kurz abziehen und wieder einstecken.
Wenn das Entladen von usblp hilft, sollte usblp auf dem Host dauerhaft fuer diesen Drucker deaktiviert werden, weil ptouch-print direkt ueber libusb druckt.
Wenn usblp entladen ist und LIBUSB_ERROR_IO trotzdem bleibt:
-
Im Container-Terminal pruefen:
lsusb ls -l /dev/bus/usb/001/020 ptouch-print --infoDie Bus-/Device-Nummer muss zur Ausgabe von
lsusbpassen. -
Auf dem Unraid-Host pruefen, ob ein Prozess das USB-Device offen hat:
fuser -v /dev/bus/usb/001/020 lsof /dev/bus/usb/001/020 2>/dev/null -
Unraid-Container-Konfiguration pruefen:
Privileged: On/dev/bus/usbalsPath, nicht nur als Datei, nach/dev/bus/usb- Access Mode
Read/Write - keine extra
/dev/usb/lp0-Device-Zuordnung
-
Wenn die Device-Nummer nach USB-Neustecken anders ist, die Befehle mit der neuen Nummer wiederholen.