aturan udev tampaknya diabaikan; tidak dapat mencegah manajer modem mengambil perangkat

17

Saya mencoba untuk mencegah manajer modem dari berjalan ketika saya pasang ponsel saya ke port USB.

Saya telah mencoba menambahkan aturan khusus dengan udev, tetapi aturan khusus saya tampaknya diabaikan. Saya membuat file /etc/udev/rules.d/99-mm-usb-device-blacklist.rulesyang berisi

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

Namun ketika saya mencolokkan telepon dan memeriksa dmesg, inilah yang saya dapatkan:

[ 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

Saya juga mencoba mengedit /lib/udev/rules.dev/77-mm-usb-device-blacklist.rulestetapi ini tidak berhasil. Apa yang saya lewatkan? Apa yang akan menjadi langkah membantu dalam men-debug ini?

Pembaruan: Menjalankan udevadm info --export-dbmenunjukkan aturan udev sedang diperbarui. Output yang relevan adalah:

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

Jadi manajer modem harus mengabaikan perangkat. Namun komputer saya terus mencoba menginisialisasi jaringan yang terhubung melalui telepon saya setiap kali saya tancapkan ke port USB. Apakah ada program lain yang diluncurkan udev?

superdesk
sumber
1
Apakah Anda menjalankan ModemManager --debug untuk memeriksa apa yang dilakukannya dengan perangkat yang dimaksud? Saya juga sedikit terkejut tidak melihat ID_MM_CANDIDATE = 1 pada entri itu - mungkin ini adalah perangkat pemindaian codepath yang terpisah di ModemManager yang tidak menghargai atribut itu?
kiko
@iko, saya memiliki masalah yang sama dengan penulis pertanyaan. ID_MM_CANDIDATEtidak muncul dalam output perangkat USB, tetapi ada entri terpisah dalam output database untuk perangkat TTY, dan ini memiliki keduanya ID_MM_CANDIDATE=1dan ID_MM_DEVICE_IGNORE=1. Log debug Manajer Modem menunjukkan bahwa ia memang sedang menyelidiki perangkat.
Ian Mackinnon

Jawaban:

7

Meskipun mungkin ada cara untuk melakukan hal ini dengan udev, saya menemukan solusi kerja yang lebih sederhana di AskUbuntu ini pertanyaan .

Untuk meringkas, Anda dapat memberi tahu Network Manager untuk tidak mengelola perangkat tertentu dengan menambahkan baris ke file .conf-nya.

Pertama, temukan alamat mac ponsel Anda. Jalankan dmesgdari terminal setelah Anda menghubungkannya; salah satu hasil cetak harus memiliki mac. Garis untuk saya adalah:

[ 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

Selanjutnya, buka /etc/NetworkManager/NetworkManager.confdengan hak istimewa pengguna super, dan tambahkan mac ponsel Anda sebagai perangkat yang tidak dikelola. Ini milik saya NetworkManager.conf; Saya menambahkan dua baris terakhir.

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

Modem Manager dapat dikonfigurasi untuk menggunakan kebijakan filter yang berbeda , dan tag udev seperti ID_MM_DEVICE_IGNOREtidak berpengaruh di bawah strictkebijakan filter.

Anda dapat menentukan kebijakan yang digunakan Modem Manager di sistem Anda dengan melihat statusnya:

> 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

Ini juga menunjukkan bahwa file layanan yang relevan adalah /lib/systemd/system/ModemManager.service. Kami dapat mengedit file ini dengan berbagai cara untuk menonaktifkan probing perangkat tertentu.

Untuk menggunakan kebijakan lain yang merujuk pada aturan blacklist udev, kita dapat mengubah perintah di layanan:

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

Pilihannya adalah default(cukup gunakan aturan daftar hitam) atau paranoid(seperti stricttetapi juga gunakan aturan daftar hitam). The dokumentasi menyebutkan ini tidak dianjurkan sebagai dukungan untuk aturan daftar hitam dapat usang di masa depan.

Pilihan lain adalah memfilter kelas perangkat menggunakan salah satu dari beberapa variabel lingkungan spesifik-TTY . Ini dapat dicapai dengan menambahkan baris ke [Service]bagian file layanan. Misalnya, untuk melarang menyelidik perangkat ACM TTY:

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

Setelah mengubah file layanan, muat ulang systemctlkonfigurasi dan mulai kembali ModemManager:

sudo systemctl daemon-reload
sudo systemctl restart ModemManager

Untuk keperluan debugging, mungkin berguna untuk menonton log manajer modem saat menghubungkan perangkat Anda. Untuk mengaktifkan debug logging, jalankan:

sudo mmcli -G DEBUG;

Untuk menonton pesan log filter, jalankan:

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

Sekarang ketika Anda menghubungkan perangkat Anda, Anda akan melihat garis seperti:

# 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

Untuk mengembalikan logging ModemManager ke kondisi sebelumnya, jalankan:

sudo mmcli -G ERR
Ian Mackinnon
sumber
Jika daftar hitam tidak digunakan lagi, kami mengalami masalah yang serupa dengan perangkat Arduino yang lagi-lagi diperiksa oleh MM. Saya telah membuka beberapa masalah tentang ini di MM upstream dan Debian, lihat gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127 dan bugs.debian.org/cgi-bin/bugreport.cgi?bug=930264
Matthijs Kooijman
0

(Hanya demi ilmu pengetahuan, karena Anda sudah menyelesaikan masalah Anda ...)

udev membaca / menjalankan aturannya dalam urutan abjad [1].
Ini bisa berarti bahwa pengaturan Anda harus ditimpa menjadi NetworkManager, itu aturan Anda tidak berguna.

Jika Anda mengubah nama aturan Anda dari 99-ke 99999-apakah perubahan ini membantu Anda?


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

mattia.b89
sumber
Saya memiliki masalah ini 5 tahun yang lalu, dan tidak lagi memiliki perangkat keras yang saya alami masalah dengan. Sepertinya saya ingat mengotak-atik nama file, tetapi tidak dapat mengingat keadaan yang tepat.
superdesk
0

Ini adalah solusi bantu saya untuk ModemManager 1.10.0 (Ubuntu 18.04)
ModemManager -V

Anda dapat mempelajari lebih lanjut: Tag udev umum

Buat file /etc/udev/rules.d/49-stm32.rulesdan tambahkan ini:

# 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"

Setelah menyimpan file dan jalankan:
sudo udevadm control --reload-rules

dan (mungkin itu tidak perlu):
sudo systemctl restart ModemManager.service

Setelah menghubungkan kembali perangkat USB (tarik secara fisik dan tarik ke dalam port USB) dan nikmati.

Антон К
sumber