Правила udev здаються ігнорованими; не може перешкодити менеджеру модему захопити пристрій


17

Я намагаюся не допустити запуску менеджера модему, коли я підключаю свій мобільний телефон до USB-порту.

Я намагався додати користувацьке правило з udev, але мої користувацькі правила здаються ігнорованими. Я створив файл, /etc/udev/rules.d/99-mm-usb-device-blacklist.rulesякий містить

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

І все ж, коли я підключаю телефон і перевіряю dmesg, ось що я отримую:

[ 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

Я також спробував редагувати, /lib/udev/rules.dev/77-mm-usb-device-blacklist.rulesале це також не вийшло. Що я пропускаю? Що може бути корисним кроком у налагодженні цього?

Оновлення: Запуск udevadm info --export-dbпоказує, що правило udev оновлюється. Відповідним результатом є:

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

Тому менеджер модему повинен ігнорувати пристрій. І все ж мій комп'ютер намагається ініціалізувати мережеве підключення через мій телефон кожного разу, коли я підключаю його до порту USB. Чи є інша програма, яку запускає udev?


1
Ви запустили ModemManager --debug, щоб перевірити, що він робив із відповідним пристроєм? Я також трохи здивований, що не бачу ID_MM_CANDIDATE = 1 у цьому записі - можливо, це окремі пристрої сканування кодового шляху в ModemManager, які не поважають цей атрибут?
кіко

@kiko, у мене те саме питання, що й у автора запитання. ID_MM_CANDIDATEне відображається на виході USB-пристрою, але є окремий запис у висновку бази даних для пристрою TTY, і це має і те, ID_MM_CANDIDATE=1і ID_MM_DEVICE_IGNORE=1. Журнали налагодження Modem Manager показують, що це дійсно зондування пристрою.
Ian

Відповіді:


7

Хоча може бути способом зробити це з допомогою udev, я знайшов більш просте робоче рішення з цього AskUbuntu питання .

Підводячи підсумок, ви можете сказати Менеджеру мережі не керувати певними пристроями, додавши рядок у файл .conf.

Спочатку знайдіть мак-адресу свого мобільного телефону. Запустити dmesgз терміналу після того, як ви підключите його; один із друкованих виходів повинен мати мак. Лінія для мене:

[ 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

Далі, відкрийте /etc/NetworkManager/NetworkManager.confіз суперкористувачами суперкористувача та додайте до свого комп'ютера mac як некерований пристрій. Це моє NetworkManager.conf; Я додав останні два рядки.

[main]
plugins=ifupdown,keyfile
dns=dnsmasq

[ifupdown]
managed=false

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

6

Диспетчер модему може бути налаштований на використання різних політик фільтрів , а теги udev, такі як ID_MM_DEVICE_IGNOREне мають впливу в strictполітиці фільтрів.

Ви можете визначити, яку політику модем використовує у вашій системі, переглянувши її статус:

> 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

Це також показує, що відповідний файл служби є /lib/systemd/system/ModemManager.service. Ми можемо редагувати цей файл різними способами, щоб відключити зондування певного пристрою.

Щоб використовувати іншу політику, яка буде посилатися на правила чорного списку udev, ми можемо змінити команду в сервісі:

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

Параметри є default(просто використовуйте правила чорного списку) або paranoid(наприклад, strictале також використовуйте правила чорного списку). У документації згадується це не рекомендується, оскільки підтримка правил чорного списку може бути застаріла в майбутньому.

Інший варіант - фільтрувати клас пристроїв, використовуючи одну з декількох змінних середовища TTY . Цього можна досягти, додавши рядок до [Service]розділу файлу служби. Наприклад, заборонити зондування пристроїв ACM TTY:

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

Після зміни файлу служби перезавантажте systemctlконфігурацію та перезапустіть ModemManager:

sudo systemctl daemon-reload
sudo systemctl restart ModemManager

Для налагодження може бути корисним переглядати журнали менеджерів модему під час підключення пристрою. Щоб увімкнути журнал налагодження, запустіть:

sudo mmcli -G DEBUG;

Щоб переглянути повідомлення журналу фільтрів, запустіть:

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

Тепер, коли ви підключаєте свій пристрій, ви повинні побачити рядки на зразок:

# 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 до попереднього стану, запустіть:

sudo mmcli -G ERR

Якщо чорний список більше не використовується, у нас виникли подібні проблеми з пристроями Arduino, які знову перевіряються MM. Я відкрив кілька питань про це в ММ вгору по течії і Debian, див gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/127 і bugs.debian.org/cgi-bin/bugreport.cgi?bug=930264
Matthijs

0

(тільки заради науки, оскільки ви вже вирішили своє питання ...)

udev читає / виконує свої правила в алфавітному порядку [1].
Це може означати, що ваші налаштування повинні бути перезаписані на NetworkManager, це ваше правило марно.

Якщо ви перейменуєте своє правило з 99-на, 99999-чи допоможе вам ця зміна?


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


Я мав цю проблему 5 років тому, і більше не маю жодного обладнання, з яким я зіткнувся з проблемою. Я, здається, пригадую возитися з іменами, але не можу згадати точні обставини.
superdesk

0

Це рішення допоможіть мені для ModemManager 1.10.0 (Ubuntu 18.04)
ModemManager -V

Ви можете дізнатися більше: Загальні теги udev

Створіть файл /etc/udev/rules.d/49-stm32.rulesі додайте це:

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

Після збереження файлу та запуску:
sudo udevadm control --reload-rules

і (можливо, це не потрібно):
sudo systemctl restart ModemManager.service

Після підключення USB-пристрою (фізично витягніть його і потягніть його в USB-порт) і насолоджуйтесь.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.