Fibocom L850 LTE on Linux: A ModemManager Dead End, and a GNOME Toggle

Lenovo IdeaPad Duet 3 10IGL5-LTE

My little Lenovo IdeaPad Duet 3 came with a built-in LTE modem. On Windows it “just worked.” On Linux it showed no signal and wouldn’t register. Getting it working turned out to be a two-part story: a quick (slightly embarrassing) SIM check, and then the real work of making Linux talk to this modem — which ModemManager flatly can’t. By the end the thing has a proper mobile-data switch in the GNOME Quick Settings panel, just like Wi-Fi.

The Mobile Data toggle in GNOME Quick Settings, showing operator, RAT and signal

If you just want the code: https://github.com/michaelruck/fibocom-l850-gnome-lte.

The symptom

The hardware is a Fibocom L850-GL, which is really an Intel XMM7360 (lspci shows Intel Corporation XMM7360 LTE Advanced Modem [8086:7360]). You find it in a bunch of “LTE” laptop variants.

On Linux the picture was bleak:

  • mmcli -L → no modem, or a modem that would never connect.
  • GNOME’s Mobile Network panel: empty.
  • Every signal indicator I could coax out of it said 0 / not registered.

First, the boring check: the SIM

Before blaming the driver, I checked the obvious thing — the SIM — and spotted it quickly: the old prepaid SIM had no credit left, so the network simply refused to register it. An empty SIM produces the exact “no signal, not registered” symptom that looks like a driver bug.

Topped it up, popped it back in, and the modem registered on the first try.

Lesson: check the SIM before you debug anything else. It costs two minutes and saves you from chasing a problem that isn’t there.

Why ModemManager doesn’t drive this modem

With a working SIM, the obvious path is ModemManager + NetworkManager, the way every other modem works. It doesn’t work here, and it’s worth knowing why so you don’t waste a weekend like I almost did again.

The in-kernel driver for the XMM7360 is iosm. It brings up only:

  • AT command ports (/dev/wwan0at0), and
  • a proprietary xmmrpc port.

There’s no MBIM/QMI control port. Worse, those AT ports are silent — the L850 won’t answer AT until it’s been initialised and FCC-unlocked over the proprietary RPC channel first. ModemManager (I tested 1.23.4 with the Intel plugin) can’t claim the xmmrpc port either — it just logs “unhandled port type.” So MM has nothing it can actually talk to.

Conclusion: on this modem there is no native ModemManager path, and therefore no native GNOME mobile-data toggle. You need a userspace driver that speaks the proprietary RPC itself.

The working stack: xmm7360-pci

That driver exists: xmm7360-pci. It’s an out-of-tree kernel module plus a Python bring-up script that performs the RPC dance and gives you a plain wwan0 network interface.

sudo apt install build-essential "linux-headers-$(uname -r)"
sudo git clone https://github.com/xmm7360/xmm7360-pci /opt/xmm7360-pci
cd /opt/xmm7360-pci && make

One thing to internalise: this module is out-of-tree and not DKMS-packaged, so every kernel update breaks LTE until you rebuild it:

cd /opt/xmm7360-pci && make clean && make
sudo install -D xmm7360.ko "/lib/modules/$(uname -r)/extra/xmm7360.ko"
sudo depmod -a && sudo modprobe xmm7360

The missing piece: desktop integration

xmm7360-pci gets you online, but it’s a script you run by hand. There’s no boot service, no toggle, no signal readout. I wanted the laptop to behave like a laptop: connect on boot, fail over to Wi-Fi when it’s around, and give me a switch in the top-right with bars and the operator name.

So I wrapped it up into a small project, fibocom-l850-gnome-lte:

  • a systemd service that brings the modem up on boot;
  • tiny helper scripts to toggle the wwan0 link and report status as JSON;
  • a GNOME Shell extension that adds a Mobile Data Quick Settings toggle showing operator, RAT and signal in dBm;
  • an APN field in the extension preferences, applied through a polkit-guarded helper (no editing config files by hand).

