2017-08-31 3002 views
1

我正在使用python 3.6.2並使用E​​macs 25開發Ubuntu中的PyQt5項目,並且它以root權限運行。這工作正常,但我得到爲什麼我每次爲PyQt5項目都會收到警告「QStandardPaths:XDG_RUNTIME_DIR not set」

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() 

預先感謝您的時間 - 如果我錯過了什麼,過多或過少強調某一點讓我知道了意見。

+0

不小心停止使用root!這真的應該是一個錯誤,而不僅僅是一個警告。 – o11c

回答

1

不確定這是一個pyqt或python相關的問題。可能以root用戶權限運行,你將失去一些環境變量,其中包括XDG_RUNTIME_DIR

這不是一個大問題,因爲Qt是足夠聰明回落到合理的默認,但你可以保留當前的應用環境VAR提供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> 

註銷 - 登錄可能組改變之後可能需要

+0

我使用虛擬環境是這種行爲的可觀原因。你能不能建議我以其他方式訪問串口緩衝區而不使用sudo? @ 9dogs –

+0

@NithinVarghese我更新了我的答案,檢查這個實際是否有效,因爲我手邊沒有串口設備來測試它 – 9dogs

+0

這導致另一個警告'QStandardPaths:錯誤的運行時目錄/ run/user/1000的所有權1000而不是0'。這個製作程序卡住了 –

相關問題