[How To] Lenovo T495, X395 Fibocom L850-GL on Manjaro Linux

Synopsis

This topic is a boiled down version of the topic How can I get Fibicom L850-GL modem to work

Lenovo T495(s) and X395 is based on AMD and the modem (Intel xmm7360) is connected to the PCI bus using m.2 interface. They share the same hardware in different casing and weight class.

The Arch Wiki contains a reference to build a custom driver xmm7360-pci but I did not have any success with it.

On the other hand - replacing Modem Manager with modemmanager-dev will work.

Remember that replacing system components may introduce issues when the system has been updated - in such case start with rebuilding the custom packages just the same way you are going to do now.

As of 2026-04-16T22:00:00Z the following has been verified as a fully functional solution.

This guide will eventually become obsolete when upstream releases the next version.

Options tested

During my research, all my attempts to solve it failed until I installed Windows on the device.

Lesson learned - don’t wipe such system but keep a minimal Windows for dual boot.

a wiped system with clean install of Manjaro xmm7360-pci :cross_mark:
- xmm7360-pci-spat-dkms-git :cross_mark:
- modemmanager-dev :cross_mark:
installed windows 10 - initialise modem Manjaro (dualboot) - modemmanager-dev :white_check_mark:
- Manjaro (wipe) - modemmanager-dev :white_check_mark:
installed windows 11 - initialise modem Manjaro (dualboot) - modemmanager-dev :white_check_mark:
- Manjaro (wipe) - modemmanager-dev :white_check_mark:

The break-through came when I loaded the system witn a minimal Windows (custom partitioning Windows installer to use a 64GB partition) - the system is usually preloaded with Windows and the key is stored in the system’s firmware, so there is no copyright violations by doing so..

Requirements

The Thinkpad models T495(s) and X395 systems are generally fully compatible with Linux kernel.

The modem however requires a Windows installation to be able to update the modems firmware. You should not wipe Windows from the device - but rather reduce it to e.g. 64GB.

The following assumes you have a working Windows 10/11 installation on the device as Windows is instrumental in getting the modem up-to-date and functional.

Preparation

If your Fibocom modem’s firmware release is version 2.0.1.103 then you can proceed to building the custom modem manager packages.

  1. Boot to Windows
  2. Download and install the lastest driver package (includes new firmware) from Lenovo download site
  3. Run Windows update
  4. Reboot into Windows (Be sure to let the firmware upload finish uninterrupted)
  5. Connect to the internet
  6. While connected - Click Start → Power → Restart (This ensures the modem is functional when you reboot into Manjaro)
  7. Boot into your Manjaro installation

modemmanager-dev

The modem is locked and it requires a fcc-unlock script. No such script exist for the current ModemManager.

The development version of ModemManager does provide a such unlock script matching the hardware ID 8086:7360.

Using a clean Manjaro Linux dual-boot installation.

:warning: If get other system issues - make sure to mention you are using a development version of ModemManager.

The development version contains the required functionality, a fibocom module and a fcc-unlock script. The development version depends on other development libraries which will replace existing system libraries with development versions.

The package fwupd depends on libmbin which will create a conflict, a conflict you can only resolve by removing fwupd package.

To ensure no interference - stop and disable the installed ModemManager

sudo systemctl disable --now ModemManager

If installed remove the fwupd package

sudo pacman -Rns fwupd

Create a work folder

WORK=~/fibocom
mkdir $WORK
cd $WORK

Then we need three custom scripts - source AUR - the build order is important - do not use an AUR helper

Install base-devel

sudo pacman -Syu base-devel git --needed

During the build of the packages you will be queried to replace existing packages - make sure to acknowledge and allow replacing them

git clone https://aur.archlinux.org/libmbin-dev
cd libmbim-dev
PKGDEST=$WORK makepkg -sicC
cd $WORK
git clone https://aur.archlinux.org/libqmi-dev
cd libqmi-dev
PKGDEST=$WORK makepkg -sicC
cd $WORK
cd $WORK
git clone https://aur.archlinux.org/modemmanager-dev
cd modemmanager-dev
PKGDEST=$WORK makepkg -sicC
cd $WORK

You should expect 4 packages in the work folder libmbin-dev, libmm-glib-dev, libqmi-dev and modemmanager-dev - something similar to this output of ls

ls -l *.pkg.tar.zst 
-rw-r--r-- 1 nix nix  629403 12 apr 17:27 libmbim-dev-1:1.33.1_dev-1-x86_64.pkg.tar.zst
-rw-r--r-- 1 nix nix  802096 12 apr 17:34 libmm-glib-dev-1.25.95_dev-1-x86_64.pkg.tar.zst
-rw-r--r-- 1 nix nix 2736562 12 apr 17:28 libqmi-dev-1.37.995_dev-1-x86_64.pkg.tar.zst
-rw-r--r-- 1 nix nix 1544114 12 apr 17:34 modemmanager-dev-1.25.95_dev-1-x86_64.pkg.tar.zst

