HPのノートパソコンでハズレを引いて落ち込んでいたのですが、ラストチャンスということでもう一台購入するチャンスを手に入れました。変な欲を出してLTEモジュールがついたPCを選ぼうとMouseProのノートパソコンを購入しました。LenovoのThinkPadも考えましたが、HPのサポートの件でサポート評判の悪いメーカは却下されました。
さて、動作確認用OS・Windowsでは大体のテストは完了しopenSUSEを入れたわけですが、LTEモジュールはすぐには認識してくれませんでした。まあこれは想定していたことでしたし、lsusbやusb-devicesでは表示されているのでいろいろ調べてみることにしました。

追記(2022/04/03)
ATコマンドを使用して利用可能にする方法について別記事を作成しました。
MouseProのLTEモジュール(Telit LN940)をLinuxで使う(ATコマンド編)

環境

  • MousePro-NB510HL
  • openSUSE Tumbleweed
  • KDE Plasma Desktop

搭載されているデバイスを確認

$ usb-devices
...(略)...
T:  Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#=  2 Spd=5000 MxCh= 0
D:  Ver= 3.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 9 #Cfgs=  3
P:  Vendor=1bc7 ProdID=1900 Rev=03.10
S:  Manufacturer=Telit
S:  Product=Telit LN940 Mobile Broadband
...(略)...

USBデバイスとして接続されていて、Telit社のLN940というデバイスらしいです。
調べてみるとLinux用のドライバあるようで、マニュアルもあり(https://www.telit.com/wp-content/uploads/2018/03/Telit_LN940_Linux_SW_User-Guide_v1.2.pdf)それを読むと、Linuxカーネルにドライバが存在してそうだなと解析しました。

cdc_mbimとqmi_wwan

どうやらWWAN用のモジュールとしてcdc_mbimとqmi_wwanの二種類があるようで、どういう関係でどういう歴史があるかは今後調べていきたいと思いますが、とりあえずデバイスがどういう風に認識しているか確認します。

$ dmesg | grep ww

とするとcdc_etherとしてLTEモジュールが認識されていることを確認できます。
明らかに認識が間違っているのですが、無理やりudevなどでモジュールを変更しようとしても失敗するのでネットを漁っていると、 https://techship.com/faq/how-to-configure-telit-ln94-series-cellular-modules-to-qmi-mode-used-by-linux-systems-with-qmi-wwan-or-gobinet-driver/ を発見しました。
usb_modeswitchを使うらしいです。とりあえずusb_modeswitchやlibqmiやmodemmanagerをインストールします。(ModemManagerはsystemctlでenableしてstartしておきます)

設定


先にKDEのネットワーク設定からMobile Broadband Connectionを追加しておきます。
Docomo系のMVNO(OCN Mobile ONE)の場合は”Any CDMA device”=>”日本”=>”NTTdocomo”=>”My plan is not listed”=>”lte.ocn.ne.jp”=>”完了”で設定を追加して、ユーザ名(mobileid@ocn)とパスワード(mobile)とPIN(初期設定では0000)を設定して保存します。
次に

$ sudo usb_modeswitch -v 1bc7 -p 1900 -u 3

としてみます。再度usb_devicesで確認してみますと、cdc_mbimとして登録されています。
この状態でモバイルブロードバンドを「接続」をやってみると接続に一瞬成功するのですがすぐに切れてしまいます。usb_modeswitchで確認してみますとモードが2に戻っています。
仕方ないので

$ sudo usb_modeswitch -v 1bc7 -p 1900 -u 1

としてみますと、今度はqmi_wwanとして登録されています。
これで接続してみますとうまく接続されています。

接続が成功している状態

これを永続化させるためにudevに設定を追加します。

$sudo vi /etc/udev/rules.d/15-lte.rules

ATTR{idVendor}=="1bc7", ATTR{idProduct}=="1900", RUN+="/usr/sbin/usb_modeswitch -v 1bc7 -p 1900 -u 1"

これで再起動時に再接続されるようになります。(Wifiを優先させたい場合は自動接続を着ると良いと思います)

さらにスリープから復帰した際にusb_modeswitchが動作するようにsystemdのサービスを作成します。

$ sudo vi /etc/systemd/system/wwan-sleep-hook.service

[Unit]
Description=Exec usb_switch for the WWAN module at resume
After=sleep.target

[Service]
Type=simple
ExecStart=-/usr/sbin/usb_modeswitch -v 1bc7 -p 1900 -u 1

[Install]
WantedBy=sleep.target

作成した後はsystemctl enable wwan-sleep-hook.serviceで有効にしておきます。

書き忘れていることもあるかもしれないのでうまく行かない場合はコメントをください…

投稿者: PG_MANA

支離滅裂な自称プログラマー。 C,C++,Rust,JavaScript,PHP,HTML,CSS,OS自作,openSUSE,Arch,旅行 なんか色々してる人 #seccamp 17 19 20 23 #OtakuAssembly