Usiłuję zapobiec uruchomieniu menedżera modemów po podłączeniu telefonu komórkowego do portu USB.
Próbowałem dodać niestandardową regułę z udev, ale moje niestandardowe reguły wydają się ignorowane. Utworzyłem plik, /etc/udev/rules.d/99-mm-usb-device-blacklist.rules
który zawiera
# LG Phone
ATTRS{idVendor}=="1004", ENV{ID_MM_DEVICE_IGNORE}="1"
A jednak, kiedy podłączam telefon i sprawdzam dmesg, otrzymuję to:
[ 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
Próbowałem również edytować, /lib/udev/rules.dev/77-mm-usb-device-blacklist.rules
ale to też nie działało. czego mi brakuje? Jaki byłby pomocny krok w debugowaniu tego?
Aktualizacja: Uruchomienie udevadm info --export-db
pokazuje aktualizację reguły udev. Odpowiedni wynik to:
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
Dlatego menedżer modemu powinien ignorować urządzenie. A jednak mój komputer próbuje zainicjować połączenie sieciowe przez telefon za każdym razem, gdy podłączam go do portu USB. Czy istnieje inny program uruchamiany przez udev?
źródło
ID_MM_CANDIDATE
nie pojawia się na wyjściu urządzenia USB, ale w wyjściu bazy danych znajduje się osobny wpis dla urządzenia TTY, który ma zarównoID_MM_CANDIDATE=1
iID_MM_DEVICE_IGNORE=1
. Dzienniki debugowania Modem Manager pokazują, że rzeczywiście sonduje urządzenie.Odpowiedzi:
Chociaż może istnieć sposób, aby to zrobić
udev
, znalazłem znacznie prostsze działające rozwiązanie w tym pytaniu AskUbuntu .Podsumowując, możesz powiedzieć Menedżerowi sieci, aby nie zarządzał niektórymi urządzeniami, dodając wiersz do pliku .conf.
Najpierw znajdź adres MAC swojego telefonu komórkowego. Uruchom
dmesg
z terminala po podłączeniu; jeden z wydruków powinien mieć mac. Linia była dla mnie:Następnie otwórz
/etc/NetworkManager/NetworkManager.conf
z uprawnieniami superużytkowników i dodaj komputer Mac jako urządzenie niezarządzane. To jest mojeNetworkManager.conf
; Dodałem dwie ostatnie linie.źródło
Modem Manager można skonfigurować tak, aby używał innego zasad filtrowania , a znaczniki udev, takie jak
ID_MM_DEVICE_IGNORE
, nie mają wpływu nastrict
zasady filtrowania.Możesz określić, które zasady Modem Manager używa w twoim systemie, wyświetlając jego status:
Pokazuje to również, że odpowiedni plik usługi to
/lib/systemd/system/ModemManager.service
. Możemy edytować ten plik na różne sposoby, aby wyłączyć sondowanie określonego urządzenia.Aby użyć innej polityki, która będzie odwoływać się do reguł czarnej listy udev, możemy zmienić polecenie w usłudze:
Dostępne opcje to
default
(po prostu użyj reguł czarnej listy) lubparanoid
(podobnie jak,strict
ale także użyj reguł czarnej listy). TheDokumentacja wspomina ten nie jest zalecany jako wsparcie dla czarnej listy reguł może być zastąpiony w przyszłości.Inną opcją jest filtrowanie klasy urządzeń przy użyciu jednej z kilku zmiennych środowiskowych specyficznych dla TTY . Można to osiągnąć, dodając wiersz do
[Service]
sekcji pliku usługi. Na przykład, aby zabronić sondowania urządzeń ACM TTY:Po zmianie pliku usługi załaduj ponownie
systemctl
konfigurację i uruchom ponownie ModemManager:Do celów debugowania przydatne może być oglądanie dzienników menedżera modemu podczas podłączania urządzenia. Aby włączyć rejestrowanie debugowania, uruchom:
Aby obejrzeć komunikaty dziennika filtru, uruchom:
Teraz, kiedy podłączysz urządzenie, powinieneś zobaczyć linie takie jak:
Aby przywrócić rejestrowanie ModemManager do poprzedniego stanu, uruchom:
źródło
(tylko ze względu na naukę, ponieważ problem został już rozwiązany ...)
udev czyta / wykonuje swoje reguły w kolejności alfabetycznej [1].
Może to oznaczać, że twoje ustawienia powinny zostać zastąpione przez NetworkManager, co oznacza, że twoja reguła jest bezużyteczna.
Jeśli zmienisz nazwę reguły od
99-
na,99999-
czy ta zmiana pomoże ci?[1] /unix/204979/why-do-the-rules-in-udev-rules-d-have-numbers-in-front-of-them
źródło
To rozwiązanie pomoże mi dla ModemManager 1.10.0 (Ubuntu 18.04)
ModemManager -V
Możesz dowiedzieć się więcej: Typowe tagi udev
Utwórz plik
/etc/udev/rules.d/49-stm32.rules
i dodaj to:Po zapisaniu pliku i uruchomieniu:
sudo udevadm control --reload-rules
i (może nie jest to konieczne):
sudo systemctl restart ModemManager.service
Po ponownym podłączeniu urządzenia USB (fizycznie wyciągnij go i podłącz do portu USB) i ciesz się.
źródło