Skip to content

Instantly share code, notes, and snippets.

@Strykar
Last active February 10, 2025 14:50
Show Gist options
  • Save Strykar/878db39a3d331874261c5c2c4a6dc5ea to your computer and use it in GitHub Desktop.
Save Strykar/878db39a3d331874261c5c2c4a6dc5ea to your computer and use it in GitHub Desktop.
Enable EM120 WWAN modem on Thinkpad T14s
#!/bin/bash
set -euo pipefail
# Our WWAN hardware
wwan_device=/dev/wwan0mbim0
get_modem_index() {
mmcli -L | awk -F'/' '{print $NF+0}'
}
# Check if ModemManager package is installed
if ! pacman -Qq modemmanager &> /dev/null; then
printf "Error: ModemManager package is not installed. Exiting.\n"
exit 1
fi
# Ensure ModemManager.service is enabled and start it if necessary
if ! systemctl is-enabled --quiet ModemManager.service; then
printf "ModemManager.service is not enabled. Enabling and starting it...\n"
if ! sudo systemctl enable --now ModemManager.service; then
printf "Error: Failed to enable and start ModemManager.service. Exiting.\n"
exit 1
fi
elif ! systemctl is-active --quiet ModemManager.service; then
printf "ModemManager.service is not running. Starting it...\n"
if ! sudo systemctl start ModemManager.service; then
printf "Error: Failed to start ModemManager.service. Exiting.\n"
exit 1
fi
fi
# Wait for ModemManager to be fully active
while ! systemctl is-active --quiet ModemManager.service; do
printf "Waiting for ModemManager.service to become active...\n"
sleep 1
done
printf "ModemManager.service is active. Proceeding...\n"
# Remove FCC lock which requires elevation
printf "Removing FCC lock...\n"
if ! sudo mbimcli --device-open-proxy --device="${wwan_device}" --quectel-set-radio-state=on -v; then
printf "Error: Failed to remove FCC lock. Exiting.\n"
exit 10
fi
printf ".. done!\n"
# Enable Quectel modem
printf "Enabling Quectel EM120R_GL..."
if ! mmcli --modem "$(get_modem_index)" --enable; then
printf "Error: Failed to enable modem. Exiting.\n"
exit 20
fi
printf ".. all done!\n"
# List modem details
printf "Listing modem details:\n"
if ! mmcli --modem "$(get_modem_index)"; then
printf "Error: Failed to list modem details.\n"
exit 30
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment