Archiv verlassen und diese Seite im Standarddesign anzeigen : udev-Regeln werden mehrfach ausgeführt
Hi
ich habe einen VDR, wo ich manchmal meinen wlan-usb-stick einstecke um per ssh drauf zuzugreifen zu können. Jetzt wollte ich per udev ein Script schreiben, welches beim einstecken automatisch ssh startet. Ich habe folgende Regel definiert:
BUS=="usb", SYSFS{idProduct}=="011b", SYSFS{idVendor}=="0baf", ACTION=="add", RUN+="/usr/local/bin/udev-wlan-ssh"
/usr/local/bin/udev-wlan-ssh:
#!/bin/bash
/usr/local/bin/svdrpsend.pl MESG "WLAN aktiviert... starte SSH-Daemon..."
/etc/init.d/sshd start
Das ganze funktioniert allerdings zu gut... ;) Das Skript wird insgesamt 5x ausgeführt wenn ich den Stick einstecke... woran kann das liegen?
Es handelt sich um Suse Linux 10.1
Mfg
Vielleicht läuft die Initialisierung in mehreren Schritten. OK, wahrscheinlich technisch gesehen Müll, aber ein Beobachten von dmesg beim Einstecken könnte Aufschluss geben ;)
Gruß,
gadget
Im Log kann ich nichts auffälliges finden, außer halt dass sich ssh beschwert dass es öfter gestartet wird:
Dec 29 19:24:56 VDR kernel: usb 4-4: new high speed USB device using ehci_hcd and address 10
Dec 29 19:24:56 VDR kernel: usb 4-4: new device found, idVendor=0baf, idProduct=011b
Dec 29 19:24:56 VDR kernel: usb 4-4: new device strings: Mfr=1, Product=2, SerialNumber=3
Dec 29 19:24:56 VDR kernel: usb 4-4: Product: Remote NDIS 802.11 Wireless Adapter
Dec 29 19:24:56 VDR kernel: usb 4-4: Manufacturer: Broadcom
Dec 29 19:24:56 VDR kernel: usb 4-4: SerialNumber: 000000000001
Dec 29 19:24:56 VDR kernel: usb 4-4: no configuration chosen from 1 choice
Dec 29 19:24:56 VDR vdr: [4854] connect from 127.0.0.1, port 13277 - accepted
Dec 29 19:24:56 VDR vdr: [4854] SVDRP message: 'WLAN aktiviert... starte SSH-Daemon...'
Dec 29 19:24:56 VDR vdr: [4854] info: WLAN aktiviert... starte SSH-Daemon...
Dec 29 19:24:56 VDR vdr: [4854] closing SVDRP connection
Dec 29 19:24:57 VDR sshd[6439]: error: Bind to port 22 on :: failed: Address already in use.
Dec 29 19:24:57 VDR sshd[6439]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Dec 29 19:24:57 VDR sshd[6439]: fatal: Cannot bind any address.
Dec 29 19:24:57 VDR kernel: usb 4-4: bad CDC descriptors
Dec 29 19:24:57 VDR kernel: usb 4-4: reset high speed USB device using ehci_hcd and address 10
Dec 29 19:24:57 VDR kernel: ndiswrapper: driver usr5421 (U.S. Robotics Corporation,03/01/2005, 4.01.19.4) loaded
Dec 29 19:24:58 VDR kernel: wlan0: ethernet device 00:14:c1:16:51:ea using NDIS driver: usr5421, version: 0x4011405, NDIS version: 0x501, vendor: 'Broadcom RNDIS Network Adapter', 0BAF:011B.F.conf
Dec 29 19:24:58 VDR kernel: wlan0: encryption modes supported: WEP; TKIP with WPA, WPA2, WPA2PSK; AES/CCMP with WPA, WPA2, WPA2PSK
Dec 29 19:24:58 VDR vdr: [4854] connect from 127.0.0.1, port 13278 - accepted
Dec 29 19:24:58 VDR vdr: [4854] SVDRP message: 'WLAN aktiviert... starte SSH-Daemon...'
Dec 29 19:24:59 VDR vdr: [4854] closing SVDRP connection
Dec 29 19:24:59 VDR sshd[6470]: error: Bind to port 22 on :: failed: Address already in use.
Dec 29 19:24:59 VDR sshd[6470]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Dec 29 19:24:59 VDR sshd[6470]: fatal: Cannot bind any address.
Dec 29 19:24:59 VDR vdr: [4854] connect from 127.0.0.1, port 13279 - accepted
Dec 29 19:24:59 VDR vdr: [4854] SVDRP message: 'WLAN aktiviert... starte SSH-Daemon...'
Dec 29 19:24:59 VDR vdr: [4854] closing SVDRP connection
Dec 29 19:24:59 VDR sshd[6484]: error: Bind to port 22 on :: failed: Address already in use.
Dec 29 19:24:59 VDR sshd[6484]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Dec 29 19:24:59 VDR sshd[6484]: fatal: Cannot bind any address.
Dec 29 19:25:00 VDR vdr: [4854] connect from 127.0.0.1, port 13281 - accepted
Dec 29 19:25:00 VDR vdr: [4854] SVDRP message: 'WLAN aktiviert... starte SSH-Daemon...'
Dec 29 19:25:00 VDR vdr: [4854] info: WLAN aktiviert... starte SSH-Daemon...
Dec 29 19:25:00 VDR vdr: [4854] closing SVDRP connection
Dec 29 19:25:00 VDR sshd[6508]: error: Bind to port 22 on :: failed: Address already in use.
Dec 29 19:25:00 VDR sshd[6508]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Dec 29 19:25:00 VDR sshd[6508]: fatal: Cannot bind any address.
Dec 29 19:25:00 VDR ifup: Network interface is managed from NetworkManager
Dec 29 19:25:00 VDR ifup: NetworkManager will be advised to set up wlan0
Dec 29 19:25:00 VDR ifup: but it cannot be assured from here.
Dec 29 19:25:03 VDR vdr: [4854] connect from 127.0.0.1, port 13280 - accepted
Dec 29 19:25:03 VDR vdr: [4854] SVDRP message: 'WLAN aktiviert... starte SSH-Daemon...'
Dec 29 19:25:03 VDR vdr: [4854] closing SVDRP connection
Dec 29 19:25:03 VDR sshd[6555]: error: Bind to port 22 on :: failed: Address already in use.
Dec 29 19:25:03 VDR sshd[6555]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Dec 29 19:25:03 VDR sshd[6555]: fatal: Cannot bind any address.
Dec 29 19:25:05 VDR vdr: [4854] info: WLAN aktiviert... starte SSH-Daemon...
Dec 29 19:25:05 VDR kernel: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Dec 29 19:25:08 VDR SuSEfirewall2: Warning: ip6tables does not support state matching. Extended IPv6 support disabled.
Dec 29 19:25:08 VDR SuSEfirewall2: Setting up rules from /etc/sysconfig/SuSEfirewall2 ...
Dec 29 19:25:08 VDR SuSEfirewall2: batch committing...
Dec 29 19:25:08 VDR SuSEfirewall2: Firewall rules successfully set
Dec 29 19:25:10 VDR vdr: [4854] info: WLAN aktiviert... starte SSH-Daemon...
Dec 29 19:25:15 VDR vdr: [4854] info: WLAN aktiviert... starte SSH-Daemon...
Dec 29 19:25:17 VDR kernel: wlan0: no IPv6 routers present
Da ich schon mal über dasselbe Problem gestolpert bin, und es mich interessiert, habe ich mal etwas experimentiert, mangels eines WLAN-Sticks jedoch mit einem USB-Speicherstick. So sieht meine Test-Rule aus:
SUBSYSTEMS=="usb", ATTRS{idProduct}=="0100", ATTRS{idVendor}=="0d7d", ENV{USB}="%p", RUN+="/usr/local/bin/usb_test"
Es wird also eine Umgebungsvariable USB definiert, die jeweils die angelegte Gerätedatei enthält. Das aufgerufene Script usb_test schreibt diese dann in eine Datei
#!/bin/bash
/bin/echo $USB >> /root/usb_devices
Und das ist der Inhalt von /root/usb_devices nach Anschließen des USB-Sticks
/devices/pci0000:00/0000:00:1f.2/usb1/1-1
/devices/pci0000:00/0000:00:1f.2/usb1/1-1/1-1:1.0
/class/usb_endpoint/usbdev1.11_ep00
/class/usb_endpoint/usbdev1.11_ep83
/class/usb_endpoint/usbdev1.11_ep81
/class/scsi_host/host10
/class/usb_endpoint/usbdev1.11_ep02
/class/usb_device/usbdev1.11
/devices/pci0000:00/0000:00:1f.2/usb1/1-1/1-1:1.0/host10/target10:0:0/10:0:0:0
/class/scsi_disk/10:0:0:0
/class/scsi_device/10:0:0:0
/block/sdb
/block/sdb/sdb1
Das Script wird also dreizehn mal ausgeführt. Jetzt suchen wir uns ein Device aus und lassen udevinfo los
udevinfo -a -p /sys/class/usb_device/usbdev1.11
Das liefert ganz am Anfang
looking at device '/class/usb_device/usbdev1.11':
KERNEL=="usbdev1.11"
SUBSYSTEM=="usb_device"
Also ändern wir unsere Rule
SUBSYSTEM=="usb_device", ATTRS{idProduct}=="0100", ATTRS{idVendor}=="0d7d", ENV{USB}="%p", RUN+="/usr/local/bin/usb_test"
und nach Löschen von /root/usb_devices und erneuten Anschließen enthält diese nur noch
/class/usb_device/usbdev1.12
Man könnte auch die Rule unverändert lassen und im Script eine Abfrage einbauen:
/bin/echo $USB | /bin/grep -q usb_device && /bin/echo $USB >> /root/usb_devices
Vielleicht hilft dir das als Ansatzpunkt. Andere Lösungen würden mich auch interessieren.
danke für den Tipp, ich habe jetzt auch ein
ENV{USB}="%p", ergänzt, allerdings steht in der Datei nachher nur
%p
%p
%p
%p
%p
gibt es da noch andere Variablen? Kennt vll jemand ne Seite wo das genauer erklärt ist?
Wie wär's mit man udev?
$devpath, %p
The devpath of the device.
Du könntest also auch
ENV{USB}="$devpath"
verwenden. Warum "%p" bei dir nicht funktioniert, weiß ich nicht.
danke, man-page ist mir dann auch eingefallen nachdem ich geantwortet hatte... $devpath geht aber genausowenig wie die andern sachen wie %k oder %n
was mich am meisten verwundert ist dass die Zeile darüber ein
BUS=="usb", SYSFS{idProduct}=="011b", SYSFS{idVendor}=="0baf", PROGRAM="/bin/sh -c 'echo 1 > /sys/%p/device/bConfigurationValue'" für ndiswrapper funktioniert...
aber darunter
BUS=="usb", SYSFS{idProduct}=="011b", SYSFS{idVendor}=="0baf", ACTION=="add", ENV{USB}="%p", RUN+="/usr/local/bin/udev-wlan-ssh" eben nicht.. Oder gibt das Probleme 2 Regeln für ein Gerät zu definieren?
Laut Manpage sind die Substitutionen eigentlich nur für die Felder NAME, SYMLINK, PROGRAM, OWNER, GROUP und RUN vorgesehen. Du könntest die Variable auch dem Script als Parameter übergeben:
RUN+="/usr/local/bin/usb_test %p"
/bin/echo $1 >> /root/usb_devices
Als Parameter funktioniert es jetzt, es gibt:
/devices/pci0000:00/0000:00:10.3/usb1/1-4
/devices/pci0000:00/0000:00:10.3/usb1/1-4/1-4:1.0
/class/usb_device/usbdev1.4
/class/net/wlan0
/devices/pci0000:00/0000:00:10.3/usb1/1-4/1-4:1.1
dabei bietet /class/net/wlan0
KERNEL=="wlan0"
SUBSYSTEM=="net"
und nach dem hinzufügen von
SUBSYSTEM=="net" kommt nur noch eine Meldung...
Danke für die Hilfe
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.