udev kuralları yok sayılıyor; modem yöneticisinin cihazı kapmasını engelleyemiyor


17

Cep telefonumu bir USB bağlantı noktasına taktığımda modem yöneticisinin çalışmasını engellemeye çalışıyorum.

Udev ile özel bir kural eklemeye çalıştım, ancak özel kurallarım yok sayılıyor. /etc/udev/rules.d/99-mm-usb-device-blacklist.rulesİçeren bir dosya oluşturdum

# LG Phone
ATTRS{idVendor}=="1004", ENV{ID_MM_DEVICE_IGNORE}="1"

Ve yine de telefonu takıp dmesg'i kontrol ettiğimde, elde ettiğim şey bu:

[ 1809.761940] usb 3-1: new high-speed USB device number 11 using xhci_hcd
[ 1809.778662] usb 3-1: New USB device found, idVendor=1004, idProduct=61fc
[ 1809.778670] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1809.778674] usb 3-1: Product: B Project USB Device
[ 1809.778677] usb 3-1: Manufacturer: LG Electronics. Inc
[ 1809.778680] usb 3-1: SerialNumber: XXXXXXXXXXXXXXXXX
[ 1809.779501] cdc_acm 3-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 1809.779584] cdc_acm 3-1:1.0: ttyACM0: USB ACM device
[ 1809.780899] cdc_ether 3-1:1.3 usb0: register 'cdc_ether' at usb-0000:00:14.0-1, CDC Ethernet Device, 6e:34:73:4f:68:4c
[ 1809.781454] scsi8 : usb-storage 3-1:1.5
[ 1809.807331] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
[ 1809.816566] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
[ 1809.816759] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready

Ben de düzenlemeyi denedim /lib/udev/rules.dev/77-mm-usb-device-blacklist.rulesama bu da işe yaramadı. Neyi kaçırıyorum? Bu hata ayıklamada yararlı bir adım ne olabilir?

Güncelleme: Çalışıyor udevadm info --export-dbudev kuralının güncellendiğini gösterir. İlgili çıktı:

P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7
N: bus/usb/002/012
E: BUSNUM=002
E: DEVNAME=/dev/bus/usb/002/012
E: DEVNUM=012
E: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7
E: DEVTYPE=usb_device
E: DRIVER=usb
E: ID_BUS=usb
E: ID_MM_DEVICE_IGNORE=1
E: ID_MODEL=B_Project_USB_Device
E: ID_MODEL_ENC=B\x20Project\x20USB\x20Device
E: ID_MODEL_ID=61fc
E: ID_REVISION=0216
E: ID_SERIAL=LG_Electronics._Inc_B_Project_USB_Device_XXXXXXXXXXXXX
E: ID_SERIAL_SHORT=XXXXXXXXXXXX
E: ID_USB_INTERFACES=:020201:0a0000:ffffff:020600:080650:
E: ID_VENDOR=LG_Electronics._Inc
E: ID_VENDOR_ENC=LG\x20Electronics.\x20Inc
E: ID_VENDOR_ID=1004
E: MAJOR=189
E: MINOR=139
E: PRODUCT=1004/61fc/216
E: SUBSYSTEM=usb
E: TYPE=239/2/1
E: UDEV_LOG=7
E: USEC_INITIALIZED=5987581808

Bu nedenle modem yöneticisi cihazı görmezden gelmelidir. Yine de bilgisayarım, USB bağlantı noktasına her taktığımda telefonum aracılığıyla bir ağ bağlantısı başlatmaya çalışıyor. Udev'in başlattığı başka bir program var mı?


1
Söz konusu cihazla ne yaptığını kontrol etmek için ModemManager - debug'u çalıştırdınız mı? Ben de bu girişte ID_MM_CANDIDATE = 1 görmüyorum biraz şaşırdım - belki de bu özelliğe uymayan ModemManager'da ayrı bir kod yolu tarama cihazı var mı?
kiko

@kiko, soru yazarı ile aynı sorunum var. ID_MM_CANDIDATEUSB aygıt çıkışında görünmüyor, ancak TTY aygıtı için veritabanı çıkışında ayrı bir giriş var ve bunun hem ID_MM_CANDIDATE=1ve de var ID_MM_DEVICE_IGNORE=1. Modem Manager hata ayıklama günlükleri, cihazın gerçekten problandığını gösterir.
Ian Mackinnon

Yanıtlar:


7

Bunu yapmanın bir yolu olsa da udev, bu AskUbuntu sorusunda çok daha basit bir çalışma çözümü buldum .

Özetlemek gerekirse, Ağ Yöneticisine .conf dosyasına bir satır ekleyerek belirli cihazları yönetmemesini söyleyebilirsiniz.

İlk olarak, cep telefonunuzun mac adresini bulun. Taktıktan dmesgsonra terminalden çalıştırın ; çıktılardan birinde mac olmalıdır. Benim için satır:

[ 4691.112016] cdc_ether 3-1:1.3 usb0: register 'cdc_ether' at usb-0000:00:14.0-1, CDC Ethernet Device, de:1a:28:c7:db:e6

Ardından, /etc/NetworkManager/NetworkManager.confsüper kullanıcı ayrıcalıklarıyla açın ve telefonunuzun mac'unu yönetilmeyen bir cihaz olarak ekleyin. Bu benim NetworkManager.conf; Son iki satırı ekledim.

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

