Shell mit starten bei hotplug

Hallo!
Ich möchte gerne ein Shell starten, wenn ich ein bestimmtes USB/HID-Gerät (mit best. VendorID und ProductID) anstecke...das muss in /etc/hotplug/ möglich sein, nur wie??? Weiß das zufällig wer von euch???
lg

attachment.htm (389 Bytes)

Günther Obrist wrote:

Hallo!
Ich möchte gerne ein Shell starten, wenn ich ein bestimmtes
USB/HID-Gerät (mit best. VendorID und ProductID) anstecke...das muss in
/etc/hotplug/ möglich sein, nur wie??? Weiß das zufällig wer von euch???

Wenn du udev verwendest ist das über eine udev-Rule sicher machbar. Auf
folgender Seite solltest du die wichtigsten Informationen dazu finden:
http://www.reactivated.net/writing_udev_rules.html

Hallo!
Hab jetzt das ausprobiert, aber hab nur gefunden, dass wenn ich mein HID anschließe es halt anders bezeichnet wird, aber Programmaufruf ist damit soweit i des gesehen hab nicht möglich...
Gibt es da eine andere Möglichkeit???

Hannes Mayr <bik(a)bauchlandung.org> schrieb: Günther Obrist wrote:

Hallo!
Ich möchte gerne ein Shell starten, wenn ich ein bestimmtes
USB/HID-Gerät (mit best. VendorID und ProductID) anstecke...das muss in
/etc/hotplug/ möglich sein, nur wie??? Weiß das zufällig wer von euch???

Wenn du udev verwendest ist das über eine udev-Rule sicher machbar. Auf
folgender Seite solltest du die wichtigsten Informationen dazu finden:
http://www.reactivated.net/writing_udev_rules.html

attachment.htm (1.16 KB)

Günther Obrist wrote:

Hallo!
Hab jetzt das ausprobiert, aber hab nur gefunden, dass wenn ich mein HID
anschließe es halt anders bezeichnet wird, aber Programmaufruf ist damit
soweit i des gesehen hab nicht möglich...
Gibt es da eine andere Möglichkeit???

Doch es ist möglich, `man udev` sagt folgendes:

PROGRAM
     Call external program. This key is valid if the program returns
successful. The environment variables of udev are also available to the
program. The string returned by the program may be additionally matched
with the RESULT key in the same or any later rule.

Könnte dann z.B. so aussehen:
BUS="scsi", KERNEL="sda", ACTION="add",
PROGRAM="/usr/bin/mount_my_usbstick.sh"

Man kann in der udev.conf übrigens das Debugging einschalten, dann sieht
man im Logfile was udev mit den Regeln anstellt.

Hannes

Komischerweise, funktioniert es, wenn ich 'udevtest' verwende...dann wird das Shell aufgerufen und das Programm gestartet. Wenn ich aber das Gerät einstecke, passiert nichts...
kann mir das nicht so recht erklären...

