Wir haben ein eigenes 11 Schritte Skript, dass einmalig auf jeden Mac ausgeführt werden muss. damit werden die Drucker autoamtisch hergestellt sobald diese verloren gehen.
#Drucker Wiederherstellungsskript und Deamon für automatische Wiederherstellung bei Verlust in 11 Schritten
# Tomedo möchte BRScript3, tatsächlich wird der CUPS benutzt aber als BRScript3 umgeschrieben also als solcher vorgegaukelt
# Druckerbezeichnung ist wie Druckernahmen in der Tomedodruckereinstellung vorgenommen wurden
# Die Codes sind für die jeweiligen Drucker analog, Voraussetzung ist, dass Drucker über Netzwerk über die IP erreicht werden können
# die IP Adressen müssen stabil sein, also nicht durch Neustart verändert werden können, IP muss also statisch sein
# im Skript wird der Druckername den Tomedo erwartet dem Drucker zugeordnet. Druckeridentifikation erfolgt über die IP
# das Skript funktioniert nicht mit lokal über USB-Adapter angebunden Drucker
#Für USB oder Parallel Drucker einen Printserver benutzen, wie z.B. Digitus parallel Printserver für Epson LQ 570+ PS2
# hier wird der tatsächliche 24 pin Treiber genutzt
#für configuration des Printservers ist eventuell Windows-PC notwendig wenn IP des Printservers nicht bekannt ist
# die IP des printservers ist die IP für den Drucker
#1. Schritt: Terminal starten
bash
#2. Schritt: Adminrechte
sudo -k; sudo -v
#3. Schritt: Script-Verzeichnis anlegen
sudo mkdir -p /Library/Scripts
#3. Schritt: Skript-Datei erstellen
sudo nano /Library/Scripts/druckerfix.sh
#Skriptdatei entsprechend den vorhandenen Druckern anpassen
# das Skript hier adressiert 3 Drucker: Brother HL-L5100DN, Brother HL-L6400DW, Epson LQ 570+ PS2 via Digitus parallel Printserver
#4. Schritt: in nano folgendes einfügen
#!/bin/bash
set -euo pipefail
if [ "$EUID" -ne 0 ]; then
echo "Dieses Skript muss als root laufen." >&2
exit 1
fi
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
LOG="/var/log/druckerfix.log"
mkdir -p "$(dirname "$LOG")"
exec >>"$LOG" 2>&1
/bin/echo "============================================================"
/bin/echo "Druckerfix gestartet: $(/bin/date)"
/bin/echo "============================================================"
log() { /bin/echo "[$(/bin/date '+%Y-%m-%d %H:%M:%S')] $*"; }
# -------------------------------------------------------------------
# Phase 0: printers.conf ggf. entsperren
# -------------------------------------------------------------------
if [ -f /etc/cups/printers.conf ]; then
log "Phase 0: printers.conf entsperren..."
/usr/bin/chflags nouchg /etc/cups/printers.conf 2>/dev/null || log "Hinweis: printers.conf war nicht gesperrt oder konnte nicht entsperrt werden."
else
log "Phase 0: /etc/cups/printers.conf existiert noch nicht."
fi
#für Brother HL-L5100DN, Druckername in Tomedo Brother 5100DN-Theke mit IP 192.168.1.120
# für eigenes Setup entsprechend anpassen
# -------------------------------------------------------------------
# Phase 1: Brother 5100
# -------------------------------------------------------------------
log "Phase 1: Brother 5100DN-Theke anlegen..."
PPD_DIR="/usr/local/share/ppd/druckfix"
/usr/bin/install -d -m 755 "$PPD_DIR"
P1_SYS="/Library/Printers/PPDs/Contents/Resources/Brother HL-L5100DN series CUPS.gz"
P1_TMP="$PPD_DIR/.tmp-HL5100.ppd"
P1_CUST="$PPD_DIR/Brother-HL-L5100DN-BRScript3.ppd"
if [ ! -f "$P1_SYS" ]; then
log "❌ System-PPD fehlt: $P1_SYS"
exit 2
fi
# --- WICHTIG: sauber neu bauen ---
log " - 5100 PPD neu bauen..."
/usr/bin/gzip -cd "$P1_SYS" > "$P1_TMP"
/usr/bin/awk 'BEGIN{done=0}
/^\*NickName:/ && !done {
sub(/^\*NickName: *"[^"]*"/, "*NickName: \"Brother HL-L5100DN series BR-Script3\"");
done=1
}
{ print }' "$P1_TMP" > "$P1_CUST"
/bin/rm -f "$P1_TMP"
/bin/chmod 644 "$P1_CUST"
# --- entscheidend: CUPS vorab sauber starten ---
log " - CUPS vorab neu starten..."
/bin/launchctl kickstart -k system/org.cups.cupsd 2>/dev/null || true
sleep 1
# --- Queue neu anlegen ---
log " - 5100 Queue neu anlegen..."
/usr/sbin/lpadmin -x 5100DN-Theke 2>/dev/null || true
/usr/sbin/lpadmin -p 5100DN-Theke -E \
-D "Brother HL-L5100DN series BR-Script3" \
-L "Theke" \
-v "ipp://192.168.1.120/ipp/print" \
-P "$P1_CUST"
# --- KRITISCH: kleine Pause ---
sleep 1
# --- dann erst aktivieren ---
/usr/sbin/cupsaccept 5100DN-Theke 2>/dev/null || log " WARN: cupsaccept 5100 fehlgeschlagen."
/usr/sbin/cupsenable 5100DN-Theke 2>/dev/null || log " WARN: cupsenable 5100 fehlgeschlagen."
# --- Prüfung ---
/usr/bin/lpstat -v | /usr/bin/grep 5100DN-Theke || log " ❌ 5100 wurde NICHT korrekt angelegt!"
#für Brother HL-L6400DW, Druckername in Tomedo Brother 6400DW-Buero mit IP 192.168.1.158
# für eigenes Setup entsprechend anpassen
# -------------------------------------------------------------------
# Phase 2: Brother 6400
# -------------------------------------------------------------------
log "Phase 2: Brother 6400DW-Buero anlegen..."
P2_SYS="/Library/Printers/PPDs/Contents/Resources/Brother HL-L6400DW series CUPS.gz"
P2_TMP="$PPD_DIR/.tmp-HL6400.ppd"
P2_CUST="$PPD_DIR/Brother-HL-L6400DW-BRScript3.ppd"
if [ ! -f "$P2_SYS" ]; then
log "❌ System-PPD fehlt: $P2_SYS"
exit 2
fi
log " - 6400 PPD entpacken..."
/usr/bin/gzip -cd "$P2_SYS" > "$P2_TMP"
log " - 6400 NickName auf BR-Script3 setzen..."
/usr/bin/awk 'BEGIN{done=0}
/^\*NickName:/ && !done {
sub(/^\*NickName: *"[^"]*"/, "*NickName: \"Brother HL-L6400DW series BR-Script3\"");
done=1
}
{ print }' "$P2_TMP" > "$P2_CUST"
/bin/rm -f "$P2_TMP"
/bin/chmod 644 "$P2_CUST"
log " - 6400 PPD-Check:"
/bin/ls -lh "$P2_CUST" || true
/usr/bin/head -n 8 "$P2_CUST" | /usr/bin/sed 's/^/** /' || true
log " - 6400 Queue neu anlegen..."
/usr/sbin/lpadmin -x 6400DW-Buero 2>/der/null || log " (6400DW-Buero war vorher nicht vorhanden – ok)"
/usr/sbin/lpadmin -p 6400DW-Buero -E \
-D "Brother HL-L6400DW series BR-Script3" -L "Buero" \
-v "ipp://192.168.1.158/ipp/print" -P "$P2_CUST"
/usr/bin/lpoptions -p 6400DW-Buero -o sides=two-sided-long-edge 2>/dev/null || log " WARN: lpoptions 6400 fehlgeschlagen."
/usr/sbin/cupsaccept 6400DW-Buero 2>/dev/null || log " WARN: cupsaccept 6400 fehlgeschlagen."
/usr/sbin/cupsenable 6400DW-Buero 2>/dev/null || log " WARN: cupsenable 6400 fehlgeschlagen."
#für Nadeldrucker Epson LQ 570+ PS2, Druckername in Tomedo EPSON_Sprechzimmer_3_BTM mit IP 192.168.1.139
# es wird der Epson 24 pin Treiber benutzt
# für eigenes Setup entsprechend anpassen
# -------------------------------------------------------------------
# Phase 3: Epson Nadeldrucker exakt wie GUI
# -------------------------------------------------------------------
log "Phase 3: Epson Nadeldrucker anlegen (GUI-konform)..."
EPSON_NAME="EPSON_Sprechzimmer_3_BTM"
EPSON_URI="lpd://192.168.1.136/Port1"
log " - Epson Queue neu anlegen..."
/usr/sbin/lpadmin -x "$EPSON_NAME" 2>/dev/null || log " (Epson war vorher nicht vorhanden – ok)"
/usr/sbin/lpadmin -p "$EPSON_NAME" -E \
-D "EPSON_Sprechzimmer_3_BTM" \
-L "Sprechzimmer" \
-v "$EPSON_URI" \
-m "drv:///sample.drv/epson24.ppd"
/usr/sbin/cupsaccept "$EPSON_NAME" 2>/dev/null || log " WARN: cupsaccept Epson fehlgeschlagen."
/usr/sbin/cupsenable "$EPSON_NAME" 2>/dev/null || log " WARN: cupsenable Epson fehlgeschlagen."
#diese Phase ist entsprechend den eingesetzten Drucker angepasst werden
# -------------------------------------------------------------------
# Phase 4: CUPS anstoßen und prüfen
# -------------------------------------------------------------------
log "Phase 4: CUPS neu anstoßen..."
/bin/launchctl kickstart -k system/org.cups.cupsd 2>/dev/null || log " WARN: kickstart org.cups.cupsd fehlgeschlagen."
/bin/sleep 1
#Skript ist für Setup Brother 5100DN + Brother 6400DW und Epson 24 pin Nadeldrucker, Drucker aus folgenden Text entfernen oder ergänzen
log "Phase 4: lpstat -v prüfen..."
/usr/bin/lpstat -v | /usr/bin/grep -E '5100DN-Theke|6400DW-Buero|EPSON_Sprechzimmer_3_BTM' || log " WARN: Nicht alle Queues in lpstat sichtbar."
#code ist für jeden Drucker gleich, nur der Druckernahme ist der Unterschied, Codeteil ist jeden einzelnen notwendig
/bin/echo "---- Ausschnitt printers.conf 5100 ----"
/usr/bin/awk '/^
/{f=1} f{print} /^<\/Printer>/{if(f){exit}}' /etc/cups/printers.conf || true
/bin/echo "---- Ausschnitt printers.conf 6400 ----"
/usr/bin/awk '/^/{f=1} f{print} /^<\/Printer>/{if(f){exit}}' /etc/cups/printers.conf || true
/bin/echo "---- Ausschnitt printers.conf Epson ----"
/usr/bin/awk '/^/{f=1} f{print} /^<\/Printer>/{if(f){exit}}' /etc/cups/printers.conf || true
# -------------------------------------------------------------------
# Phase 5: Standarddrucker hier 6400DW setzen und sperren
# -------------------------------------------------------------------
log "Phase 5: Standarddrucker auf 6400DW-Buero setzen..."
/usr/sbin/lpadmin -d 6400DW-Buero || log " WARN: Standarddrucker konnte nicht gesetzt werden."
/usr/bin/lpstat -d || true
log "Phase 5: printers.conf wieder sperren..."
/usr/bin/chflags uchg /etc/cups/printers.conf 2>/dev/null || log " WARN: chflags uchg fehlgeschlagen."
/bin/ls -lO /etc/cups/printers.conf 2>/dev/null || true
log "Druckerfix erfolgreich durchgelaufen."
/bin/echo "============================================================"
/bin/echo "Druckerfix beendet: $(/bin/date)"
/bin/echo "============================================================"
exit 0
#5. Schritt: Speichern mit ^(ControlTaste)+O und Entertaste und ^(ControlTaste)+X
#6. Schritt: Skript anstossen
sudo chmod +x /Library/Scripts/druckerfix.sh
#7. Schritt: LaunchDaemon-Datei anlegen
sudo nano /Library/LaunchDaemons/com.druckerfix.autorun.plist
#8. Schritt: folgen Inhalt einfügen
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Label
com.druckerfix.autorun
ProgramArguments
/Library/Scripts/druckerfix.sh
WatchPaths
/etc/cups/printers.conf
/etc/cups/ppd
RunAtLoad
StandardOutPath
/var/log/druckerfix.log
StandardErrorPath
/var/log/druckerfix.log
#9. Schritt: Speicher mit ^(ControlTaste)+O und Entertaste und ^(ControlTaste)+X
#10. Schritt: rechte setzen
sudo chown root:wheel /Library/LaunchDaemons/com.druckerfix.autorun.plist
sudo chmod 644 /Library/LaunchDaemons/com.druckerfix.autorun.plist
#11. Schritt: neu laden
sudo launchctl unload /Library/LaunchDaemons/com.druckerfix.autorun.plist 2>/dev/null || true
sudo launchctl load /Library/LaunchDaemons/com.druckerfix.autorun.plist