Verify that all packages has been installed before proceeding - check the /var/log/pacman.log - when all is done symlink the fcc-unlock script

Activate fcc-unlock script

sudo ln -s /usr/share/ModemManager/fcc-unlock.available.d/8086:7360 /etc/ModemManager/fcc-unlock.d/8086:7360

Enable and start the ModemManager service

sudo systemctl enable --now ModemManager

Result

inxi -Fc0
 $ inxi -Fc0 
System:
  Host: tp485 Kernel: 7.0.0-rc7-1-MANJARO arch: x86_64 bits: 64
  Desktop: KDE Plasma v: 6.6.4 Distro: Manjaro Linux
Machine:
  Type: Laptop System: LENOVO product: 20NKS05100 v: ThinkPad T495
    serial: <superuser required>
  Mobo: LENOVO model: 20NKS05100 v: SDK0J40697 WIN
    serial: <superuser required> Firmware: UEFI vendor: LENOVO
    v: R12ET64P(1.34 ) date: 02/23/2024
Battery:
  ID-1: BAT0 charge: 50.2 Wh (99.5%) condition: 50.5/50.5 Wh (100%)
CPU:
  Info: quad core model: AMD Ryzen 5 PRO 3500U w/ Radeon Vega Mobile Gfx
    bits: 64 type: MT MCP cache: L2: 2 MiB
  Speed (MHz): avg: 1230 min/max: 1400/2100 cores: 1: 1230 2: 1230 3: 1230
    4: 1230 5: 1230 6: 1230 7: 1230 8: 1230
Graphics:
  Device-1: Advanced Micro Devices [AMD/ATI] Picasso/Raven 2 [Radeon Vega
    Series / Radeon Mobile Series] driver: amdgpu v: kernel
  Device-2: Chicony Integrated Camera (1280x720@30) driver: uvcvideo
    type: USB
  Display: wayland server: X.org v: 1.21.1.21 with: Xwayland v: 24.1.9
    compositor: kwin_wayland driver: X: loaded: amdgpu unloaded: modesetting
    dri: radeonsi gpu: amdgpu resolution: 1920x1080~60Hz
  API: EGL v: 1.5 drivers: kms_swrast,radeonsi,swrast
    platforms: gbm,wayland,x11,surfaceless,device
  API: OpenGL v: 4.6 compat-v: 4.5 vendor: amd mesa v: 26.0.4-arch1.1
    renderer: AMD Radeon Vega 8 Graphics (radeonsi raven ACO DRM 3.64
    8.0.0-rc7-1-MANJARO)
  API: Vulkan v: 1.4.341 drivers: radv surfaces: N/A
  Info: Tools: api: clinfo, eglinfo, glxinfo, vulkaninfo
    de: kscreen-console,kscreen-doctor wl: wayland-info x11: xdpyinfo,xprop
Audio:
  Device-1: Advanced Micro Devices [AMD/ATI] Raven/Raven2/Fenghuang HDMI/DP
    Audio driver: snd_hda_intel
  Device-2: Advanced Micro Devices [AMD] Audio Coprocessor
    driver: snd_pci_acp3x
  Device-3: Advanced Micro Devices [AMD] Ryzen HD Audio
    driver: snd_hda_intel
  API: ALSA v: k7.0.0-rc7-1-MANJARO status: kernel-api
  Server-1: PipeWire v: 1.6.3 status: active
Network:
  Device-1: Intel Wi-Fi 5 Wireless-AC 9x6x [Thunder Peak] driver: iwlwifi
  IF: wlp1s0 state: down mac: d6:76:65:90:09:5c
  Device-2: Realtek RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet
    driver: r8169
  IF: enp3s0f0 state: down mac: f8:75:a4:30:8f:b7
  Device-3: Realtek RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet
    driver: r8169
  IF: enp5s0 state: down mac: f8:75:a4:30:8f:b6
  IF-ID-1: wwan0 state: unknown mac: N/A
Bluetooth:
  Device-1: Intel Wireless-AC 9260 Bluetooth Adapter driver: btusb type: USB
  Report: rfkill ID: hci0 state: up address: see --recommends
Drives:
  Local Storage: total: 476.94 GiB used: 38.2 GiB (8.0%)
  ID-1: /dev/nvme0n1 vendor: SK Hynix model: BC901 HFS512GEJ9X108N
    size: 476.94 GiB
Partition:
  ID-1: / size: 97.59 GiB used: 38.03 GiB (39.0%) fs: xfs dev: /dev/nvme0n1p4
  ID-2: /boot size: 3.86 GiB used: 147.7 MiB (3.7%) fs: ext4
    dev: /dev/nvme0n1p2
  ID-3: /boot/efi size: 299.4 MiB used: 32.6 MiB (10.9%) fs: vfat
    dev: /dev/nvme0n1p1
