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.