Get the Fibocom L850-GL / Intel XMM7360 LTE modem working on Linux — with a GNOME Quick Settings toggle for mobile data, signal strength and APN.
This is the missing user-facing layer on top of the xmm7360-pci userspace driver: a boot service that brings the modem online, small helper scripts, and a GNOME Shell extension that adds a Mobile Data toggle to Quick Settings (just like the Wi-Fi switch) showing operator, RAT and signal in dBm.
Found on hardware such as the Lenovo IdeaPad Duet 3 (10IGL5 LTE) and many
other laptops shipping the Fibocom L850-GL (PCI ID 8086:7360).
If you searched for any of these, you're in the right place:
- The modem shows no signal / 0 bars / "not registered" on Linux, even though it works on Windows.
- GNOME Settings → Mobile Network is empty, or there is no mobile data toggle at all.
- ModemManager /
mmcli -Llists no modem, or detects the Fibocom but cannot connect. lspcishowsIntel Corporation XMM7360 LTE Advanced Modem, but nothing brings upwwan0.- The in-kernel
iosmdriver loads but only creates AT ports that never answer.
First, the most common false alarm: an empty / inactive SIM (no credit, not yet activated) produces exactly the "no signal, not registered" symptom and sends people down a driver rabbit hole for weeks. Put the SIM in a phone and confirm it actually has a working data plan before debugging drivers. (Ask me how I know.)
The L850's Intel XMM7360 does not expose an MBIM/QMI control port that
ModemManager can drive. With the in-kernel iosm driver you only get AT ports
plus a proprietary xmmrpc port:
- the AT ports stay silent — the modem only answers AT once it has been initialised and FCC-unlocked over the proprietary RPC channel;
- ModemManager (tested with 1.23.4, Intel plugin) cannot claim the
xmmrpcport ("unhandled port type").
So there is no native, ModemManager-based path on this hardware. The
xmm7360-pci userspace driver speaks
that proprietary RPC itself and creates a plain wwan0 network interface. This
project wraps that into a boot service and a desktop toggle.
- A Fibocom L850-GL / Intel XMM7360 modem (
lspci -nn | grep 7360). - A working, activated SIM with a data plan.
- The xmm7360-pci driver checked out
(
install.sh --buildcompiles it and sets it up via DKMS — see below). - GNOME Shell 45–48 (Wayland or X11) for the toggle. The helper scripts and boot service work without GNOME too.
python3with its D-Bus + GLib bindings (python3-dbus,python3-gi),iproute2,systemd,polkit; plusdkms,build-essentialand kernel headers for building the module.
sudo apt install dkms build-essential "linux-headers-$(uname -r)" # Debian/Ubuntu
sudo git clone https://github.com/xmm7360/xmm7360-pci /opt/xmm7360-pciYou don't need to build it by hand — the installer does that in the next step.
git clone https://github.com/michaelruck/fibocom-l850-gnome-lte
cd fibocom-l850-gnome-lte
sudo ./install.sh --xmm7360-dir /opt/xmm7360-pci --build--build compiles the kernel module and registers it with DKMS, so it
rebuilds automatically after every kernel update — no manual steps later.
(Prefer a one-off build without DKMS? Use --build-manual instead, but then you
must rebuild it yourself on each kernel upgrade — see Kernel updates.)
- Edit
/etc/fibocom-l850-lte/modem.confand setAPN=(see the table below), or set it later from the extension preferences. - Log out and back in, then:
gnome-extensions enable fibocom-l850-lte@michaelruck.github.io
sudo systemctl start fibocom-l850-up.serviceThe Mobile Data toggle now appears in the Quick Settings panel.
Most carriers need only the APN (no username/password). Pick yours; when unsure,
search "
| Country | Carrier | APN |
|---|---|---|
| AT | A1 | a1.net |
| AT | Magenta / T-Mobile | internet.t-mobile |
| AT | Drei / Three | drei.at |
| AT | Lidl Connect | drei.at |
| DE | Telekom | internet.telekom |
| DE | Vodafone | web.vodafone.de |
| DE | O2 / Telefónica | internet |
| FR | Orange | orange |
| FR | Free | free |
| IT | TIM | ibox.tim.it |
| IT | Vodafone | web.omnitel.it |
| ES | Movistar | movistar.es |
| UK | Three | three.co.uk |
| UK | Vodafone | internet |
| US | T-Mobile | fast.t-mobile.com |
| US | AT&T | broadband |
The operator name shown in the toggle comes from
/etc/fibocom-l850-lte/operators.csv (PLMN → name). Add a row if your carrier
isn't listed.
| Piece | Role |
|---|---|
99-fibocom-l850-mm-ignore.rules |
udev rule telling ModemManager to leave this modem alone (see below). |
fibocom-l850-up.service |
On boot: waits for the module, runs the bring-up wrapper. |
fibocom-l850-up |
Reads modem.conf, calls open_xdatachannel.py with your APN, registers DNS. |
fibocom-l850-daemon + fibocom-l850-daemon.service |
System D-Bus service (org.fibocom.l850) the extension talks to. Exposes Status, SetEnabled, SetApn; runs the helpers below as root. |
fibocom-l850-ctl on/off/status |
Brings the wwan0 link up/off (self-healing a dead session) + manages the default route. |
fibocom-l850-status |
Prints JSON: state, RSRP dBm, EARFCN, RAT, operator, signal bars. |
fibocom-l850-apn |
Rewrites the APN and reconnects (gated by the polkit action org.fibocom.l850.set-apn). |
| GNOME extension | Quick Settings toggle + preferences dialog. Calls the D-Bus service only — never runs sudo/pkexec itself. |
Routing is Wi-Fi first, LTE as fallback: the LTE default route uses a higher
metric (1000) than Wi-Fi (typically 600), so it only carries traffic when Wi-Fi
is down. Change METRIC in modem.conf to taste.
The status helper queries the modem's RPC channel read-only; it is safe to run while a data session is active.
Service note:
open_xdatachannel.pydeliberately exits with code1oncewwan0is up (it only stays resident with--dbus). The unit therefore usesType=oneshot+RemainAfterExit=yes+SuccessExitStatus=1, noRestart=— otherwise it loops re-attaching forever.
Once the xmm7360 driver brings the modem up, its AT ports (ttyXMM*) start
answering, and ModemManager will happily adopt the modem and let NetworkManager
show a second, native mobile-broadband toggle — often named after your SIM
(e.g. "Lidl"). That toggle cannot actually carry data here (the data path needs
the proprietary xmm7360 RPC channel), so it just competes with this project's
toggle and confuses things.
The installer ships etc/udev/rules.d/99-fibocom-l850-mm-ignore.rules, which
sets ID_MM_DEVICE_IGNORE=1 for the 8086:7360 device so ModemManager leaves
it alone. If you ever see a stray mobile toggle, confirm the rule is installed
and run:
sudo udevadm control --reload-rules && sudo udevadm trigger
sudo systemctl restart ModemManager
mmcli -L # should report "No modems were found"If you installed with --build (DKMS, the default): nothing to do. The
module rebuilds automatically whenever you install a new kernel. Check with:
dkms status xmm7360-pci # should list your current kernel as "installed"Just make sure the matching linux-headers- package is present (it
usually is, as a dependency of the kernel metapackage) so DKMS can build.
Only if you used --build-manual you must rebuild by hand after every
kernel upgrade, or LTE stops working until you do:
cd /opt/xmm7360-pci && make clean && make
sudo install -D xmm7360.ko "/lib/modules/$(uname -r)/extra/xmm7360.ko"
sudo depmod -a && sudo modprobe xmm7360wwan0never appears: isxmm7360loaded (lsmod | grep xmm7360)? Built for this kernel? Checkjournalctl -u fibocom-l850-up.service -b.- Connected but no internet / DNS fails: set
DNS=inmodem.confto your carrier's resolvers or a public one. Quote multiple servers, since the file is sourced by the shell:DNS="1.1.1.1 9.9.9.9". - Toggle shows "Unavailable" / does nothing: the D-Bus backend may be down.
Check
systemctl status fibocom-l850-daemon.serviceand test it directly:busctl --system call org.fibocom.l850 /org/fibocom/l850 org.fibocom.l850 Status. - "Apply" in preferences does nothing / isn't authorized: the polkit action
org.fibocom.l850.set-apnneeds an admin; authenticate at the password prompt. - Still "not registered": re-read the SIM warning at the top. Seriously.
The extension is published on extensions.gnome.org:
Fibocom L850 LTE Toggle
(extension #10251). That gives you one-click install of the front-end — but the
toggle only does something once the system D-Bus service and the out-of-tree
xmm7360-pci driver are installed, and only this repo sets those up. So run
install.sh (above) regardless; the EGO listing is a convenience for the GNOME
part.
The extension talks to the modem purely through the org.fibocom.l850 D-Bus
service (no sudo/pkexec). See docs/PUBLISHING.md for the
EGO history and packaging.
Built on top of the excellent xmm7360-pci userspace driver. This project only adds the boot service, helper scripts and GNOME integration.
GPL-3.0-or-later — same family as the driver it builds on.
