How To Fix a Quectel EM120R-GL LTE Modem On Ubuntu

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 SLTMobitel SIM
  • NetworkManager
  • ModemManager

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 -nn shows the modem, for example:
05:00.0 Unassigned class [ff00]: Quectel Wireless Solutions Co., Ltd. EM120R-GL LTE Modem [1eac:1001]
  • mmcli -L shows no modem because ModemManager is not running, or it shows the modem but activation fails.
  • nmcli device status shows 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: SLTMobitel or 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-generic
  • mhi_wwan_mbim
  • mhi_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.