Last active
February 10, 2025 14:50
-
-
Save Strykar/878db39a3d331874261c5c2c4a6dc5ea to your computer and use it in GitHub Desktop.
Enable EM120 WWAN modem on Thinkpad T14s
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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