如何修复使用 USB 端口连接到树莓派的热敏打印机的 usb.core.USBError

Posted

技术标签:

【中文标题】如何修复使用 USB 端口连接到树莓派的热敏打印机的 usb.core.USBError【英文标题】:How to fix the usb.core.USBError of thermal printer connected to raspberry pi using USB port 【发布时间】:2020-04-14 10:42:59 【问题描述】:

我的热敏打印机出现问题,我无法打印,但它可以正常工作。 我正在使用 esc-pos python 模块https://pythonhosted.org/python-printer-escpos/modules/escpos.html

这是我的代码

from escpos.connections import getUSBPrinter
printer = getUSBPrinter()(idVendor=0x0fe6, idProduct=0x811e, interface=98)
printer.text("Hello World")
printer.lf()

这是我遇到的错误。

Traceback(最近一次调用最后一次):文件“/home/pi/try thermo.py”, 第 4 行,在 打印机 = getUSBPrinter()(idVendor=0x0fe6, idProduct=0x811e, interface=98) 文件 “/usr/local/lib/python3.7/dist-packages/escpos/connections.py”,行 87,在 初始化 self.open() 文件“/usr/local/lib/python3.7/dist-packages/escpos/connections.py”,行 106,在 __open if self._device.is_kernel_driver_active(0): 文件“/usr/local/lib/python3.7/dist-packages/usb/core.py”,第 1061 行,在 is_kernel_driver_active self._ctx.managed_open() 文件“/usr/local/lib/python3.7/dist-packages/usb/core.py”,第 102 行,在 包装 返回 f(self, *args, **kwargs) 文件“/usr/local/lib/python3.7/dist-packages/usb/core.py”,第 120 行,在 managed_open self.handle = self.backend.open_device(self.dev) 文件“/usr/local/lib/python3.7/dist-packages/usb/backend/libusb1.py”,行 786,在 open_device 中 返回_DeviceHandle(dev)文件“/usr/local/lib/python3.7/dist-packages/usb/backend/libusb1.py”,行 第643章 _check(_lib.libusb_open(self.devid, byref(self.handle))) 文件“/usr/local/lib/python3.7/dist-packages/usb/backend/libusb1.py”,行 第595章 raise USBError(_strerror(ret), ret, _libusb_errno[ret]) usb.core.USBError: [Errno 13] Access denied (insufficient permissions)

我使用的热敏打印机是https://www.dfrobot.com/product-1799.html https://www.adafruit.com/product/2751

我希望你们能帮助我,我在论文中非常需要这个,而且我只是 raspberry-pi 的新手。

【问题讨论】:

您可能需要一些udev rules 来授予您的用户访问 USB 设备的权限。以 root 身份运行也应该可以。 嗨,@Erlkoenig 先生,非常感谢您的建议。我搜索了如何创建 udev 规则,但我无法理解它:(。我应该创建一个新文件还是编辑现有的 udev 规则? 你需要一个新文件,可能在/etc/udev/rules.d。首先尝试以 root 身份运行您的程序,以确认这是问题的原因。 以 root 身份运行我的程序是在我的 rpi 终端中运行它,对吗?我仍然遇到同样的错误。 在命令前加上sudo 以root身份运行。 【参考方案1】:

您的 Linux 用户无权访问 USB 设备,因此您需要创建一个 udev 规则来授予访问权限。

创建一个文件printer.rules,内容如下:

SUBSYSTEM=="usb", ATTRSidVendor=="0fe6", ATTRSidProduct=="811e", MODE="0666"

并通过sudo将其复制到规则目录中:

sudo cp printer.rules /etc/udev/rules.d

然后重新加载udev规则:

udevadm control --reload-rules && udevadm trigger

现在,每个用户都应该可以使用打印机。

【讨论】:

非常感谢,非常感谢。干杯! :)))))))))

以上是关于如何修复使用 USB 端口连接到树莓派的热敏打印机的 usb.core.USBError的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中打印到热敏网络打印机?

树莓派的 Ratchet Websocket

我们可以在 react native 中通过蓝牙连接到热敏收据打印机吗

树莓派怎么连电脑

cp2102通过GPIO连接树莓派

如何用Lodop能过USB热敏打印机打开钱箱