我正在使用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()
提前感谢您的时间 - 如果我错过了任何内容,请在评论中过度强调或强调一个特定的要点。
答案 0 :(得分:5)
不确定它是pyqt或python相关的问题。可能然后以root权限运行你会丢失一些环境变量,XDG_RUNTIME_DIR
就在其中。
这不是什么大问题,因为Qt很聪明,可以回归到合理的默认值,但是你可以使用sudo -E <you_app>
来保留当前使用的环境变量:
-E&#39; -E(保留环境)选项向安全策略指示用户希望保留其现有环境 变量。如果-E选项是,安全策略可能会返回错误 指定并且用户没有权限保留 环境。
UPD:而不是将所有变量复制到提升(根)环境(可能会引起安全问题),您可以通过/etc/sudoers
文件显式指定一组变量。使用sudo visudo
命令编辑此文件并添加一行:
Defaults env_keep += "XDG_RUNTIME_DIR"
UPD2 :如果您想访问串行设备没有超级用户权限,请将您的用户添加到设备的群组中(通常称为{{} 1}}):
dialout
注销 - 组更改后可能需要登录