描述
我正在尝试制作一个 systemd 服务文件来运行一个 python 脚本,以便使用热敏打印机打印一些内容。埃斯科波斯是我用来访问热敏打印机控制的库。但是 escpos 需要 sudo 才能访问 usb 设备。
问题
如何创建 systemd 服务文件,使 exec 命令获得 root 访问权限?根据互联网上的一些答案,如果我不为 User 设置任何内容,则默认 exec 应该会自动获得 root 访问权限。但我仍然无法运行我的程序。希望有人能帮助我发现我的错误。
代码
Python
文件:/usr/local/etc/test/testPrint.py
from escpos.printer import Usb
#require escpos use "pip install python-escpos" to install the library
""" Seiko Epson Corp. Receipt Printer (EPSON TM-T88III) """
p = Usb(0x4b43, 0x3538, 0, 0x82, 0x02)
p.text("Hello World\n")
p.text("\n\n\n")
p.cut()
我可以sudo python3 /usr/local/etc/test/testPrint.py
毫无问题地运行并打印热敏打印机上的文本。
服务文件
文件:/etc/systemd/system/testPrint.service
[Unit]
Description=Test Python escpos print
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /usr/local/etc/test/testPrint.py
[Install]
WantedBy=multi-user.target
当我尝试运行该命令时sudo systemctl start testPrint.service
,它给出了错误
错误日志
命令:sudo journalctl -u testPrint.service
:
python3.5[27149]: Traceback (most recent call last):
python3.5[27149]: File "/usr/local/etc/test/testPrint.py",
python3.5[27149]: from escpos.printer import Usb
python3.5[27149]: ImportError: No module named 'escpos'
systemd[1]: testPrint.service: Main process exited, code=exit
systemd[1]: Failed to start Test python escpos print.
systemd[1]: testPrint.service: Unit entered failed state.
systemd[1]: testPrint.service: Failed with result 'exit-code'
如果我在不使用 sudo 的情况下运行 python,则会出现相同的错误“python3 打印测试.py“
编辑:
只是为了提供一些额外的信息。我使用sudo pip3 安装 python-escpos安装模块。我的操作系统是Ubuntu 16.04
答案1
我已经解决了这个问题。
此错误不是由 root 权限引起的,而是由埃斯科波斯模块在 root 用户下无法正确安装。在我重新安装埃斯科波斯所有sudo pip3 install python-escpos
代码都可以正常工作并能够打印文本。