[keyfile]
unmanaged-devices=mac:de:1a:28:c7:db:e6

6

Modem Yöneticisi farklı filtre ilkeleri kullanacak şekilde yapılandırılabilir ve udev etiketlerinin filtre ilkesi ID_MM_DEVICE_IGNOREaltında etkisi yoktur strict.

Durumunu görüntüleyerek Modem Manager'ın sisteminizde hangi ilkeyi kullandığını belirleyebilirsiniz:

> sudo systemctl status ModemManager
● ModemManager.service - Modem Manager
   Loaded: loaded (/lib/systemd/system/ModemManager.service...
   Active: active (running) since ...
   ...
   CGroup: /system.slice/ModemManager.service
           └─644 /usr/sbin/ModemManager --filter-policy=strict

Bu aynı zamanda ilgili servis dosyasının olduğunu gösterir /lib/systemd/system/ModemManager.service. Bu dosyayı, belirli bir cihazın incelenmesini devre dışı bırakmak için farklı şekillerde düzenleyebiliriz.

Udev kara liste kurallarına atıfta bulunacak farklı bir politika kullanmak için hizmetteki komutu değiştirebiliriz:

ExecStart=/usr/sbin/ModemManager --filter-policy=default

Seçenekler default(sadece kara liste kurallarını kullanın) veya paranoid( strictkara liste kurallarını kullanın ancak aynı zamanda kullanın). Dokümantasyon bu kara liste kuralları için destek gelecekte eskitiliyor edilebilir tavsiye edilmez bahseder.

Başka bir seçenek, birkaç TTY'ye özgü ortam değişkeninden birini kullanarak bir sınıftaki sınıfı filtrelemektir . Bu [Service], hizmet dosyasının bölümüne bir satır eklenerek elde edilebilir . Örneğin, ACM TTY cihazlarının problanmasını yasaklamak için:

[Service]
...
Environment="MM_FILTER_RULE_TTY_ACM_INTERFACE=0"

Hizmet dosyasını değiştirdikten sonra systemctlyapılandırmayı yeniden yükleyin ve ModemManager'ı yeniden başlatın:

sudo systemctl daemon-reload
sudo systemctl restart ModemManager

Hata ayıklama amacıyla, cihazınızı bağlarken modem yöneticisi günlüklerini izlemek yararlı olabilir. Hata ayıklama günlüğünü etkinleştirmek için şunu çalıştırın:

sudo mmcli -G DEBUG;

Filtre günlüğü iletilerini izlemek için şunu çalıştırın:

journalctl -f | grep "ModemManager.*\[filter\]"

Şimdi cihazınızı bağladığınızda şu satırları görmelisiniz:

# Device allowed with strict filter policy
[filter] (tty/...): port allowed:... 

# Device filtered with default filter policy and udev tags
[filter] (tty/...): port filtered: device is blacklisted

# Device filtered with strict filter policy and environment variables
[filter] (tty/...) port filtered: forbidden

ModemManager günlüğünü önceki durumuna döndürmek için şunu çalıştırın:

sudo mmcli -G ERR

Kara liste artık kullanılmıyorsa, yine MM tarafından incelenen Arduino cihazlarında benzer problemler yaşıyoruz. MM akışında ve Debian'da bununla ilgili bazı sorunlar açtım, bkz. Gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127 ve bugs.debian.org/cgi-bin/bugreport.cgi?bug=930264
Matthijs Kooijman

0

(sadece bilim uğruna, sorununuzu zaten çözdüğünüz için ...)

udev kurallarını alfabetik sırayla okur / yürütür [1].
Bu, ayarlarınızın NetworkManager olarak üzerine yazılması gerektiği anlamına gelebilir, bu kuralınız işe yaramaz.

Eğer gelen Kuralınızı yeniden adlandırırsanız 99-için 99999-bu değişikliğin size yardım yapar?


[1] /unix/204979/why-do-the-rules-in-udev-rules-d-have-numbers-in-front-of-them


Bu sorunu 5 yıl önce yaşadım ve artık sorunu yaşadığım herhangi bir donanıma sahip değilim. Dosya isimleriyle uğraştığımı hatırlıyorum, ancak kesin koşulları hatırlayamıyorum.
superdesk

0

Bu, ModemManager 1.10.0 (Ubuntu 18.04) için bana yardımcı bir çözümdür
ModemManager -V

Daha fazla bilgi edinebilirsiniz: Ortak udev etiketleri

Bir dosya oluşturun /etc/udev/rules.d/49-stm32.rulesve ekleyin:

# 0483:5740 - STM32 in USB Serial Mode (CN5)
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_TTY_BLACKLIST}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{MTP_NO_PROBE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_PORT_IGNORE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_TTY_MANUAL_SCAN_ONLY}="1"

Dosyayı kaydettikten ve çalıştırdıktan sonra:
sudo udevadm control --reload-rules

ve (belki de gerekli değildir):
sudo systemctl restart ModemManager.service

USB aygıtını yeniden bağladıktan sonra (fiziksel olarak USB bağlantı noktasına çekin ve çekin) ve keyfini çıkarın.

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.