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_CANDIDATEUSBデバイスの出力には表示されませんが、TTYデバイスのデータベース出力には個別のエントリがあり、これにはとの両方がID_MM_CANDIDATE=1ありID_MM_DEVICE_IGNORE=1ます。Modem Managerのデバッグログは、実際にデバイスをプローブしていることを示しています。
イアンマッキノン

回答:


7

これを行う方法があるかもしれませんが、udevこのAskUbuntuの質問で、はるかに簡単な作業ソリューションを見つけました。

要約すると、.confファイルに行を追加することにより、特定のデバイスを管理しないようにNetwork Managerに指示できます。

まず、携帯電話のMACアドレスを見つけます。dmesgプラグインした後、ターミナルから実行します。印刷物の1つにmacが必要です。私のための行は次のとおりでした:

[ 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です。最後の2行を追加しました。

[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フィルターポリシーの下では無効です。

Modem Managerがシステムで使用しているポリシーを確認するには、そのステータスを表示します。

> 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(ブラックリストルールを使用する)またはparanoidstrictブラックリストルールを使用します)。ドキュメントには、ブラックリストルールのサポートは、将来的に廃止することができるよう、これは推奨されません言及します。

別のオプションは、いくつかのTTY固有の環境変数の 1つを使用してデバイスのクラスをフィルタリングすることです。これ[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

ブラックリストが使用されなくなったため、MMによって再度プローブされるArduinoデバイスでも同様の問題が発生しています。MMアップストリームとDebianでこれに関する問題をいくつか公開しました。gitlab.freedesktop.org / mobile
Matthijs Kooijman

0

(あなたはすでに問題を解決しているので、科学のためだけに...)

udevは、ルールをアルファベット順に読み取り/実行します[1]。
これは、NetworkManagerで設定を上書きする必要があることを意味する場合があります。これはルールが役に立たないことです。

ルールの名前をから99-に変更すると、99999-この変更は役に立ちますか?


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


5年前にこの問題が発生しましたが、この問題を経験したハードウェアはもうありません。ファイル名をいじったことを思い出すようですが、正確な状況を思い出すことはできません。
スーパー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.