2026-06-22 11:35:05 +02:00
2026-06-21 23:07:20 +02:00
2026-06-21 23:07:20 +02:00
2026-06-21 23:07:20 +02:00
2026-06-22 11:35:05 +02:00
2026-06-21 23:07:20 +02:00
2026-06-21 23:07:20 +02:00

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, Halbschnitt ein/aus, Kettendruck, Schnittmarke, Kettendruck 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/usb
  • privileged: 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.

  1. Name: ptouch-web
  2. Repository: python:3.12-alpine
  3. Network Type: bridge
  4. Privileged: On
  5. Post Arguments: sh /srv/ptouch-web/start.sh
  6. Console shell command ist egal
  7. Bei Command oder Entrypoint, falls sichtbar:
    • Command: leer lassen, wenn Post Arguments gesetzt ist
    • Entrypoint: leer
  8. Port hinzufuegen:
    • Container Port: 8080
    • Host Port: 8080
    • Protocol: TCP
  9. Path hinzufuegen fuer die App:
    • Container Path: /srv/ptouch-web
    • Host Path: /mnt/user/appdata/ptouch-web
    • Access Mode: Read/Write
  10. Path hinzufuegen:
  • Container Path: /data/labels
  • Host Path: /mnt/user/appdata/ptouch-web/labels
  • Access Mode: Read/Write
  1. Path hinzufuegen fuer USB:
  • Container Path: /dev/bus/usb
  • Host Path: /dev/bus/usb
  • Access Mode: Read/Write
  1. Variablen hinzufuegen:
  • APP_DIR=/srv/ptouch-web
  • FLASK_APP=app.app
  • PRINT_ENABLED=1
  • PRINT_COMMAND=ptouch-print --image {image}
  • LABEL_DIR=/data/labels
  • LABEL_DPI=180

Wichtig: /srv/ptouch-web muss den Inhalt dieses Projektordners enthalten, also direkt app/, start.sh und requirements.txt.

Konfiguration

Umgebungsvariablen:

  • PRINT_ENABLED=1 druckt wirklich. Mit 0 wird nur ein PNG erzeugt.
  • PRINT_COMMAND=ptouch-print --image {image} ist das Druckkommando.
  • LABEL_DPI=180 passt zum PT-P700.
  • LABEL_DIR=/data/labels speichert erzeugte PNG-Dateien.

Wenn ptouch-print auf deinem Setup andere Optionen braucht, nur PRINT_COMMAND anpassen. Der Platzhalter {image} wird von der App ersetzt. Bei Halbschnitt: Ein nutzt die App fuer mehrere Kopien ptouch-print --copies und erzwingt automatisch Kettendruck, damit der Drucker Kopiengrenzen fuer Halbschnitte kennt und nicht nach jeder Kopie voll schneidet. Bei Halbschnitt: Aus oder wenn --copies nicht verfuegbar ist, werden Kopien als ein langes Druckbild gerendert. Fuer Schnittoptionen kannst du optional {cut_args} im Kommando platzieren; ohne Platzhalter haengt die App die Schnittargumente automatisch an.

Hinweis: Der PT-P700-Halbschnitt ist in upstream ptouch-print nicht als CLI-Option vorhanden. Dieses Projekt patcht ptouch-print beim Containerstart um --halfcut und --no-halfcut.

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/usb im 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: On starten.
  • /dev/bus/usb als Pfad Read/Write nach /dev/bus/usb mounten.
  • Keine zusaetzliche Device-Zeile nur fuer /dev/usb/lp0 verwenden.
  • Auf dem Unraid-Host pruefen, ob usblp geladen ist: lsmod | grep usblp
  • Falls usblp geladen 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:

  1. Im Container-Terminal pruefen:

    lsusb
    ls -l /dev/bus/usb/001/020
    ptouch-print --info
    

    Die Bus-/Device-Nummer muss zur Ausgabe von lsusb passen.

  2. 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
    
  3. Unraid-Container-Konfiguration pruefen:

    • Privileged: On
    • /dev/bus/usb als Path, nicht nur als Datei, nach /dev/bus/usb
    • Access Mode Read/Write
    • keine extra /dev/usb/lp0-Device-Zuordnung
  4. Wenn die Device-Nummer nach USB-Neustecken anders ist, die Befehle mit der neuen Nummer wiederholen.

S
Description
No description provided
Readme
294 KiB
Languages
JavaScript 34.9%
Python 34.2%
HTML 15.1%
CSS 11.6%
Shell 3%
Other 1.2%