为什么每次PyQt5项目都会收到“QStandardPaths:XDG_RUNTIME_DIR未设置”的警告

时间:2017-08-31 12:19:54

标签: python python-3.x ubuntu pyqt pyqt5

我正在使用python 3.6.2并使用E​​macs 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()

提前感谢您的时间 - 如果我错过了任何内容,请在评论中过度强调或强调一个特定的要点。

1 个答案:

答案 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

注销 - 组更改后可能需要登录

相关问题