Portál AbcLinuxu, 9. května 2025 23:45

Dotaz: systemd, udev a náhrada za RUN+="socket:"

8.2.2013 09:21 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
systemd, udev a náhrada za RUN+="socket:"
Přečteno: 318×
Odpovědět | Admin

Zdravím, jak jednoduše upravit udev pravidla spouštějící akci na socketu na systému stojícím na systemd verze cca 180 a novější?

Na Archlinuxu chci rozchodit rozchodit zákaznickou aplikaci komunikující s USB zařízením, která vyžaduje přidání několika udev pravidel typu:
ATTRS{idVendor}=="abcd", ATTRS{idProduct}=="1234", SYMLINK+="xyz_%k", MODE="0666", OPTIONS+="last_rule", RUN+="socket:@/my/abstract/socket"

Bohužel po slepém přidání pravidel a připojení zařízení jej aplikace nevidí a v logu je:
Feb 7 08:48:38 komp kernel: [57215.176660] usb 1-1.3: unable to get BOS descriptor
Feb 7 08:48:38 komp systemd-udevd[29344]: failed to execute '/usr/lib/udev/socket:@/my/abstract/socket' 'socket:@/my/abstract/socket': No such file or directory

Dočetl jsem se o zrušení podpory toho typu pravidel a doporučení úpravy aplikace, aby provedla nějakou registraci pomocí libudev... To v mém případě není možné, já nemám zdrojáky a zákazník ji určitě upravovat nebude (mimo jiné i proto, že nepoužívám jím doporučovanou distribuci)

Zkusil jsem pravidlo upravit na:
ATTRS{idVendor}=="abcd", ATTRS{idProduct}=="1234", SYMLINK+="xyz_%k", MODE="0666", OPTIONS+="last_rule", RUN+="/usr/bin/socat - ABSTRACT-SENDTO:/my/abstract/socket"
ale nepomohlo to. Zkusil jsem taky cvičně nahradit RUN za:
RUN+="/usr/bin/socat - GOPEN:/tmp/added_1234_abcd.log"
log soubor se opravdu vytvořil, ale je prázdný, takže můj předpoklad, že jádro předá data přes stdin, je asi špatný...

Máte někdo nápad na řešení problému jinak než změnou distra?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Pavel Stárek avatar 9.2.2013 12:08 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: systemd, udev a náhrada za RUN+="socket:"
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevím sice co je ten příkaz socket za příkaz (z jakého balíku), ale zkusil bych použít absolutní cestu k tomu příkazu v tom pravidle RUN (RUN+="/usr/bin/socket:@/my/abstract/socket"). Jinak to hledá v /usr/lib/udev jak ti ostatně píše log.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
9.2.2013 18:41 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
Rozbalit Rozbalit vše Re: systemd, udev a náhrada za RUN+="socket:"

Tak jednoduché to bohužel není, "příkaz" socket je interně handlovaný udevem, tzn. není viditelný v souborovém stromu. Cesta z logu je výchozí pro příkazy bez absolutní cesty, které ale nejsou interní... celkem zamotané, že? To asi byl i jeden z důvodů jeho odstranění.

Nějaké další nápady?

9.2.2013 19:06 chrono
Rozbalit Rozbalit vše Re: systemd, udev a náhrada za RUN+="socket:"
Je otázne, či verzia 180 ten socket ešte stále podporuje (pretože od verzie 178 udev písalo upozornenie, že podpora bude odstránená).
9.2.2013 19:10 chrono
Rozbalit Rozbalit vše Re: systemd, udev a náhrada za RUN+="socket:"
Inak takmer určite sa to v novšej verzii rieši nejakým súborom pre systemd a nie pravidlom pre udev.
10.2.2013 14:42 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
Rozbalit Rozbalit vše Re: systemd, udev a náhrada za RUN+="socket:"

Od verze 178 se vypisuje varování, že to přestane být podporované a od verze 183 to už nepodporuje. Doporučované řešení je úprava aplikací tak, aby místo procedury udev_monitor_new_from_socket používaly udev_monitor_new_from_netlink. Ale jak už jsem psal, zdrojáky aplikace nemám a zákazník ji jen kvůli mě neupraví :-(

Víš něco bližšího "nějakém souboru pro systemd"? Jeho možnosti jsem nedávno celkem důkladně procházel (kvůli multiseat konfiguraci), ale na nic vhodného jsem nenarazil...

10.2.2013 14:51 T.O.M. | skóre: 22 | blog: T.O.M.'s blog | Ostrava
Rozbalit Rozbalit vše Re: systemd, udev a náhrada za RUN+="socket:"

BTW, procedura udev_monitor_new_from_netlink už je v udev dlouho (i ve verzi 151 v mně doporučovaném Ubuntu 10.04), takže nechápu, proč se používá ta druhá...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.