Routing is Wi-Fi-first: the LTE default route gets a higher metric than Wi-Fi, so it only carries traffic when Wi-Fi is gone.

Install is one script:

git clone https://github.com/michaelruck/fibocom-l850-gnome-lte
cd fibocom-l850-gnome-lte
sudo ./install.sh --xmm7360-dir /opt/xmm7360-pci --build

Three gotchas worth knowing

Building this on real hardware turned up a few things the README now warns about:

1. The systemd unit must tolerate exit 1. The bring-up script deliberately exits with code 1 once wwan0 is up (it only stays resident with --dbus). A naive Restart=on-failure turns that into an infinite re-attach loop. The unit uses Type=oneshot + RemainAfterExit=yes + SuccessExitStatus=1 and no Restart=.

2. ModemManager will grab the modem behind your back. Once xmm7360 brings the modem up, those ttyXMM* AT ports do start answering, ModemManager happily adopts the modem, and NetworkManager pops up a second, non-functional mobile toggle — in my case helpfully named after the SIM (“Lidl”). The fix is a udev rule that tells MM to ignore the device:

SUBSYSTEMS=="pci", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x7360", ENV{ID_MM_DEVICE_IGNORE}="1"

After that, mmcli -L reports “No modems were found” and only my toggle remains.

3. Changing the APN needs a module reload. The XMM7360 only accepts its RPC init once per module load. Re-running bring-up while it’s attached fails with ENODEV. So the “set APN” helper reloads xmm7360 before reconnecting.

Try it

The code is on GitHub: https://github.com/michaelruck/fibocom-l850-gnome-lte. It targets GNOME 45–48 and was tested on a Lenovo IdeaPad Duet 3 10IGL5 LTE, but it should help anyone stuck with a Fibocom L850-GL / XMM7360. You install it from the repo, not from extensions.gnome.org: EGO doesn’t allow extensions that call sudo/pkexec (which this one needs, since the modem has no ModemManager service to talk to), and it has a no-AI-generated-code rule that this project — honestly — falls under. So it’s manual install from GitHub.

If you found this because your “LTE laptop” shows no signal on Linux: check the SIM first, then come back and grab the driver.

YouTube Transcript Distiller – A Firefox Add-On That Reads So You Don’t Have To

drowning in media

You open a video. Twelve minutes. You watch. You wait. The one insight you came for arrives at minute nine — buried under filler, recaps, and sponsor breaks.

I built this add-on because I got tired of it.

What it does

YouTube Transcript Distiller fetches the full transcript of any YouTube video, sends it to Google Gemini AI with a customizable prompt, and posts the result directly into the YouTube comment field — formatted and ready to publish.

One click. The important points, right where other viewers can see them.

Why post it as a comment?

A good summary helps everyone. The more users share what a video is actually about, the less time we all waste on clickbait and padded content. YouTube’s own algorithm rewards watch time — this add-on rewards substance.

How to get it

  1. Install the add-on from Firefox Add-Ons
  2. Get a free Gemini API key at aistudio.google.com/app/apikey
  3. Enter the key under add-on settings (gear icon next to the button)
  4. Open any YouTube video with subtitles and click Transcript Distiller

That’s it.

Features

  • AI-powered summary via Google Gemini (free API key required)
  • Posts directly into the YouTube comment field
  • Prompt fully customizable — change the instruction to anything you want
  • Supports 11 languages: Arabic, Chinese, English, French, German, Hindi, Japanese, Korean, Portuguese, Russian, Spanish
  • UI adapts to your browser language automatically
  • Your API key stays in your browser — no tracking, no data collection

Usage statistics

171
summaries created  ·  last used 56 minutes ago

Response languages

LanguageCount
DE 138
EN 27
ES 2
RU 2
ZH 2

Source code

The full source is on GitHub: github.com/michaelruck/yt-transcript-distiller

Built at

marsgasse.com — Just another Basement Lab