【问题标题】:Why do I get warning "QStandardPaths: XDG_RUNTIME_DIR not set" every time for a PyQt5 project为什么我每次都收到 PyQt5 项目的警告“QStandardPaths:XDG_RUNTIME_DIR 未设置”
【发布时间】:2018-02-09 09:38:45
【问题描述】:

我正在使用 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()

提前感谢您抽出宝贵时间 - 如果我遗漏了任何内容、过分或过分强调某个具体点,请在 cmets 中告诉我。

【问题讨论】:

  • 不小心使用root!这真的应该是一个错误,而不仅仅是一个警告。

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


【解决方案1】:

不确定是 pyqt 还是 python 相关的问题。可能然后以 root 权限运行您会丢失一些环境变量,XDG_RUNTIME_DIR 就是其中之一。

这没什么大不了的,因为 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>

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

【讨论】:

  • 我使用虚拟环境是造成这种行为的重要原因。你能建议我在不使用 sudo 的情况下以其他方式访问串行缓冲区吗? @9dogs
  • @NithinVarghese 我更新了我的答案,检查这是否真的有效,因为我手头没有串行设备来测试它
  • 这导致另一个警告QStandardPaths: wrong ownership of runtime directory /run/user/1000, 1000 instead of 0 。这个制作程序卡住了
  • 好像你从普通用户开始你的应用程序,应用程序创建了/run/user/1000(它是XDG_RUNTIME_DIR),然后你尝试从超级用户运行应用程序并得到一个关于错误所有权的错误。您可以注销-登录,目录应该被清除并自动重新创建具有正确的所有权。
  • 很抱歉我没有真正关注。解决方案有效吗?我的代码面临同样的问题。我到底要做什么?
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多