Wifi kartı takıldığında komut dosyasını otomatik çalıştır (udev)


9

udevBir kablosuz kart bağlandığında Debian sisteminin bash betiğini çalıştırmasını sağlamak için çalışıyorum .

Şimdiye kadar bu dosyayı oluşturdum /etc/udev/rules.d/wifi-detect.rules:

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"

Şimdilik, test.shbu içeriklerin çalışmasını sağlamaya çalışıyorum:

#!/bin/bash
/bin/echo "test!" > /test.txt

Ancak bazı nedenlerden dolayı kablosuz kartı bağladığımda hiçbir şey olmuyor gibi görünüyor, hiçbir test.txtdosya oluşturulmuyor.

Benim lsusbkartta:

Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n

Koşu udevadm monitor –envbu ben kartı bağladığınızda olur:

KERNEL[1017.642278] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb)
KERNEL[1017.644676] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)
KERNEL[1017.645035] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
KERNEL[1017.708056] remove   /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.714772] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb)
UDEV  [1017.733002] remove   /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.772669] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.798707] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)
KERNEL[1018.456804] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ieee80211/phy8 (ieee80211)
KERNEL[1018.465994] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan0 (net)
KERNEL[1018.479878] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/leds/ath9k_htc-phy8 (leds)
KERNEL[1018.483074] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/usb_device/usbdev1.20 (usb_device)
UDEV  [1018.600456] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/leds/ath9k_htc-phy8 (leds)
UDEV  [1018.604376] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ieee80211/phy8 (ieee80211)
UDEV  [1018.626243] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/usb_device/usbdev1.20 (usb_device)
KERNEL[1018.659318] move     /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
UDEV  [1018.758843] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
UDEV  [1018.932207] move     /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)

Etrafta pek çok örnek denedim ama çalışmasını sağlayamıyorum. Umarım birisi bana bu konuda yardımcı olabilir;) Teşekkür ederim!


DÜZENLE:

Bir şeyi basitleştirmek için, kuralımı şu şekilde değiştirdim:

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"

udevadm control --log-priority=info@ User1146332 önerdiği gibi ayarlamayı başardım ve bu ilginç günlüğü aldım:

Sep  9 16:27:53 iklive-rpi1 udevd[1537]: RUN '/bin/echo 'test' > /test.txt' /etc/udev/rules.d/wifi-detect.rules:1
Sep  9 16:27:53 iklive-rpi1 udevd[1544]: starting 'firmware.agent'
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 queued, 'remove' 'firmware'
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 forked new worker [1547]
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: 'firmware.agent' [1544] exit with return code 0
Sep  9 16:27:53 iklive-rpi1 udevd[1548]: starting '/bin/echo 'test' > /test.txt'
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: seq 663 running
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: no db file to read /run/udev/data/+firmware:1-1.3.4: No such file or directory
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: passed -1 bytes to netlink monitor 0x1af5ee0
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 done with 0
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: seq 663 processed with 0
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: '/bin/echo 'test' > /test.txt'(out) 'test > /test.txt'
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: '/bin/echo 'test' > /test.txt' [1548] exit with return code 0

Yani ... return code 0Başarılı bir tamamlama için çıkış kodu değil mi? Öyleyse neden sistemde herhangi bir dosya almıyorum?


DÜZENLEME 2:

@Htor tarafından ucu kullanarak bu çalışma başardı. Mevcut kuralım:

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"

Ancak bir nedenden dolayı komut 8 kez yürütülür, bundan kaçınmanın bir yolu var mı? Sanırım oluyor çünkü kablosuz kart sürücüleri yüklendiğinde, kartı neredeyse söküp takmaları gerekiyor. İpuçları?


1
EDIT ile ilgili: Eminim /bin/echogünlüğünüzün önerdiği gibi başarıyla yürütüldü. Komutunuzun çıktısı test > /test.txtgünlük durumlarınız gibidir. Bunun nedeni, karakterin >bağlamınızda özel bir anlamı olmamasıdır. Bu sadece geçtiğiniz üçüncü komut satırı argümanı echo. Kabuğunuzun verilen çizgiyi yorumlamasına izin verirseniz istediğinizi alırsınız /bin/echo 'test' > /test.txt. İkinci EDIT'inizde yaptığınız gibi. Örneğin, yaptığınızın aksine udevyürütmeye izin verirseniz, kökünüzde touch /test.txtyeni bir dosya görürsünüz.
— user1146332

Yanıtlar:


4

Bir süre önce benzer bir sorunum vardı ve çözüm RUN+=parçayı değiştirmekti RUN+="sh -c '/root/test.sh'". Şimdi, bu durumda kural bir komut değil, bir komut dosyası çağırıyor gibi ihtiyacınız olup olmadığını bilmiyorum.

Başka bir gözlem: kaldırmayı deneyin !gelen "test!"dize veya tek tırnak ile çift tırnak değiştirin. Patlama !muhtemelen kabuktaki özel anlamı nedeniyle sorun çıkarıyor ve çift tırnak bu anlamı koruyor.


Bu ya da onsuz !çalışmıyor.
— TCB13 9:12

RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"çalışır, ama nedense e dosyada 8 kez yazılı "test" var. Komut birden çok kez yürütülüyor gibi görünüyor: S
— TCB13

3

Benim tavsiye günlüğü önceliğini kümesi olacaktır udevden errüzere infoolan

 udevadm control --log-priority=info

Daha fazla bilgi görmek istiyorsanız bunu ayarlayın debug. Şimdi ne udevyaptığına dair çok ayrıntılı bilgi bulabilirsiniz /var/log/daemon.log(En azından debian ile ilgili bir sistemde). Genellikle bu çok kovalayan hatalara yardımcı olur.

Bu sadece sorununuzu çözen htor'un cevabının bir tamamlayıcısıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.