Бывает такая проблема что в конфиге принтерам назначены /dev/usb/lp0 и /dev/usb/lp1, а они вдруг меняются портами. Происходит это из-за того, что в Thinstation принтеры подключаются по принципу «кто первым встал — того и тапки», т.е. какой первым загрузился — того и /dev/usb/lp0.

Короче, исправляем.

Вот часть конфигурации Thinstation отвечающая за принтеры:

PRINTER_0_DEVICE=/dev/usb/lp0
PRINTER_0_NAME=HP2055
PRINTER_0_TYPE=U
PRINTER_1_DEVICE=/dev/usb/lp1
PRINTER_1_NAME=HP2015
PRINTER_1_TYPE=U

Принтер к ноде (/dev/usb/lp*) мы привязать не можем, зато можем создать фиксированный симлинк, поможет нам в этом udev, но для начала узнаем как идентифицируются наши принтеры.

При подключенных к клиенту принтерах запускаем по очереди на нём команды:
udevadm info -a -n /dev/usb/lp0 | grep ATTRS{product}
udevadm info -a -n /dev/usb/lp1 | grep ATTRS{product}

И ищем в выхлопе подходящий идентификатор, в нашем случае ATTRS{product}.

Создаём в packages/base/etc/udev/rules.d файл 12-printer-local.rules и в нём пишем правила, создающие симлинк к ноде по модели принтера:

KERNEL=="lp*", ATTRS{product}=="HP LaserJet 2055", SYMLINK+="usb/hp2055"
KERNEL=="lp*", ATTRS{product}=="HP LaserJet 2015", SYMLINK+="usb/hp2015"

Конфиг придётся переделать, задав симлинк девайса:

PRINTER_0_DEVICE=/dev/usb/hp2055
PRINTER_0_NAME=HP2055
PRINTER_0_TYPE=U
PRINTER_1_DEVICE=/dev/usb/hp2015
PRINTER_1_NAME=HP2015
PRINTER_1_TYPE=U

Пересобираем образ и теперь печать, независимо от того какую ноду получил девайс, пойдёт на нужный принтер. Количество правил зависит от зоопарка принтеров.

Ещё пара примеров использования:

1) если у вас несколько типов принтеров: куча HP LaserJet ***, Canon*** и какие нибудь фискальные FPrint***, то можно обойтись несколькими правилами:

KERNEL=="lp*", ATTRS{product}=="*HP LaserJet*", SYMLINK+="usb/hp"
KERNEL=="lp*", ATTRS{product}=="*Canon*", SYMLINK+="usb/cnn"
KERNEL=="lp*", ATTRS{product}=="*FPrint*", SYMLINK+="usb/fp"

2) у вас куча всяких принтеров, а вторым принтером стоят везде какие нибудь фискальные FPrint***, т.е. если атрибут содержит FPrint, то симлинк fprint, все остальные получают симлинк print.:

KERNEL=="lp*", ATTRS{product}!="*FPrint*", SYMLINK+="usb/print"
KERNEL=="lp*", ATTRS{product}=="*FPrint*", SYMLINK+="usb/fprint"

Комментарии (0)