• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Eigene udev rule schreiben

goeba

Hacker
Hallo,

wir haben einige interaktive Boards der Firma Epson. Ein älteres Modell wird einfach als Maus erkannt, man kann gleich damit arbeiten.

Neuere Modelle aber nicht. Nun kann ich mir nicht so recht vorstellen, dass sich da intern so arg viel geändert hat. Ich würde also gerne eine udev-rule schreiben, die dem System mitteilt, dass es sich bei dem angeschlossenen Gerät um eine Maus handelt.
Wenn ich Glück habe, geht es dann schon.

Gerät und Vendor-id bekomme ich mit "lsusb" heraus.
Dann muss ich eine eigene udev-rule dafür schreiben, etwa 99-epson.rule , und ich weiß auch, wo ich sie hinspeichern muss.

Aber was genau ich in die Datei schreiben muss, ist mir unklar, insbesondere, weil es für so triviale Geräte wie Mäuse keine Beispiele auf den Seiten gibt, die man als erste Treffer bei Google hat (etwa diese hier: http://www.reactivated.net/writing_udev_rules.html ).

Falls jemand sowas schon mal gemacht hat, wäre ich für Hinweise dankbar!

Gruß, Andreas
 

marce

Guru
unter https://wiki.ubuntuusers.de/udev/ findest Du ein Beispiel für eine Tastatur (und noch ein paar mehr) - ehrlich gesagt klingt das, was Du vorhast aber weniger nach einem UDEV-"Problem" sondern eher danach, daß für das Ding einfach kein passender Treiber installiert ist.
 
OP
G

goeba

Hacker
Hallo,
vermutlich hast Du recht. Ich habe das im Detail, glaube ich, noch nicht so ganz verstanden, was so eine udev rule genau macht, ich dachte zunächst, das sei so etwas wie ein Treiber. Es scheint aber mehr so ein Triggersystem zu sein, wo zusätzliche Aktionen beim Einstecken eines usb device ausgelöst werden und wo man auch Berechtigungen (etwa wer ein bestimmtes Gerät benutzen darf) festlegen kann.

Ich hätte daher folgende Idee:
- bei dem älteren Board, das funktioniert, feststellen, welcher Treiber geladen wird
- bei dem neueren Board dafür sorgen (erzwingen), dass auch dieser Treiber geladen wird
- probieren, ob es geht

Für Tipps, wie ich das konkret bewerkstelligen kann, wäre ich dankbar. Ich kann mir halt nicht vorstellen, dass Epson ohne Not bei einem neuen Board komplett von den Standards für human interface devices abweicht. Die weitaus meisten Boards funktionieren einfach ohne Treiber (z.B. alle Smartboards und die Promethean Boards). Daher habe ich die Hoffnung, dass der Kernel das Gerät lediglich nicht kennt und man ihm sozusagen mitteilen muss, welchen Treiber er zu laden hat.

Gruß, Andreas
 

spoensche

Moderator
Teammitglied
goeba schrieb:
Ich habe das im Detail, glaube ich, noch nicht so ganz verstanden, was so eine udev rule genau macht, ich dachte zunächst, das sei so etwas wie ein Treiber.

Nah dran..........

goeba schrieb:
Es scheint aber mehr so ein Triggersystem zu sein, wo zusätzliche Aktionen beim Einstecken eines usb device ausgelöst werden und wo man auch Berechtigungen (etwa wer ein bestimmtes Gerät benutzen darf) festlegen kann.

.....Du hast es doch verstanden. :)

Der Udev erzeugt die Gerätedateien unter /dev, sobald vom Kernel eine Meldung kommt, dass es ein neues Gerät gibt + zusätzliche Infos. Der Udev macht dann das was du oben geschrieben hast.

goeba schrieb:
Ich hätte daher folgende Idee:
- bei dem älteren Board, das funktioniert, feststellen, welcher Treiber geladen wird
- bei dem neueren Board dafür sorgen (erzwingen), dass auch dieser Treiber geladen wird
- probieren, ob es geht

Für Tipps, wie ich das konkret bewerkstelligen kann, wäre ich dankbar. Ich kann mir halt nicht vorstellen, dass Epson ohne Not bei einem neuen Board komplett von den Standards für human interface devices abweicht. Die weitaus meisten Boards funktionieren einfach ohne Treiber (z.B. alle Smartboards und die Promethean Boards). Daher habe ich die Hoffnung, dass der Kernel das Gerät lediglich nicht kennt und man ihm sozusagen mitteilen muss, welchen Treiber er zu laden hat.

Deine Idee geht in die richtige Richtung. Der Kernel weiss welchen Treiber laden muss. Ansonsten kann dir lsusb das Gerät auch nicht anzeigen. Meine Vermutung geht in Richtung Xorg Treiber.

Stöpsel das Board, was nicht funktioniert an und poste dann mal bitte die Ausgabe von
Code:
egrep "EE|WW" /var/log/Xorg.0.log
 
OP
G

goeba

Hacker
Hallo,

vielen Dank schon mal! Es kann ein paar Tage dauern, bis ich die Informationen nachreichen kann, ich bleibe dran!

Gruß, Andreas
 
OP
G

goeba

