我正在使用 python 3.6.2 和 Emacs 25 在 Ubuntu 中开发 PyQt5 项目,并且它以 root 权限运行。这工作正常,但我得到了
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
从每次运行的命令行。
如果您能让我了解这是什么以及避免这种情况的可能解决方案,那就太好了。
代码
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.setupUi(self)
# TODO: board connection
self.comPort.addItems([str(port) for port in display_SerialPorts()])
self.comPort.highlighted.connect(self.boardConnet)
def boardConnet(self):
baudrate = 9600
port = self.comPort.currentText()
ser = serial.Serial(
port, baudrate, timeout=1) # open first serial port
ser.close()
ser.open()
提前感谢您抽出宝贵的时间——如果我错过了任何内容,过分或过分强调了某个特定点,请在评论中告诉我。
不确定这是 pyqt 还是 python 相关的问题。可能然后以root权限运行你会丢失一些环境变量并且XDG_RUNTIME_DIR https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables就在其中。
这不是什么大问题,因为 Qt 足够聪明,可以回退到合理的默认值,但您可以保留当前使用的环境变量sudo -E <you_app>
:
-E' -E(保留环境)选项向安全策略表明用户希望保留其现有环境
变量。如果 -E 选项为,安全策略可能会返回错误
指定且用户无权保留
环境。
UPD:您可以显式指定一组要保留的变量,而不是将所有变量复制到提升的(根)环境中(这可能会引起安全问题)/etc/sudoers
文件。编辑此文件sudo visudo
命令并添加一行:
Defaults env_keep += "XDG_RUNTIME_DIR"
UPD2:如果你想访问串行设备没有超级用户权限将您的用户添加到设备的组中(通常称为dialout
):
# check group
>>> ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 4, 66 Aug 6 12:23 /dev/ttyUSB0
# add your user to a group
>>> sudo usermod -a -G dialout <your_username>
注销 - 组更改后可能需要登录
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)