Bei mir ist das udev.conf schon auf debug eingestellt gewesen(*_log = yes), aber das zeigt mir nicht das gleiche an wie udevtest an(mit 'tail -f /var/log/messages)

Wie kann des sein?

Hannes Mayr <bik(a)bauchlandung.org> schrieb: Günther Obrist wrote:

Hallo!
Hab jetzt das ausprobiert, aber hab nur gefunden, dass wenn ich mein HID
anschließe es halt anders bezeichnet wird, aber Programmaufruf ist damit
soweit i des gesehen hab nicht möglich...
Gibt es da eine andere Möglichkeit???

Doch es ist möglich, `man udev` sagt folgendes:

PROGRAM
     Call external program. This key is valid if the program returns
successful. The environment variables of udev are also available to the
program. The string returned by the program may be additionally matched
with the RESULT key in the same or any later rule.

Könnte dann z.B. so aussehen:
BUS="scsi", KERNEL="sda", ACTION="add",
PROGRAM="/usr/bin/mount_my_usbstick.sh"

Man kann in der udev.conf übrigens das Debugging einschalten, dann sieht
man im Logfile was udev mit den Regeln anstellt.

Hannes

attachment.htm (2.44 KB)

Aja...ich verwende diesen eintrag:

BUS="usb", SYSFS{serial}="1.0.0", NAME="usb/%k", SYMLINK= "usb/Moeller_HID_GW", PROGRAM="/usr/bin/eclipse"
(eclipse ist ein Shell das Eclipse startet;nur als Beispiel-auf alle Fälle mit udevtest startet es, beim einstecken nicht:-( )

Hannes Mayr <bik(a)bauchlandung.org> schrieb: Günther Obrist wrote:

Hallo!
Hab jetzt das ausprobiert, aber hab nur gefunden, dass wenn ich mein HID
anschließe es halt anders bezeichnet wird, aber Programmaufruf ist damit
soweit i des gesehen hab nicht möglich...
Gibt es da eine andere Möglichkeit???

Doch es ist möglich, `man udev` sagt folgendes:

PROGRAM
     Call external program. This key is valid if the program returns
successful. The environment variables of udev are also available to the
program. The string returned by the program may be additionally matched
with the RESULT key in the same or any later rule.

Könnte dann z.B. so aussehen:
BUS="scsi", KERNEL="sda", ACTION="add",
PROGRAM="/usr/bin/mount_my_usbstick.sh"

Man kann in der udev.conf übrigens das Debugging einschalten, dann sieht
man im Logfile was udev mit den Regeln anstellt.

Hannes

attachment.htm (2.29 KB)

Hallo,

Günther Obrist wrote:

Aja...ich verwende diesen eintrag:

BUS="usb", SYSFS{serial}="1.0.0", NAME="usb/%k", SYMLINK= "usb/Moeller_HID_GW", PROGRAM="/usr/bin/eclipse"
(eclipse ist ein Shell das Eclipse startet;nur als Beispiel-auf alle Fälle mit udevtest startet es, beim einstecken nicht:-( )

Hab das ganze jetzt mit meiner Festplatte am USB probiert und folgende
Regel funktioniert hier ohne Probleme:

BUS=="usb", SYSFS{serial}=="DEF10A2869AC", ACTION=="add",
RUN="/root/run_udev_prog.sh"

Ersetze die Option PROGRAM mit RUN="/usr/bin/eclipse".
RUN wird aufgerufen, wenn die Regel als gültig erkannt wurde (in
diesem Fall: die Seriennummer passt zum USB-Device). PROGRAM hingegen
dient zum Prüfen der Gültigkeit einer Regel (der Rückgabewert wird
kontrolliert).

Wenn das immer noch nicht hilft, was schreib denn udev ins Logfile
wenn das USB-Device eingesteckt wird und wie ist die Ausgabe von
udevinfo -a -p `udevinfo -q path -n /dev/usb/<name_des_usb_device>`?
Wird der symbolische Link /dev/usb/Moeller_HID_GW überhaupt erstellt,
um sagen zu können, dass die Regel ausgeführt wird (sollte dann
allerdings auch im Logfile stehen)?

Hannes

Es funkt noch immer net...
Meine rule:

BUS=="usb", SYSFS{serial}=="1.0.0", NAME="usb/%k", SYMLINK="usb/Moeller_HID_GW", RUN="/usr/bin/eclipse"

Mein logfile beim Ein- und Ausstecken:

Nov 25 09:00:31 localhost kernel: usb 1-1: new full speed USB device using address 10
Nov 25 09:00:31 localhost kernel: drivers/usb/input/hid-core.c: ctrl urb status -32 received
Nov 25 09:00:31 localhost kernel: hiddev96: USB HID v1.11 Device [MOELLER MOELLER USB Gateway] on usb-0000:00:1f.2-1
Nov 25 09:00:32 localhost usb.agent[4883]: usbhid: already loaded
Nov 25 09:00:39 localhost kernel: usb 1-1: USB disconnect, address 10

Die Ausgabe von

ewien-134:/home/ogu1234# udevtest /sys/class/usb/hiddev0/

version 056
looking at '/class/usb/hiddev0/'
parse error /etc/udev/rules.d/10-local.rules, line 4:102, rule skipped
opened class_dev->name='hiddev0'
configured rule in '/etc/udev/rules.d/udev.rules[23]' applied, 'hiddev0' becomes 'usb/%k'
creating device node '/dev/usb/hiddev0', major = '180', minor = '96', mode = '0660', uid = '0', gid = '0'

Also diese Line 4.102 ist bei "RUN=..." und der Link wird nicht gesetzt, wenn ich aber Program lasse dann wird der symbolische Link gemacht...
Irgendwie scheint es dieses RUN bei mir nicht zu gebn...glaub ich halt...

Hannes Mayr <bik(a)bauchlandung.org> schrieb: Hallo,

Günther Obrist wrote:

Aja...ich verwende diesen eintrag:

BUS="usb", SYSFS{serial}="1.0.0", NAME="usb/%k", SYMLINK= "usb/Moeller_HID_GW", PROGRAM="/usr/bin/eclipse"
(eclipse ist ein Shell das Eclipse startet;nur als Beispiel-auf alle Fälle mit udevtest startet es, beim einstecken nicht:-( )

Hab das ganze jetzt mit meiner Festplatte am USB probiert und folgende
Regel funktioniert hier ohne Probleme:

BUS=="usb", SYSFS{serial}=="DEF10A2869AC", ACTION=="add",
RUN="/root/run_udev_prog.sh"

Ersetze die Option PROGRAM mit RUN="/usr/bin/eclipse".
RUN wird aufgerufen, wenn die Regel als gültig erkannt wurde (in
diesem Fall: die Seriennummer passt zum USB-Device). PROGRAM hingegen
dient zum Prüfen der Gültigkeit einer Regel (der Rückgabewert wird
kontrolliert).

Wenn das immer noch nicht hilft, was schreib denn udev ins Logfile
wenn das USB-Device eingesteckt wird und wie ist die Ausgabe von
udevinfo -a -p `udevinfo -q path -n /dev/usb/`?
Wird der symbolische Link /dev/usb/Moeller_HID_GW überhaupt erstellt,
um sagen zu können, dass die Regel ausgeführt wird (sollte dann
allerdings auch im Logfile stehen)?

Hannes

attachment.htm (3.11 KB)

Ich würde auch überprüfen, ob es nur das Eclipse nicht starten kann.
Eclipse ist ja eine Java Anwendung und daher wird /usr/bin/eclipse ein
shell script sein, das die VM startet und so weiter.

Vielleicht gibt es damit Schwierigkeiten?

Funktioniert ein anderes reines C Programm?

Vielleicht könnte die Lösung sein, anstatt direkt das shell script
anzugeben, die bash mit als Parameter das zu startende script anzugeben.

Happy hacking!
Patrick

Hallo!
Ich hab ein helloworld. c mit einem sleep kompiliert und eine shell erzeugt die es startet. aber auch da funktioniert es nicht...sicher, die Ausgabe seh i ned, is mir auch egal. Aber die Fehlermeldung ist dieselbe:
parse error.

der symbolische Link wäre mir ja auch egal(hab das ja nur zum Test mal gemacht),den brauch i net, ich möchte nur wenn ich das Gerät enstecke mein Programm starten...

Aja, gibt es auch ein event das mir den Prozess beendet, wenn ich es wieder ausstecke?

In meiner man page habe ich dieses RUN nicht gefunden...warum des? Fehlt mir da vielleciht ein update oder so???

Patrick Ohnewein <patrick.ohnewein(a)lugbz.org> schrieb: Ich würde auch überprüfen, ob es nur das Eclipse nicht starten kann.
Eclipse ist ja eine Java Anwendung und daher wird /usr/bin/eclipse ein
shell script sein, das die VM startet und so weiter.

Vielleicht gibt es damit Schwierigkeiten?

Funktioniert ein anderes reines C Programm?

Vielleicht könnte die Lösung sein, anstatt direkt das shell script
anzugeben, die bash mit als Parameter das zu startende script anzugeben.

Happy hacking!
Patrick

attachment.htm (1.56 KB)

Hallo Günther,

Günther Obrist wrote:

Aja, gibt es auch ein event das mir den Prozess beendet, wenn ich
es wieder ausstecke?

ja, mit ACTION=="remove" und ein Script, das den Prozess wieder killt.

In meiner man page habe ich dieses RUN nicht gefunden...warum des?
Fehlt mir da vielleciht ein update oder so???

Sieht so aus als kennt deine udev Version noch kein RUN. Das lässt
auch auf den parse error schließen. Laut Changelog
(http://lwn.net/Articles/136970/) scheint das erst ab Version 057
dazugekommen zu sein, du verwendest Version 056.

Hast du eine Möglichkeit udev bei deiner Distribution upzudaten?

Hannes

Hab Debian, ein Stable version...
Hab schon probiert mit

Apt-get install udev

Aber da wird mir gesagt, dass ich schon die aktuellste Version habe...
Geht das irgendwie anders?