Website: https://milmit.net
Native Linux control for cellular modems — LTE, TD-LTE, 4G+, APN, SIM, messaging and diagnostics.
ModemDeck is a lightweight native GTK4 cellular modem manager for Ubuntu/Linux, developed by MilMit. It uses ModemManager/NetworkManager and small event-driven helpers instead of an Electron/Chromium runtime or a continuous mmcli polling loop.
The currently tested package is v1.0.0-rc1.4.1. It has been built successfully by GitHub Actions and installed successfully on the target Ubuntu system.
Download the Debian package from the GitHub Releases page and install it with:
sudo apt install ./MilMit-ModemDeck-1.0.0-rc1.4.1-amd64.debRelease page: https://github.com/MilMit/modemdeck-linux/releases/tag/v1.0.0-rc1.4.1
- Multi-modem detection and hot-plug updates through ModemManager D-Bus.
- 2G/3G/4G/4G+/5G display when the available telemetry can prove that state.
- RSRP, RSRQ, SNR, RSSI and a separate radio-quality assessment.
- Signal history.
- Serving LTE band, FDD/TDD, EARFCN, PCI and channel bandwidth when available.
- Structured carrier aggregation: PCC/SCC components, 2CA/3CA topology and component channel bandwidth.
- GNOME top-bar integration plus optional low-overhead background monitor.
- Auto / LTE-FDD / TD-LTE presets.
- Custom supported-band selection using ModemManager
SetCurrentBands. - 45-second confirmation window.
- Local pre-change backup.
- Persistent pending transaction.
- Detached rollback guard that survives a GUI crash and restores the previous selection if it is still unconfirmed.
- Bounded safety-backup history.
- LTE cell-lock stays preview-only until model/firmware-specific write/recovery behavior is verified.
Built-in profiles:
AutoB42 TD-LTEB1+B3+B7
You can also save/delete your own profiles. Optionally, the active profile is restored after reboot and after suspend/resume by the lightweight user service.
NetworkManager-backed GSM/APN profiles can be:
- listed
- created
- edited
- activated
- deleted
APN username and an optional password are supported. Password values are handed directly to NetworkManager and are not stored in ModemDeck's own config. Existing passwords are never read back into the UI.
Through the standard ModemManager SIM interface:
- unlock SIM with PIN
- enable PIN protection
- disable PIN protection
- show current SIM lock state/slot when reported
- Live RX/TX rate from
/sys/class/net/<interface>/statistics/*. - No speed-test traffic is generated.
- Daily and monthly local byte accounting.
- Reset control.
- Local history is bounded to prevent unbounded config growth.
Accounting is active while the GUI or optional background monitor is running.
- Suspend/resume detection through
systemd-logind. - State resync and optional profile restore after resume.
- Modem USB/internal WWAN hot-plug handling.
- Optional notifications.
systemd --usermonitor.- GNOME top-bar extension.
- Desktop launcher.
.debbuild script.
- Supported Modems/capability page.
- In-app release notes.
- Update check against
https://milmit.net/modemdeck/update.json. server/update.json.examplefor publishing the manifest on MilMit.- Report-a-problem / MilMit website integration.
- Privacy-safe diagnostics export: IMEI/equipment IDs are intentionally omitted.
- English/Persian language preference and translation infrastructure.
- MilMit About/website/package metadata.
Testing on the target Ubuntu laptop has verified the T77W968 / DW5821e Snapdragon X20 LTE path:
- FDD LTE B1 serving carrier.
3CA • B1 + B7 + B3, each component reported as 20 MHz.- Real TD-LTE band lock to B42.
- B42 EARFCN 43292 / PCI 89.
2CA • B42 + B42, each component reported as 20 MHz.- Vendor radio details through a direct read that temporarily inhibits and then returns the modem to ModemManager.
A sum such as 40/60 MHz is component channel bandwidth, not an internet speed estimate.
Generic ModemManager support is used whenever possible. Advanced telemetry is capability-gated rather than guessed. Driver profiles exist for:
- Dell/Foxconn DW5821e / T77W968
- Quectel
- Fibocom
- Sierra Wireless / AirPrime
- Huawei
- Telit / Cinterion
- SIMCom
- Generic MBIM/QMI fallback
Support varies by exact modem and firmware. Controls that are unsupported or not verified stay disabled.
GitHub Actions builds packages on every push to main. The workflow also publishes/refreshes a nightly prerelease with the latest binaries. Version tags (v*) create versioned releases containing:
MilMit-ModemDeck-<version>-amd64.deb— recommended Ubuntu packageMilMit-ModemDeck-<version>-x86_64.AppImage— portable buildMilMit-ModemDeck-<version>-linux-source.tar.gz— source snapshotSHA256SUMS.txt— checksums for release assets
See docs/PUBLISHING.md to publish the repository and create a release directly from Ubuntu.
Install development/runtime dependencies:
./scripts/install-deps-ubuntu.shBuild and run:
cargo run --releaseRun the lightweight monitor alone:
cargo run --release -- --monitor./scripts/install-user.shThis installs the binary, desktop entry, user systemd unit and GNOME extension files when GNOME is present. Enable/disable the monitor from Preferences.
./packaging/build-deb.shThe .deb is written under target/.
./scripts/phase5-selfcheck.shIt checks ModemManager, NetworkManager tools, PolicyKit helper availability, update-check dependency, user monitor/indicator installation and current process resource usage.
Preferences support System / English / فارسی. The main UI is translated through stable translation keys plus a migration layer for legacy labels. Language changes are applied on restart.
Copy server/update.json.example to the web location used by RC1:
https://milmit.net/modemdeck/update.json
Update version, url and notes for each release. ModemDeck sends no analytics in this check; it only downloads that small JSON manifest.
- Diagnostics omit IMEI/equipment IDs.
- APN passwords are not stored in ModemDeck settings.
- No verbose persistent AT response logging by the monitor.
- Runtime status contains display-oriented state only.
- Data usage is stored locally in the user's config directory.
Vendor deep reads may temporarily inhibit ModemManager and can briefly reconnect mobile data. They are therefore manual rather than high-frequency background operations.
Band writes are guarded by backup + persistent transaction + detached rollback process. Cell-lock writes remain preview-only in RC1 because persistence/recovery behavior is vendor/firmware-specific.
./scripts/uninstall-user.shThe main window is split into focused tabs instead of one long page. SMS, Voice and USSD controls are capability-gated at runtime. ModemDeck only enables a feature when ModemManager exports the matching standard D-Bus interface for the selected modem.
SMS supports on-demand inbox loading, sending and deleting. Voice supports dialing, answering and hangup when the Voice interface exists. Voice call control and voice audio routing are treated as separate capabilities; some WWAN modules can expose call control without a usable host audio route. USSD supports initiate/respond/cancel when available.
For normal users, do not run the developer dependency script. Distribute either the .deb or AppImage release artifact. The .deb lets Ubuntu install required OS runtime services automatically; the AppImage bundles ordinary application libraries and uses the host ModemManager/NetworkManager/Polkit services. See PORTABLE.md.
Starting with RC1.4, routine ModemManager signal/property events patch the visible labels and progress bar in place instead of rebuilding the full GTK modem page. Structural refreshes are reserved for modem add/remove, manual refresh and explicit configuration operations.