Hacker
@spoensche :

Nochmal eine Rückfrage. Du meintest "der Kernel weiß, welchen Treiber er laden muss, sonst würde ..." - ich habe lsusb an dem betreffenden Rechner aber noch gar nicht ausgeführt (ich habe diesen nicht zu Hause stehen).

Könntest Du nochmal kurz Hinweise geben, wie ich zunächst herausfinde, ob der Kernel für das Gerät einen Treiber lädt? Einfach "lsusb ", oder wären da noch Parameter wichtig?

Anschließend würde ich den von Dir genannten Befehl ausführen.

Gruß,
Andreas
 

spoensche

Moderator
Teammitglied
Wenn du das Gerät einsteckst, dann kannst du z.B. mit
Code:
dmesg | tail
sehen, was der Kernel für Meldungen bezüglich USB ausgibt.

Eine weitere Möglichkeit wäre udevadm. Bevor du das Gerät einsteckst führst du den Befehl
Code:
udevadm monitor -s usb
aus. Du bekommst dann alle Kernel und Udev Meldungen für das USB Subsystem angezeigt, wenn du das Gerät einsteckst.

Als letztes bleibt dann noch
Code:
lsusb
 
OP
G

goeba

Hacker
Besten Dank!

(das Board steht in einem Klassenraum, das heißt, der Raum muss frei sein + ich muss Zeit und Lust haben, mich drum zu kümmern, deswegen dauert das so lange)
 
OP
G

goeba

Hacker
Code:
linux-ezvt:/home/ag # dmesg | tail
[59358.415841] usb 1-1: New USB device found, idVendor=04b8, idProduct=0907
[59358.415848] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[59358.416599] hub 1-1:1.0: USB hub found
[59358.416689] hub 1-1:1.0: 4 ports detected
[59358.703659] usb 1-1.4: new full-speed USB device number 22 using xhci_hcd
[59358.806654] usb 1-1.4: New USB device found, idVendor=04b8, idProduct=0316
[59358.806672] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[59358.806684] usb 1-1.4: Product: Interactive Function
[59358.806693] usb 1-1.4: Manufacturer: SEIKO EPSON
[59358.815484] hid-generic 0003:04B8:0316.0011: hiddev96,hidraw1: USB HID v1.01 Device [SEIKO EPSON Interactive Function] on usb-0000:00:14.0-1.4/input0

Code:
linux-ezvt:/home/ag # udevadm monitor -s usb
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[59410.413687] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
KERNEL[59410.415949] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0 (usb)
UDEV  [59410.441397] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1 (usb)
UDEV  [59410.447084] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0 (usb)
KERNEL[59410.812190] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4 (usb)
KERNEL[59410.814310] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0 (usb)
UDEV  [59410.863441] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4 (usb)
UDEV  [59410.871205] add      /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0 (usb)

Code:
linux-ezvt:/home/ag # egrep "EE|WW" /var/log/Xorg.0.log
[    10.392] Current Operating System: Linux linux-ezvt 4.14.15-5.g9a6fca5-default #1 SMP PREEMPT Mon Jan 29 08:15:43 UTC 2018 (9a6fca5) x86_64
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[    10.414] (WW) The directory "/usr/share/fonts/misc/sgi" does not exist.

Das sind die Befehle und was sie ausgeben. Soweit ich das verstehe, gibt es keine Fehler. Wenn ich Gimp starte, dann zeigt er mir das Epson Board sogar als Eingabegerät an - wenn ich es in Gimp aktiviere, geht es aber nicht.

Normalerweise sollte der Mauszeiger dem Stift folgen und Klicks erzeugen, wenn man den Stift auf das Board drückt.

Der Stift hat eine Lampe, die leuchtet, wenn ich eine Taste drücke, daher ist die Batterie wohl auch nicht leer.

Unter Windows geht das Board auch (das habe ich heute allerdings nicht getestet, es könnte also theoretisch auch noch am Board etwas defekt sein oder falsch eingestellt, der Test unter Windows ist länger her).

Könnt Ihr da was rauslesen? Dank + Gruß, Andreas
 

josef-wien

Ultimate Guru
Aus Sicht des Kernel schaut für mich alles normal aus. Wie spoensche denke ich auch an Xorg. Kommt das Gerät in /var/log/Xorg.0.log überhaupt vor? Schaut der diesbezügliche Dateiinhalt bei
goeba schrieb:
Ein älteres Modell wird einfach als Maus erkannt
anders aus?
 
OP
G

goeba

Hacker
Hallo,

ich präzisiere. Ich habe da offenbar beim Einkaufen Mist gebaut. Die Boards, die nicht funktionieren, sind Epson EB‑455Wi . Das, was Funktioniert ist das EB-485WI.

Letzteres ist nicht älter, sondern einfach etwas teurer.

Ich habe die Befürchtung, dass die 455 WI Teile der Positionserkennung an die Rechner delegieren, während beim 485 das auf dem Projektor selbst läuft.

Ich habe jetzt mal an Epson geschrieben, die sinst sonst eigentlich recht aktiv mit Linux Treibern (gerade bei Druckern und MUltifunktionsgeräten), vielleicht können die mir ja helfen.
 
Oben