Swap:
  Alert: No swap data was found.
Sensors:
  System Temperatures: cpu: 60.0 C mobo: N/A gpu: amdgpu temp: 59.0 C
  Fan Speeds (rpm): fan-1: 0 fan-2: 0
Info:
  Memory: total: 16 GiB note: est. available: 13.53 GiB used: 2.97 GiB (22.0%)
  Processes: 278 Uptime: 34m Shell: Zsh inxi: 3.3.40

lspci -nn | grep 8086:7360
 $ lspci -nn | grep 8086:7360
04:00.0 Cellular controller/modem [0d40]: Intel Corporation XMM7360 LTE Advanced Modem [8086:7360] (rev 01)
nmcli -m 0
 $ mmcli -m 0
  ----------------------------------
  General  |                   path: /org/freedesktop/ModemManager1/Modem/0
           |              device id: b776b707c73cf296b6228e1f1aa09ba6436100e4
  ----------------------------------
  Hardware |           manufacturer: Fibocom
           |                  model: L850 LTE Module","L850
           |      firmware revision: 18500.5001.00.04.26.22
           |              supported: gsm-umts, lte
           |                current: gsm-umts, lte
           |           equipment id: 015550001546651
  ----------------------------------
  System   |                 device: /sys/devices/pci0000:00/0000:00:01.5/0000:04:00.0
           |                physdev: /sys/devices/pci0000:00/0000:00:01.5/0000:04:00.0
           |                drivers: iosm
           |                 plugin: Intel
           |           primary port: wwan0at1
           |                  ports: wwan0 (net), wwan0at1 (at), wwan0xmmrpc0 (xmmrpc)
  ----------------------------------
  Status   |         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3)
           |                  state: connected
           |            power state: on
           |            access tech: lte
           |         signal quality: 9% (recent)
  ----------------------------------
  Modes    |              supported: allowed: 3g; preferred: none
           |                         allowed: 4g; preferred: none
           |                         allowed: 3g, 4g; preferred: none
           |                         allowed: 3g, 4g; preferred: 3g
           |                         allowed: 3g, 4g; preferred: 4g
           |                current: allowed: 3g, 4g; preferred: 4g
  ----------------------------------
  Bands    |              supported: utran-1, utran-4, utran-5, utran-8, utran-2, eutran-1, 
           |                         eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8, 
           |                         eutran-12, eutran-13, eutran-17, eutran-18, eutran-19, eutran-20, 
           |                         eutran-26, eutran-28, eutran-29, eutran-30, eutran-41, eutran-66
           |                current: utran-1, utran-4, utran-5, utran-8, utran-2, eutran-1, 
           |                         eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8, 
           |                         eutran-12, eutran-13, eutran-17, eutran-18, eutran-19, eutran-20, 
           |                         eutran-26, eutran-28, eutran-29, eutran-30, eutran-41, eutran-66
  ----------------------------------
  IP       |              supported: ipv4, ipv6, ipv4v6
  ----------------------------------
  3GPP     |                   imei: 015550001546651
           |            operator id: 23802
           |          operator name: Telenor DK
           |           registration: home
           |   packet service state: attached
  ----------------------------------
  3GPP EPS |   ue mode of operation: csps-2
           | initial bearer ip type: ipv4v6
  ----------------------------------
  SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
  ----------------------------------
  Bearer   |                  paths: /org/freedesktop/ModemManager1/Bearer/0

ip a
 $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: wwan0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/none 
    inet 10.181.147.199/0 brd 255.255.255.255 scope global noprefixroute wwan0
       valid_lft forever preferred_lft forever
3: enp3s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether f8:75:a4:30:8f:b7 brd ff:ff:ff:ff:ff:ff
    altname enxf875a4308fb7
4: enp5s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether f8:75:a4:30:8f:b6 brd ff:ff:ff:ff:ff:ff
    altname enxf875a4308fb6
5: wlp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 3e:16:02:f5:8b:db brd ff:ff:ff:ff:ff:ff permaddr 7c:b2:7d:c2:87:dd
    altname wlx7cb27dc287dd

Troubleshooting

The modem may not wake correctly after a system sleep/standby.

  • Restarting the system will revive the modem

  • Unload and reload the iosm kernel module, then restart modem manager

    sudo modprobe -r iosm && sudo modprobe iosm
    sudo systemctl restart ModemManager
    
    • wait 5-15 seconds for the modem to restart

The NetworkManager integration may display a limited connectivity message - this is not a lack of connection :man_shrugging:

1 Like

Questions and Comments regarding this topic.

Create a new topic and provide the following link as reference

https://forum.manjaro.org/t/187033