为什么每次PyQt5项目都会收到警告“QStandardPaths:XDG_RUNTIME_DIR not set”

2024-04-29 07:23:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python 3.6.2和Emacs 25在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()

提前感谢你的时间-如果我漏掉了什么,在评论中告诉我一个重点是多还是少。


Tags: selfinitportubuntudefserialopenpyqt5
1条回答
网友
1楼 · 发布于 2024-04-29 07:23:35

不确定这是pyqt或python相关的问题。然后可能使用根权限运行,您会丢失一些环境变量,^{}就是其中之一。

这没什么大不了的,因为Qt足够聪明,可以返回到合理的默认值,但是您可以使用sudo -E <you_app>来保留当前用户的环境变量:

-E' The -E (preserve environment) option indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the -E option is specified and the user does not have permission to preserve the environment.


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>

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

相关问题 更多 >