Nit*_*ese 5 python ubuntu pyqt python-3.x pyqt5
我正在使用python 3.6.2并使用Emacs 25在Ubuntu中开发PyQt5项目,它以root特权运行。这工作正常,但我正在
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Run Code Online (Sandbox Code Playgroud)
从命令行运行。
如果您让我了解这是什么以及避免这种情况的可能解决方案,那将是很好的。
代码
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()
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的宝贵时间。如果我错过了任何内容,请在评论中让我知道特定的地方。
不确定是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"
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
注销-更改组后可能需要登录