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

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

Symptoms

Root Cause

Step 1: Make Sure ModemManager Is Installed and Running

Step 2: Confirm the FCC Lock

Step 3: Enable the Quectel FCC Unlock Hook

Step 4: Verify the Modem Registers on the Mobile Network

Step 5: Bring Up the Mobile Connection

Step 6: Verify Real Internet Traffic Over WWAN

Notes About Routing

Useful Diagnostics

Why It Worked in Windows but Not Linux

Persistent Fix Summary 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: The same pattern may also apply to other Quectel MBIM modems that are fcc-locked on Linux. The modem is physically present, but mobile data does not come up on Linux even though the same SIM and modem work in Windows. 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. Check package and service state: If ModemManager is installed but inactive, enable it: Verify the modem appears: Check the modem and raw MBIM radio state: If the vendor radio state says fcc-locked, continue. On Debian/Ubuntu systems, the Quectel FCC unlock helper is usually already installed in: For the EM120R-GL device ID 1eac:1001, enable it with: Then restart ModemManager: After restart, check: If NetworkManager already created a profile, activate it: If needed, re-enable autoconnect: If you need to create a profile manually: Check address assignment: Force a test over the WWAN data interface: If that returns a public IP, mobile data is working. 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: 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. These commands were useful during diagnosis: Windows often ships vendor integration that clears the regulatory lock automatically for laptop-integrated WWAN modules. Linux had all the right drivers here: but the FCC unlock hook was not enabled, so the modem stayed radio-locked until the ModemManager helper was explicitly turned on. The persistent fix was: 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 Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Code Block

Copy

05:00.0 Unassigned class [ff00]: Quectel Wireless Solutions Co., Ltd. EM120R-GL LTE Modem [1eac:1001] 05:00.0 Unassigned class [ff00]: Quectel Wireless Solutions Co., Ltd. EM120R-GL LTE Modem [1eac:1001] 05:00.0 Unassigned class [ff00]: Quectel Wireless Solutions Co., Ltd. EM120R-GL LTE Modem [1eac:1001] couldn't enable interface: 'Invalid transition' couldn't enable interface: 'Invalid transition' couldn't enable interface: 'Invalid transition' sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state Radio state retrieved: 'fcc-locked' Radio state retrieved: 'fcc-locked' Radio state retrieved: 'fcc-locked' dpkg -l | rg -i 'modemmanager|network-manager|libmbim|libqmi' systemctl status ModemManager --no-pager dpkg -l | rg -i 'modemmanager|network-manager|libmbim|libqmi' systemctl status ModemManager --no-pager dpkg -l | rg -i 'modemmanager|network-manager|libmbim|libqmi' systemctl status ModemManager --no-pager sudo systemctl enable --now ModemManager sudo systemctl enable --now ModemManager sudo systemctl enable --now ModemManager mmcli -m 0 sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state sudo mbimcli -d /dev/wwan0mbim0 --query-radio-state mmcli -m 0 sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state sudo mbimcli -d /dev/wwan0mbim0 --query-radio-state mmcli -m 0 sudo mbimcli -d /dev/wwan0mbim0 --quectel-query-radio-state sudo mbimcli -d /dev/wwan0mbim0 --query-radio-state /usr/share/ModemManager/fcc-unlock.available.d/ /usr/share/ModemManager/fcc-unlock.available.d/ /usr/share/ModemManager/fcc-unlock.available.d/ sudo ln -sfn /usr/share/ModemManager/fcc-unlock.available.d/1eac:1001 \ /etc/ModemManager/fcc-unlock.d/1eac:1001 sudo ln -sfn /usr/share/ModemManager/fcc-unlock.available.d/1eac:1001 \ /etc/ModemManager/fcc-unlock.d/1eac:1001 sudo ln -sfn /usr/share/ModemManager/fcc-unlock.available.d/1eac:1001 \ /etc/ModemManager/fcc-unlock.d/1eac:1001 sudo systemctl restart ModemManager sudo systemctl restart ModemManager sudo systemctl restart ModemManager mmcli -m 0 sudo mbimcli -d /dev/wwan0mbim0 -p --quectel-query-radio-state mmcli -m 0 sudo mbimcli -d /dev/wwan0mbim0 -p --quectel-query-radio-state mmcli -m 0 sudo mbimcli -d /dev/wwan0mbim0 -p --quectel-query-radio-state nmcli connection show nmcli connection up 'Mobitel 4G' nmcli connection show nmcli connection up 'Mobitel 4G' nmcli connection show nmcli connection up 'Mobitel 4G' nmcli connection modify 'Mobitel 4G' connection.autoconnect yes nmcli connection modify 'Mobitel 4G' connection.autoconnect yes nmcli connection modify 'Mobitel 4G' connection.autoconnect yes nmcli connection add type gsm ifname '*' con-name 'Mobitel 4G' apn mobitel nmcli connection up 'Mobitel 4G' nmcli connection add type gsm ifname '*' con-name 'Mobitel 4G' apn mobitel nmcli connection up 'Mobitel 4G' nmcli connection add type gsm ifname '*' con-name 'Mobitel 4G' apn mobitel nmcli connection up 'Mobitel 4G' nmcli -f GENERAL.STATE,GENERAL.CONNECTION,IP4.ADDRESS,IP4.GATEWAY,IP4.DNS,IP6.ADDRESS device show wwan0mbim0 ip addr show wwan0 nmcli -f GENERAL.STATE,GENERAL.CONNECTION,IP4.ADDRESS,IP4.GATEWAY,IP4.DNS,IP6.ADDRESS device show wwan0mbim0 ip addr show wwan0 nmcli -f GENERAL.STATE,GENERAL.CONNECTION,IP4.ADDRESS,IP4.GATEWAY,IP4.DNS,IP6.ADDRESS device show wwan0mbim0 ip addr show wwan0 curl -4 --interface wwan0 https://ifconfig.me/ip curl -4 --interface wwan0 https://ifconfig.me/ip curl -4 --interface wwan0 https://ifconfig.me/ip ip route show default ip -6 route show default ip route show default ip -6 route show default ip route show default ip -6 route show default 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 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 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 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' 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' 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' - Quectel EM120R-GL - Device ID 1eac:1001 - A Sri Lanka SLTMobitel SIM - NetworkManager - ModemManager - lspci -nn shows the modem, for example: - 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: - The raw Quectel MBIM vendor state shows: - modem state: registered - power state: on - operator name: SLTMobitel or your carrier - packet service state: attached - Quectel radio state on - mhi-pci-generic - mhi_wwan_mbim - mhi_wwan_ctrl