This guide documents a working fix for a Quectel EM120R-GL PCIe LTE modem on a Debian/Ubuntu style Linux system using NetworkManager and ModemManager.
It was validated on a machine with:
- Quectel
EM120R-GL - Device ID
1eac:1001 - A Sri Lanka
SLTMobitelSIM NetworkManagerModemManager
The same pattern may also apply to other Quectel MBIM modems that are fcc-locked on Linux.
Symptoms
The modem is physically present, but mobile data does not come up on Linux even though the same SIM and modem work in Windows.
Typical signs:
-
lspci -nnshows the modem, for example:
05:00.0 Unassigned class [ff00]: Quectel Wireless Solutions Co., Ltd. EM120R-GL LTE Modem [1eac:1001]
-
mmcli -Lshows no modem becauseModemManageris not running, or it shows the modem but activation fails. -
nmcli device statusshows the WWAN device as disconnected or stuck connecting. - The ModemManager journal shows repeated messages like:
couldn't enable interface: 'Invalid transition'
- The raw Quectel MBIM vendor state shows:
sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state
and returns:
Radio state retrieved: 'fcc-locked'
Root Cause
On Debian/Ubuntu-style systems, ModemManager ships FCC unlock scripts for some integrated WWAN devices, but they are not always enabled by default.
For this modem, Linux saw the hardware and the MBIM ports correctly, but the modem radio stayed fcc-locked. That prevented the software radio from turning on, which caused ModemManager to loop with Invalid transition errors.
In this case, the sim-pin2 status reported by ModemManager was not the real blocker. Data started working once the FCC lock was cleared.
Step 1: Make Sure ModemManager Is Installed and Running
Check package and service state:
dpkg -l | rg -i 'modemmanager|network-manager|libmbim|libqmi'
systemctl status ModemManager --no-pager
If ModemManager is installed but inactive, enable it:
sudo systemctl enable --now ModemManager
Verify the modem appears:
mmcli -L
Step 2: Confirm the FCC Lock
Check the modem and raw MBIM radio state:
mmcli -m 0
sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state
sudo mbimcli -d /dev/wwan0mbim0 --query-radio-state
If the vendor radio state says fcc-locked, continue.
Step 3: Enable the Quectel FCC Unlock Hook
On Debian/Ubuntu systems, the Quectel FCC unlock helper is usually already installed in:
/usr/share/ModemManager/fcc-unlock.available.d/
For the EM120R-GL device ID 1eac:1001, enable it with:
sudo ln -sfn /usr/share/ModemManager/fcc-unlock.available.d/1eac:1001 \
/etc/ModemManager/fcc-unlock.d/1eac:1001
Then restart ModemManager:
sudo systemctl restart ModemManager
Step 4: Verify the Modem Registers on the Mobile Network
After restart, check:
mmcli -m 0
sudo mbimcli -d /dev/wwan0mbim0 -p --quectel-query-radio-state
You want to see:
- modem
state: registered power state: on-
operator name: SLTMobitelor your carrier packet service state: attached- Quectel radio state
on
Step 5: Bring Up the Mobile Connection
If NetworkManager already created a profile, activate it:
nmcli connection show
nmcli connection up 'Mobitel 4G'
If needed, re-enable autoconnect:
nmcli connection modify 'Mobitel 4G' connection.autoconnect yes
If you need to create a profile manually:
nmcli connection add type gsm ifname '*' con-name 'Mobitel 4G' apn mobitel
nmcli connection up 'Mobitel 4G'
Step 6: Verify Real Internet Traffic Over WWAN
Check address assignment:
nmcli -f GENERAL.STATE,GENERAL.CONNECTION,IP4.ADDRESS,IP4.GATEWAY,IP4.DNS,IP6.ADDRESS device show wwan0mbim0
ip addr show wwan0
Force a test over the WWAN data interface:
curl -4 --interface wwan0 https://ifconfig.me/ip
If that returns a public IP, mobile data is working.
Notes About Routing
If Wi-Fi is also connected, Linux may keep Wi-Fi as the default IPv4 route while the WWAN link is still healthy and usable.
Check default routes:
ip route show default
ip -6 route show default
If you want the SIM to be the preferred route even while Wi-Fi is up, you can either disconnect Wi-Fi or lower the WWAN route metric in NetworkManager.
Useful Diagnostics
These commands were useful during diagnosis:
lspci -nn
lspci -k -s 05:00.0
ip link show
rfkill list all
nmcli general status
nmcli device status
mmcli -L
mmcli -m 0
mmcli -i 0
journalctl -u ModemManager -u NetworkManager -b --no-pager
sudo mbimcli -d /dev/wwan0mbim0 --query-radio-state
sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state
sudo mbimcli -d /dev/wwan0mbim0 --query-pin-state
Why It Worked in Windows but Not Linux
Windows often ships vendor integration that clears the regulatory lock automatically for laptop-integrated WWAN modules.
Linux had all the right drivers here:
mhi-pci-genericmhi_wwan_mbimmhi_wwan_ctrl
but the FCC unlock hook was not enabled, so the modem stayed radio-locked until the ModemManager helper was explicitly turned on.
Persistent Fix Summary
The persistent fix was:
sudo systemctl enable --now ModemManager
sudo ln -sfn /usr/share/ModemManager/fcc-unlock.available.d/1eac:1001 \
/etc/ModemManager/fcc-unlock.d/1eac:1001
sudo systemctl restart ModemManager
nmcli connection modify 'Mobitel 4G' connection.autoconnect yes
nmcli connection up 'Mobitel 4G'
After that, the modem registered on LTE and internet traffic over wwan0 worked normally.
if this article helped you in anyway donate to support our work : https://buymeacoffee.com/plexydesk
Top comments (0)