我正在使用Python3.6.2和Emacs25在Ubuntu中开发一个PyQt5项目,它是以根权限运行的。这个运行得很好,但是我得到了
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()提前感谢您的时间-如果我遗漏了任何东西,过度强调或不强调某一点,请在评论中让我知道。
发布于 2017-08-31 21:26:54
不确定这是与pyqt还是python相关的问题。然后,您可能会丢失一些环境变量,而XDG_RUNTIME_DIR就是其中之一。
这不是什么大问题,因为Qt足够智能,可以回退到合理的默认值,但您可以使用sudo -E <you_app>保留当前使用的环境变量
-E‘-E (保留环境)选项向安全策略指示用户希望保留其现有环境变量。如果指定了-E选项,并且用户没有保留环境的权限,则安全策略可能会返回错误。
更新:您可以通过/etc/sudoers文件显式地指定一组变量,而不是将所有的var复制到提升的(根)环境中(这可能会引起安全问题)。使用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>注销-更改组后可能需要登录
https://stackoverflow.com/questions/45981317
复制相似问题