Python не может получить доступ к моему USB-устройству - недостаточно прав - PullRequest
0 голосов
/ 07 октября 2019

Сценарий Python не может отправить печать на мой USB-принтер чеков Epson

Я новичок в Ubuntu. Я пытаюсь отправить текст на термопринтер, подключенный к моему компьютеру через USB. После выполнения кода в Visual Studio Code, нажав клавишу F5, я получаю следующую ошибку

File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/backend/libusb1.py", line 595, in _check
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)

Однако, если я выполняю тот же код с:

sudo python3 -m test5.py

, тогда онраспечатывает все в порядке. Я сделал много поисков в Google, и похоже, что это проблема, связанная с настройками моих правил, поэтому я создал следующее правило в /etc/udev/rules.d/printerRule.rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="1208", ATTRS{idProduct}=="3605",  MODE="0666", OWNER="hdadmin"

Все ещепроблема сохраняется.

Причина, по которой мне нужно решить эту проблему, заключается в том, что позже мне нужно скомпилировать скрипт Python с помощью pyinstaller. Если я скомпилирую как сейчас с

pyinstaller --onefile test5.py

Процесс компиляции будет в порядке, но мне все равно не разрешат использовать устройство usb при запуске скомпилированного файла. Ниже приведен полный отчет об ошибке

(env) (base) hdadmin@HiddenDimsum:~/Documents/Python/POS$ cd /home/hdadmin/Documents/Python/POS ; env PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 /home/hdadmin/Documents/Python/POS/env/bin/python3.6 /home/hdadmin/.vscode/extensions/ms-python.python-2019.9.34911/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 42379 /home/hdadmin/Documents/Python/POS/test4.py 
Traceback (most recent call last):
  File "/home/hdadmin/.vscode/extensions/ms-python.python-2019.9.34911/pythonFiles/ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "/home/hdadmin/.vscode/extensions/ms-python.python-2019.9.34911/pythonFiles/lib/python/ptvsd/__main__.py", line 432, in main
    run()
  File "/home/hdadmin/.vscode/extensions/ms-python.python-2019.9.34911/pythonFiles/lib/python/ptvsd/__main__.py", line 316, in run_file
    runpy.run_path(target, run_name='__main__')
  File "/usr/lib/python3.6/runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "/usr/lib/python3.6/runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/hdadmin/Documents/Python/POS/test4.py", line 2, in <module>
    printer = Usb(1208, 3605)
  File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/escpos/printer.py", line 51, in __init__
    self.open()
  File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/escpos/printer.py", line 62, in open
    check_driver = self.device.is_kernel_driver_active(0)
  File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/core.py", line 1061, in is_kernel_driver_active
    self._ctx.managed_open()
  File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/core.py", line 102, in wrapper
    return f(self, *args, **kwargs)
  File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/core.py", line 120, in managed_open
    self.handle = self.backend.open_device(self.dev)
  File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/backend/libusb1.py", line 786, in open_device
    return _DeviceHandle(dev)
  File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/backend/libusb1.py", line 643, in __init__
    _check(_lib.libusb_open(self.devid, byref(self.handle)))
  File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/backend/libusb1.py", line 595, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)

Поскольку я новичок в Linux и Ubuntu, мне нужна помощь и советы, чтобы я мог получить разрешение на USB-устройства, подключенные к моему компьютеру. Ожидаемый результат - я смогу запустить test5.py без необходимости

sudo python3 -m test5.py

1 Ответ

0 голосов
/ 12 октября 2019

Благодаря GST. Вы полностью правы. Моя ошибка при создании .rule

SUBSYSTEM=="usb", ATTRS{idVendor}=="1208", ATTRS{idProduct}=="3605",  MODE="0666",   OWNER="hdadmin"

Вместо этого он должен выглядеть так, как показано ниже, где GROUP = "users". Я неправильно прочитал «пользователи» и заменил его именем пользователя. Я изменил свое правило на следующее:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="2016", GROUP="users", MODE="0666"

, а затем в терминальной записи напишите

 $ sudo udevadm control --reload 

и перезагрузил компьютер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...