GPIO mit Root Rechten innerhalb von Pycharm ansprechen
Verfasst: Mittwoch 5. Januar 2022, 09:12
Hallo,
Ich versuche meine Pythonprogramme zur Steuerung einer LED Leiste mit GUI über PyQt und mit pycharm als IDE zu programmieren. In dem Pycharm Projekt stecken Routinen zur Ansteuerung der GPIO Pins, die ich vorher einzeln zum Test außerhalb von pycharm per sudo mit root Rechten starten musste. Ohne Root Rechte komme ich wohl nicht an die entsprechenden Pins ran.
Es geht um eine LED Leiste von adafruit (https://learn.adafruit.com/neopixels-on ... -3005997-2), die auf ihrer Website auch die Notwendigkeit von root herausstellen, weil auf /dev/mem zugegriffen werden muss.
Ich habe in Pycharm den Weg über ein Shell Skript als Interpreter statt direkt Python3.7 genutzt, wie hier beschrieben:
https://esmithy.net/2015/05/05/rundebug ... 0as%20root
Im Grunde setzt das shell skript ein sudo vor das python, welches in der virtuellen Umgebung des Pycharm Projektes genutzt wird:
Wenn ich das Projekt nun debugge, oder die Zeile im Terminal von pycharm teste, bekomme ich:
In der main.py wird eine qt Fenster geöffnet, was anscheinend schief läuft.
Vermutlich stimmen die Pfade und Umgebungsvariablen nicht.
Wenn ich dem "sudo" ein "su pi" anfüge, um nach meiner Interpretation den Benutzer "pi" mit "su" zum Benutzer "root" zu machen,
führt das zu
Die andere Schreibweise mit
lässt die GUI starten führt dann aber zum gleichen Problem, als wenn ich ohne sudo arbeite und das pycharm Projekt ganz normal nur als pi durchführe:
Wenn man nach den Fehlermeldungen googelt, bekommt man den Hinweis, dass man mit sudo arbeiten muss um root-Rechte zu gewähren.
Scheinbar bedeutet sudo -su pi, dass ich nicht mit root Rechten als Benutzer pi weiterarbeite, sondern, dass ich mit pi Rechten als pi weiterarbeite. Kann das stimmen?
Hier noch die Ausgabe von groups und pi:
Außerdem, sowohl die main.py, als auch der Link python3.7 in der venv des pycharm Projektes haben Zugriffsrechte per chmod 777.
Ich versuche meine Pythonprogramme zur Steuerung einer LED Leiste mit GUI über PyQt und mit pycharm als IDE zu programmieren. In dem Pycharm Projekt stecken Routinen zur Ansteuerung der GPIO Pins, die ich vorher einzeln zum Test außerhalb von pycharm per sudo mit root Rechten starten musste. Ohne Root Rechte komme ich wohl nicht an die entsprechenden Pins ran.
Es geht um eine LED Leiste von adafruit (https://learn.adafruit.com/neopixels-on ... -3005997-2), die auf ihrer Website auch die Notwendigkeit von root herausstellen, weil auf /dev/mem zugegriffen werden muss.
Ich habe in Pycharm den Weg über ein Shell Skript als Interpreter statt direkt Python3.7 genutzt, wie hier beschrieben:
https://esmithy.net/2015/05/05/rundebug ... 0as%20root
Im Grunde setzt das shell skript ein sudo vor das python, welches in der virtuellen Umgebung des Pycharm Projektes genutzt wird:
Code: Alles auswählen
sudo /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7 main.py
Code: Alles auswählen
No protocol specified
qt.qpa.screen: QXcbConnection: Could not connect to display :10.0
Could not connect to any X display.
Vermutlich stimmen die Pfade und Umgebungsvariablen nicht.
Wenn ich dem "sudo" ein "su pi" anfüge, um nach meiner Interpretation den Benutzer "pi" mit "su" zum Benutzer "root" zu machen,
Code: Alles auswählen
sudo su pi /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7 main.py
oder
sudo su - pi /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7 main.py
Code: Alles auswählen
/home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7: /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7: Kann die Datei nicht ausführen.
Code: Alles auswählen
sudo -su pi /home/pi/PycharmProjects/LEDStrip/venv/bin/python3.7 main.py
Code: Alles auswählen
libEGL warning: DRI2: failed to authenticate
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-pi'
Main GUI Start
Main LED Star Methode
In LEDStart
Can't open /dev/mem: Keine Berechtigung
Traceback (most recent call last):
File "main.py", line 150, in LEDStartfunct
LEDStart(self)
File "main.py", line 135, in LEDStart
strip.begin()
File "/home/pi/PycharmProjects/LEDStrip/venv/lib/python3.7/site-packages/rpi_ws281x/rpi_ws281x.py", line 131, in begin
raise RuntimeError('ws2811_init failed with code {0} ({1})'.format(resp, str_resp))
RuntimeError: ws2811_init failed with code -5 (mmap() failed)
Abgebrochen
Scheinbar bedeutet sudo -su pi, dass ich nicht mit root Rechten als Benutzer pi weiterarbeite, sondern, dass ich mit pi Rechten als pi weiterarbeite. Kann das stimmen?
Hier noch die Ausgabe von groups und pi:
Code: Alles auswählen
Hier mal die Ausgabe von id und groups für den Benutzer pi:
Code
pi@raspberrypi:~/LED Strip Tutorial $ groups
pi adm kmem dialout cdrom sudo audio video plugdev games users input netdev lpadmin gpio i2c spi
pi@raspberrypi:~/LED Strip Tutorial $ id
uid=1000(pi) gid=1000(pi) Gruppen=1000(pi),4(adm),15(kmem),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),117(lpadmin),997(gpio),998(i2c),999(spi)