web-dev-qa-db-ja.com

PyQt5プロジェクトで毎回「QStandardPaths:XDG_RUNTIME_DIR not set」という警告が表示されるのはなぜですか

python 3.6.2を使用しており、UbuntuでのPyQt5プロジェクトの開発にEmacs 25を使用しており、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()

お時間をいただきありがとうございます。何かを見落とした場合は、特定のポイントを強調したり、強調したりして、コメントでお知らせください。

5
Nithin Varghese

Pyqtまたはpython関連の問題です。おそらくルート権限で実行すると、環境変数と 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>

ログアウト-グループ変更後にログインが必要になる場合があります

6
9dogs