У меня есть три 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, но вроде пока работает.