sobota 18. ledna 2020

Symlinky pro více tiskáren pod OpenWRT

Tiskárny se přesunuly do /dev/usb/lp*, udev byl nahrazen procd. Konfigurační soubory jsou podobné jako u hotplug, tedy v /etc/hotplug.d/ pro USB je to například /etc/hotplug.d/usbmisc/20-p910nd

konfigurační soubor by mělo stačit upravit takto:

skriptík v podstatě načte z /sys/class/usbmisc/lpX/device/ ze souboru ieee1284_id informace o tiskárně a podle názvu tiskárny vytvoří smylink do /dev. Například tedy /dev/ML-1520/dev/CLP-320.

Edit: Tak ještě jedna úprava, původní skript nechával symlinky a pokud uživatel znovu zapnul tiskárny ve špatném pořadí, tak to nefungovalo (soubor ieee1284_id v době odpojování neexistoval). Nově si skript vytváří v /tmp/printers soubory s názvy tiskáren, tak aby věděl kterou při odebrání smazat (uznávám šlo by to jistě i lépe).

vyzobneme název tiskárny (MFG:Samsung;CMD:GDI;MDL:ML-1520;CLS:PRINTER;MODE:GDI;STATUS:IDLE;CODE:10003)

cut -d: -f4 /sys/class/usbmisc/$DEVICENAME/device/ieee1284_id

odebereme ";CLS"
sed -e 's/;.*//'
odebere mezeru a vše za ní (příklad názvu "CLP-320 Series") sed -e 's/ .*//'


A nyní kompletní skript:
#!/bin/sh case "$ACTION" in add) [ -n "${DEVNAME}" ] && [ "${DEVNAME##usb/lp*}" = "" ] && { chmod 660 /dev/"$DEVNAME" chgrp lp /dev/"$DEVNAME" PRINTERNAME=`cut -d: -f4 /sys/class/usbmisc/$DEVICENAME/device/ieee1284_id | sed -e 's/;.*//' | sed -e 's/ .*//'` ln -s /dev/$DEVNAME /dev/$PRINTERNAME mkdir /tmp/printers echo "/dev/$PRINTERNAME" > /tmp/printers/$DEVICENAME } ;; remove) [ -n "${DEVNAME}" ] && [ "${DEVNAME##usb/lp*}" = "" ] && { # device is gone PRINTERNAME=`cat /tmp/printers/$DEVICENAME` rm $PRINTERNAME rm /tmp/printers/$DEVICENAME } ;; esac




Žádné komentáře:

Okomentovat