giancarlomangiagli.it

Roam - Automatic Wi-Fi roaming for Linux

Roam Wi-Fi roaming application icon

The problem

Linux laptops can remain connected to a Wi-Fi network even after its signal has become weak or unstable, while another known Wi-Fi network is available with much better signal.

This is especially noticeable in large homes, offices, warehouses, schools, laboratories, hotels and other environments where several access points or several Wi-Fi networks are available.

The situation I wanted to address was very simple: suppose that a laptop has several Wi-Fi networks already saved, and that the user moves from one area to another. The laptop may continue using the first network even when a different saved network is now substantially better.

The idea

Roam is a small Linux application designed to monitor the current Wi-Fi connection and automatically switch to a clearly better network selected by the user, when the current connection becomes weak or unstable.

Roam uses NetworkManager and does not attempt to replace it. NetworkManager remains responsible for the actual Wi-Fi connection, while Roam provides an additional roaming policy.

The networks considered for roaming are explicitly selected by the user among the saved NetworkManager Wi-Fi profiles.

How it works

Roam continuously evaluates the current connection and the eligible alternatives. It does not simply choose the network with the highest instantaneous signal value, because that would easily cause repeated switching between two similar networks.

The decision therefore considers:

The result is intended to be a conservative automatic handoff rather than a continuous race between nearby access points.

Different Wi-Fi networks

Roam is intended not only for the case in which several access points use the same SSID. It also addresses the case in which the user has different saved Wi-Fi networks, for example:

Office-WiFi
Laboratory-WiFi
Warehouse-WiFi

The user can explicitly select which of these saved profiles are eligible for roaming. Unknown or unselected Wi-Fi networks are ignored.

Two simple settings

Mode

Roam has two modes:

Responsiveness

The user can choose Low, Medium or High responsiveness. This affects how readily Roam decides that a change is worthwhile, without exposing technical thresholds to the user.

What Roam is not

Roam is not:

Privacy

Roam is designed to operate locally. There is no account, cloud service, telemetry, analytics, crash upload or remote monitoring.

Roam does not need to store Wi-Fi passwords. Its persistent configuration contains only the selected mode, responsiveness and the identifiers of the NetworkManager profiles chosen by the user.

Signal history used by the decision engine exists only in memory. The project is intended not to store Wi-Fi history, location, IP addresses, DNS data or other information that is not necessary for the roaming task.

Linux and NetworkManager

The current implementation is deliberately focused on Linux systems using NetworkManager. The background service communicates with NetworkManager over D-Bus, while the graphical interface is a separate GTK4/libadwaita client.

Closing the graphical window does not stop roaming: the background service continues to run in the user session.

Source code

The project is open source and its source code is available on GitHub:

https://github.com/ossacolsale/roam

Installation

The project is currently being prepared for convenient distribution through native Linux packages as well as source builds. The current installation instructions and available release artifacts are maintained on GitHub.

Roam releases

Who is Roam for?

Roam is intended for Linux users who move around buildings or other areas where several Wi-Fi networks are available and want the computer to stop remaining attached to a weak connection when a better saved alternative is nearby.

It is particularly suited to users looking for automatic Wi-Fi switching, Wi-Fi roaming between different SSIDs, or a local NetworkManager-based solution that does not require a mesh network.

Current status

Roam is an active open-source project. The current implementation is focused on making the Linux behaviour reliable, conservative and easy to install. Real-world testing remains important because wireless behaviour depends on the Wi-Fi adapter, driver, NetworkManager and surrounding radio conditions.