evdev findet keine devices

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MaCorMa
User
Beiträge: 4
Registriert: Montag 20. Juni 2016, 01:42

Guten Morgen,

zunächst muss ich darauf hinweisen, dass ich noch Anfänger bin. Daher ist die Frage eventuell etwas banal. Nach meinen ersten Gehversuchen in Python habe ich mir in den Kopf gesetzt, etwas mit meiner Logitech G600, unter Kubuntu zu experimentieren. Dazu möchte ich das Modul Python-evdev nutzen. Die Installation lief reibungslos. Für Python 2.7 und auch 3.5. Allerdings direkt das erste Beispiel aus dem Quick Start Guide

Code: Alles auswählen

>>> import evdev

>>> devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()]
>>> for device in devices:
...    print(device.fn, device.name, device.phys)
verläuft bei mir im Sand. Keine Fehlermeldung oder änliches, daher gehe ich davon aus, dass alles korrekt läuft, aber eben keine Geräte erkannt werden. Auch weil

Code: Alles auswählen

ln(evdev.list_devices())
0 ausgibt und

Code: Alles auswählen

evdev.list_devices()
zu [] wird.
Ich frage mich nun, ob ich diese irgendwie zur Verfügung stellen muss oder Ähnliches. Im System selbst, also auf der Konsole werden Geräte angezeigt. Nur eben nicht in Python. Wenn ich erstmal Geräte sehe, bin ich sicher, dass ich auch was damit anfangen kann :D . Aber leider kann ich weder aus der Dokumention noch aus meinen Googlesuchen irgendwelche Lösungsansätze herauslesen.

Ich würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte.

Grüße,
Markus
BlackJack

Das letzte Beispiel vom „Quick Start“ in der Dokumentation gibt einen Hinweis:
[codebox=text file=Unbenannt.bsh]$ python -m evdev.evtest
error: no input devices found (do you have rw permission on /dev/input/*?)[/code]
Hm, mal sehen:
[codebox=text file=Unbenannt.txt]$ python -c 'import evdev; print evdev.list_devices()'
[]
$ sudo python -c 'import evdev; print evdev.list_devices()'
['/dev/input/event15', '/dev/input/event14', '/dev/input/event13', '/dev/input/e
vent12', '/dev/input/event11', '/dev/input/event10', '/dev/input/event9', '/dev/
input/event8', '/dev/input/event7', '/dev/input/event6', '/dev/input/event5', '/
dev/input/event4', '/dev/input/event3', '/dev/input/event2', '/dev/input/event1'
, '/dev/input/event0'][/code]
Okay, daran lag es. Hätten die in der Doku vielleicht erwähnen sollen. :-)
MaCorMa
User
Beiträge: 4
Registriert: Montag 20. Juni 2016, 01:42

OHA, danke erstmal für den Schubbs.

Code: Alles auswählen

$ python -m evdev.evtest
No module evtest found
OK, da scheint was mit meiner Installation nicht zu stimmen...

Code: Alles auswählen

$ sudo python -c 'import evdev; print evdev.list_devices()'
...das funktioniert aber.

HM, schön und gut. Aber damit wird die ganze Sache ja auch irgendwie unbrauchbar. Ich kann ja schlecht was schreiben, was prinzipiell Adminrechte braucht um zu funktionieren. Muss mir wohl doch was anderes überlegen...
BlackJack

@MaCorMa: Wieso unbrauchbar? Ich fänd ein System unbrauchbar wo jeder Prozess ohne weitere Rechte meine Tastatur und Mauseingaben belauschen kann. Man gibt ja auch mal Passwörter ein. Da finde ich das schon ganz nett, das solche Programme besondere Rechte benötigen.

Wenn Du das Programm nicht komplett mit Adminrechten laufen lassen möchtest, kannst Du es ja in zwei aufteilen die dann beispielsweise über DBus miteinander kommunizieren.
MaCorMa
User
Beiträge: 4
Registriert: Montag 20. Juni 2016, 01:42

Klar, unter dem Sicherheitsaspekt is das natürlich so. Aber falls ich das Projekt irgendwann mal veröffentlichen möchte, wird sich der Interessent auch fragen, warum er dem Programm Rootrechte geben sollte;)
DBus werde ich mir mal anschauen. Wie gesagt bin ich Anfänger und hab noch viel zu lernen. Alles Weitere wäre hier aber off topic.
Alsa nochmal Danke für die Anregungen. Ich verzieh mich mal wieder in den Lesemodus.:)

Markus
BlackJack

@MaCorMa: Na das kann man dem Interessenten dann ja erklären. Wobei man zum Installieren von Software ja auch Adminrechte benötigt. Das heisst wenn Du das als Paket für die jeweilige Distribution schnürst und den Server/Daemon-Teil der die Rechte benötigt in systemd oder was auch immer einbindest, dann sieht das für den Benutzer ja auch aus wie jede andere Installation. Selbst wenn man es nicht als ”natives” Paket anbietet: Wenn man etwas systemweit installieren will, dann braucht man auch bei anderer Software die Rechte dazu.
MaCorMa
User
Beiträge: 4
Registriert: Montag 20. Juni 2016, 01:42

Ja, das is natürlich alles richtig. Aber am Ende war das als Teil eines Addons für Blender gedacht. Also keine Installation. Ich war wohl mit der gesamten Herangehensweise auf dem Holzweg. Wie gesagt, es gibt sehr viel zu lernen.
The evdev interface serves the purpose of passing events generated in the kernel directly to userspace through character devices that are typically located in /dev/input/.
Das habe ich wohl in den falschen Hals bekommen.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Die Unterscheidung zwischen Kernel- und Userspace heißt nicht, dass irgendwas an einen lokalen Benutzer geleitet wird, sondern damit ist quasi die Welt des Kernels im Gegensatz zu der Welt des Anwenders gemeint. Das steht also nicht im Widerspruch dazu, dass man Rootrechte benötigt, um auf Events für diese Schnittstelle lauschen zu können.
MaCorMa hat geschrieben:Aber am Ende war das als Teil eines Addons für Blender gedacht.
Man könnte ja eine grafische Abfrage des Root-Passwortes vornehmen. So ähnlich wie das grafische Update-Manager machen. Stichwort: gksudo bzw gksu. Dann gelten die erweiterten Rechte nur für die Abfrage durch das Addon.
Antworten