Назад | Перейти на главную страницу

Назначьте статический идентификатор для USB-принтера

У меня есть три USB-принтера чеков от одного и того же поставщика (то есть того же поставщика USB и идентификатора продукта), подключенных к одному серверу, и мне нужно иметь возможность выдавать отдельные команды печати для каждого из них. Принтеры регистрируются в / dev / usb / lp *, поэтому я могу просто записывать команды ESC / POS в эти файлы, а принтеры распечатывают соответствующие квитанции. Однако проблема заключается в том, что при перезагрузке иногда порядок меняется, например, / dev / usb / lp0 теперь относится к принтеру, который раньше был / dev / usb / lp1. Есть ли способ назначить идентификатор устройства или хотя бы идентификатор порта USB, чтобы он всегда ссылался на один и тот же принтер?

Я нашел уродливое решение, если у вас есть более элегантное решение, отправьте свой ответ.

Я написал сценарий, который использует регулярное выражение для анализа вывода dmesg | grep usblp | grep 0x0416 (0x0416 - это идентификатор поставщика для моих USB-принтеров).

Результат выглядит следующим образом:

[    9.875206] usblp 2-2:1.0: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x0416 pid 0x5011
[    9.879408] usblp 3-1:1.0: usblp1: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x0416 pid 0x5011
[    9.883841] usblp 3-2:1.0: usblp2: USB Bidirectional printer dev 3 if 0 alt 0 proto 2 vid 0x0416 pid 0x5011

Я использую простое регулярное выражение: /usblp ([0-9]\-[0-9])\:1\.0\: usblp([0-9])/ чтобы изолировать порт USB (2-2, 3-1 или 3-2) с его соответствующим идентификатором usblp, тогда у меня просто есть хэш-карта, которая отображает каждый порт USB на понятное имя.

Уродливо, требует разбора dmesg, но вроде пока работает.