- Python 50.1%
- JavaScript 40.7%
- CSS 6%
- HTML 3.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Vermeidet den Namenskonflikt mit /usr/bin/ptouch-print aus dem Debian-Paket ptouch-print. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
| ptouch | ||
| .gitignore | ||
| LICENSE | ||
| ptouch-gui.png | ||
| ptouch-label | ||
| ptouch-web | ||
| ptouch-web.service | ||
| ptouch.desktop | ||
| README.md | ||
Brother P-touch Label-Editor (PT-P700 und verwandte Modelle)
Weboberfläche zum Gestalten und Drucken von Labels unter Linux. Texte, QR-Codes, Linien, Rechtecke und Bilder lassen sich frei auf dem Band platzieren und mischen. Die Vorschau zeigt pixelgenau das spätere Druckbild (180 dpi).
Alles ist in Python geschrieben, auch der Druckertreiber. Das frühere C-Programm
ptouch-write und die GTK-Oberfläche werden nicht mehr gebraucht.
Installation
sudo apt install python3-pil python3-qrcode fontconfig
git clone git@git.pv2car.com:pv2car/p-touch-print.git
cd p-touch-print
sudo ln -s "$PWD/ptouch-web" "$PWD/ptouch-label" /usr/local/bin/
Der Drucker wird über den Kernel-Treiber usblp angesprochen (/dev/usb/lpN).
Der Benutzer muss dafür in der Gruppe lp sein (sudo adduser $USER lp), sudo
ist nicht nötig. Welches lpN der P-touch ist, wird automatisch über die USB-IDs
erkannt (andere Labeldrucker wie z. B. ein DYMO werden ignoriert). Alternativ kann
das Gerät mit PTOUCH_DEVICE=/dev/usb/lp1 festgelegt werden.
Mehrere Rechner (z. B. Desktop und Notebook)
Auf jedem Rechner klonen, siehe „Einrichtung auf einem weiteren Rechner“ unten. Beim Start macht ptouch-web automatisch ein
git pull --ff-only, damit immer die aktuelle Version läuft. Das passiert ohne
Rückfragen und mit Zeitlimit; ohne Netz oder bei lokalen Änderungen wird das Update
übersprungen. Abschalten lässt es sich mit --no-update oder PTOUCH_NO_UPDATE=1.
Die Vorlagen liegen in Nextcloud und sind damit auf allen Rechnern gleich. Reihenfolge, in der der Ordner bestimmt wird:
ptouch-web --templates DIR- Umgebungsvariable
PTOUCH_TEMPLATES "templates_dir"in~/.config/ptouch/config.json~/Nextcloud/Tools/P-Touch/Vorlagen(oder~/NextCloud/…), wenn ein Nextcloud-Ordner existiert- sonst
~/.config/ptouch/templates
Vorlagen, die vorher lokal unter ~/.config/ptouch/templates lagen, werden beim
ersten Start in den Nextcloud-Ordner kopiert. Dabei wird nichts gelöscht.
Das Repository selbst gehört nicht in Nextcloud: Der Client überträgt keine
Ausführrechte und kann den .git-Ordner beschädigen.
Einrichtung auf einem weiteren Rechner (z. B. Notebook)
1. Git-Zugang. Forgejo nimmt Git-SSH auf Port 5022 an. In ~/.ssh/config:
Host git.pv2car.com
Port 5022
Den öffentlichen Schlüssel (~/.ssh/id_*.pub) in Forgejo unter
Einstellungen → SSH-Schlüssel hinterlegen und prüfen:
git ls-remote git@git.pv2car.com:pv2car/p-touch-print.git
2. Pakete und Druckerrechte (danach einmal ab- und wieder anmelden):
sudo apt install git python3-pil python3-qrcode fontconfig
sudo adduser $USER lp
3. Klonen, auf denselben Pfad wie auf den anderen Rechnern, darauf ist die Dienstdatei eingestellt:
mkdir -p ~/src
git clone git@git.pv2car.com:pv2car/p-touch-print.git ~/src/p-touch-print
4. Dienst einrichten:
mkdir -p ~/.config/systemd/user
cp ~/src/p-touch-print/ptouch-web.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now ptouch-web
journalctl --user -u ptouch-web -n 5 -o cat
Im Log sollten drei Zeilen stehen: „Aktuell“, „Vorlagen: …/Nextcloud/Tools/P-Touch/Vorlagen“ und „läuft auf http://localhost:8002/“.
5. Starter im Anwendungsmenü („P-touch Labels“, öffnet http://localhost:8002/ im Browser):
mkdir -p ~/.local/share/applications ~/.local/share/icons/hicolor/256x256/apps
cp ~/src/p-touch-print/ptouch.desktop ~/.local/share/applications/
cp ~/src/p-touch-print/ptouch-gui.png ~/.local/share/icons/hicolor/256x256/apps/
6. Öffnen: über den Starter oder direkt http://localhost:8002/. Die Vorlagen sind über Nextcloud schon da.
Worauf man achten sollte:
- Anderer Nextcloud-Ordner: Erkannt werden
~/Nextcloudund~/NextCloud. Liegt er woanders,~/.config/ptouch/config.jsonanlegen:{"templates_dir": "/pfad/zu/Nextcloud/Tools/P-Touch/Vorlagen"} - Update im Dienst: Das klappt nur, wenn der SSH-Schlüssel ohne Passwortabfrage
nutzbar ist. Sonst meldet das Log „Update übersprungen“, der Dienst startet trotzdem.
Dann die neue Version mit
git -C ~/src/p-touch-print pullholen und den Dienst mitsystemctl --user restart ptouch-webneu starten. - Drucker: Gedruckt wird auf dem P-touch, der per USB an diesem Rechner hängt. Ohne Drucker kann man Labels gestalten und als Vorlage speichern und sie dann am Rechner mit Drucker ausdrucken.
Unterstützte Drucker
P-touch-Modelle mit 24-mm-Druckkopf (128 Pins, 180 dpi) und Brother-Rasterprotokoll,
Anschluss per USB. Die Liste zeigt ptouch-label --models:
| USB-ID | Modell | Status |
|---|---|---|
| 04f9:2061 | PT-P700 | getestet |
| 04f9:205e | PT-H500 | ungetestet |
| 04f9:205f | PT-E500 | ungetestet |
| 04f9:2060 | PT-E550W | ungetestet |
| 04f9:2062 | PT-P750W | ungetestet |
| 04f9:2074 | PT-D600 | ungetestet |
| 04f9:20af | PT-P710BT | ungetestet, nur über USB |
Meldet sich ein P700/P750W im P-Lite-Modus (USB-ID 2064/2065, „Editor Lite“ an), erscheint er als USB-Speicher und kann nicht drucken. Die Oberfläche weist dann darauf hin.
Nicht unterstützt: 36-mm-Modelle (PT-P900/P950NW, PT-P910BT, PT-E800/E850; anderer
Kopf und 360 dpi) und reine Bluetooth-Geräte wie der PT-P300BT. Für andere Modelle
mit 24-mm-Kopf kann das Gerät mit PTOUCH_DEVICE=/dev/usb/lpN erzwungen werden.
Wer ein weiteres Modell erfolgreich testet, trägt es in MODELS in
ptouch/printer.py ein.
Weboberfläche
ptouch-web # http://localhost:8002/
ptouch-web --open # zusätzlich Browser öffnen (läuft der Server schon, wird nur der Browser geöffnet)
ptouch-web --host 0.0.0.0 --port 8002 # im LAN erreichbar
Als Dienst im Hintergrund (startet beim Anmelden, inkl. automatischem Update;
erwartet das Repository unter ~/src/p-touch-print, sonst ExecStart anpassen):
cp ptouch-web.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now ptouch-web
journalctl --user -u ptouch-web # Log
systemctl --user restart ptouch-web # neu starten, z. B. um ein Update zu holen
Funktionen:
- Elemente: Text (mehrzeilig, beliebige installierte Schrift, automatische Größe passend zur Bandhöhe, Drehung, invertiert), QR-Code, Linie, Rechteck, Bild (Schwellwert oder Rasterung)
- Elemente mit der Maus verschieben, Größe über den Anfasser rechts unten ändern, Feinjustage mit den Pfeiltasten, Ausrichtung oben/mitte/unten
- Bandbreite automatisch vom Drucker oder fest, Länge automatisch oder fest, Rahmen, ganzes Label invertieren
- Mehrere Exemplare mit fortlaufender Nummer: Platzhalter
{n},{n:3}(001, 002 …),{date}– funktioniert in Texten und QR-Codes - Serie aus Textdatei: jede Zeile wird ein Label. Im Layout steht
{line}für die Zeile, z. B. ein gemeinsames Logo plus Text-Element{line}. Mit „Größe an Bandhöhe anpassen“ bekommen alle Labels der Serie dieselbe Schriftgröße. Ein\nin einer Zeile erzeugt einen Zeilenumbruch. Die Liste lässt sich auch direkt in der Oberfläche bearbeiten, und die Vorschau kann durch die Labels blättern. - Schneiden vorher/nachher (ohne „nachher“ = Kettendruck)
- Vorlagen (in Nextcloud, siehe oben), Export/Import als JSON, Druckbild als PNG
- Rückgängig/Wiederholen, das aktuelle Layout bleibt im Browser erhalten
QR-Codes
Bedruckbare Höhe je Band (laut Brother-Doku): 3,5 mm = 24 px, 6 mm = 32 px, 9 mm = 50 px, 12 mm = 70 px, 18 mm = 112 px, 24 mm = 128 px. Die alte GTK-Oberfläche ging bei 12 mm von 84 px (und bei 9 mm von 60 px) aus. Der QR-Code war dadurch höher, als der Drucker druckt: Oben und unten fehlten Zeilen, also auch Teile der Suchmuster, und der Code war nicht lesbar.
Jetzt werden QR-Codes immer mit ganzzahliger Modulgröße erzeugt, passen in den bedruckbaren Bereich und haben eine weiße Ruhezone (Standard 2 Module), auch auf invertierten Labels. Die Oberfläche warnt, wenn ein Code abgeschnitten wird, nur 1 px pro Modul hat (schlecht lesbar) oder ein anderes Element in der Ruhezone liegt.
Kommandozeile
ptouch-label bild.png # Bild drucken (max. 128 px hoch, wird zentriert)
ptouch-label bild.pbm --cut-before # vorher abschneiden
ptouch-label bild.pbm --chain # nachher nicht abschneiden
ptouch-label --status # Status / eingelegtes Band anzeigen
ptouch-label --models # unterstützte Modelle