Udev kérdés

Fórumok

Sziasztok!

Egy Huawei E220-as 3G modemet szeretnék beállítani úgy, hogy amikor bedugom a gépbe, automatikusan csatlakozik.

Az /etc/udev/rules.d/55-huawei-e220.rules fájl tartalma:
SUBSYSTEM=="usb", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/opt/3gmodem/plugin.sh &"

Az /opt/3gmodem/plugin.sh több mindent is csinálna, többek között inídtana egy wvdialt, viszont a /dev/ttyUSB0 csak akkor jön létre, ha a plugin.sh már végzett. Ha sleep-et teszek bele, akkor is csak utána.

Ötlet?

Hozzászólások

SZVSZ ehhez nem az udevre van szükséget, hanem egy háttérben futó demonra, ami figyeli, hogy mikor jelenik meg a device file. Amikor megjelenik, akkor pedig lefuttatja a megfelelő scriptet.
Csaba

Ez egy tipikus szívás az udev-vel.

Én is többször, egészen konkrétan találkoztam ilyen gonddal, azaz amikor az udev meghívta a szkriptemet, még nem voltak meg a ttyUSB* fájlok. Ennek az volt az oka, hogy még nem fejeződött be az eszköz inicializálása. Az segített, hogy egy másik udev szabályt találtam ki, ami ugyanarra az eszközre vonatkozott, csak éppen akkor hívta meg a szkriptet, amikor a ttyUSB*-ok már létrejöttek.

Mondjuk próbálkozz valami ilyesmivel:
KERNEL=="ttyUSB0", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/opt/3gmodem/plugin.sh &"

A KERNEL helyett érdemes lehet még a KERNELS-szel is próbálkozni, ha a "magasabbrendű" eszközre akarsz hivatkozni... de igazából én sem udev-ből indítanám a tárcsázást, hanem egy kis démonból.
--
http://www.open-st.eu

Na ja, de a ttyUSB* eszközök csak akkor jönnek létre, ha az eszközt modemként inicializálja. Ez az ami alapból nem szokott menni. Gyönyörűen felismeri a kernel, hogy benne van a CDROM, az USBSTORAGE, meg az USBMODEM, csakhogy nem modemként inicializálja az eszközt. Így viszont nem jönnek létre a ttyUSB-k. Ezért szoktak a HUAWEI stick-ekhez usb_modeswitch-et használni.

Így van.

Azt elfelejtettem írni, hogy feltételezem, hogy be van töltve az option driver is. Mert az option driver automatikusan észreveszi ezt a modemet és egyből létre is hozza neki a ttyUSB* bejegyzéseket. Az usb_modeswitch is át tudja kapcsolni az E220-at (E272-t) (és nyilván még sok mást is), csak ennél a modemnél fölösleges használni, mert az option alapból tudja, és úgy sokkal egyszerűbb.
--
http://www.open-st.eu

Már része a kernelnek. Ahol én használom, ott modulként van fordítva, de induláskor egyből betöltjük. Pl. egy csomó Huawei modemet gyönyörűen meghajt, sokhoz nem is kell usb_modeswitch. (Ami vicces még, hogy néha az eject /dev/sr0 jobban működik, mint az usb_modeswitch).
--
http://www.open-st.eu

Nem tudom milyen linux-ot használsz de talán megoldás rá, ha Upstart event-based init daemon segítségével oldod meg, mert ott hivatkozhatsz arra mikor az interface up állapotba kerül

En probalnek valami ilyesmit:

RUN+="/opt/3gmodem/plugin1.sh"

aztan a /opt/3gmodem/plugin1.sh fajlba:

#!/bin/bash
nohup /opt/3gmodem/plugin.sh 2>&1 >/dev/zero &

vegul a /opt/3gmodem/plugin.sh elejere tennek egy "sleep 10"-et.
Teny, hogy nem szep megoldas, de akar mukodhet is... ;-)

A megoldás:

KERNEL=="ttyUSB0", ATTR{dev}=="188:0", SUBSYSTEMS=="usb", ATTRS{product}=="HUAWEI Mobile", ACTION=="add", RUN+="/bin/sh /opt/3gmodem/plugin.sh", OPTIONS+="last_rule"

--
Kum G.
Neked már van Linux pólód?

En igy hasznalom:

ashbringer:~# cat /etc/udev/rules.d/90-huawei_e630.rules
KERNELS=="ttyUSB0", SUBSYSTEMS=="usb-serial", DRIVERS=="option1", ATTRS{port_number}=="0", RUN="/usr/bin/pon pannon"