Linux系统和USB热敏打印机通信 - xiaohao0576/odoo-doc GitHub Wiki
背景知识
Linux系统插入USB接口的热敏打印机后,系统一般会生成/dev/usb/lp0
文件,使用程序向这个文件写入数据(可以是二进制数据),打印机就会开始工作。然而,/dev/usb/lp0
这个文件名可能并不是完全固定的,如果设备上插入了多个USB接口的打印机,可能会生成lp1, lp2 ,lp3这样的文件名,所以,我们需要udev方案。
使用Udev固定设备文件名
-
在 /etc/udev/rules.d/ 目录下创建一个新文件,例如
99-my-thermal-printer.rules
。使用高编号(如 99)确保您的规则在大多数默认规则之后运行。 -
编写规则内容
SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", SYMLINK+="my_thermal_printer", GROUP="lp", MODE="0666"
记得将 xxxx 和 yyyy 替换为您打印机的实际 vendor ID 和 product ID。Linux下可以用lsusb
命令查看VID和PID -
保存文件并更新 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger
这样设置后:
/dev/usb/lp0
将继续由系统默认规则创建。
/dev/my_thermal_printer
将作为一个指向同一设备的新符号链接创建。
多台相同型号的打印机处理规则
如果有多台相同型号的打印机插入Linux主机,可以使用设备的SN号进行区分
SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", ATTRS{serial}=="ABC123", SYMLINK+="my_printer_ABC123"
udev还支持根据USB设备的SN号进行动态命名
SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", SYMLINK+="my_printer_$attr{serial}"