Back to plugins
Network Monitor
v2.0.0 Mahmoud Omiesh

About

Network Monitor

Shows download and upload speed alongside the number of listening ports in one bar capsule. Open the panel for traffic history and quick actions on each listener.

Plugin

Field Value
ID mahmoudomiesh/network-monitor
Entries Bar widget: indicator; panels: panel, menu; service: scanner

Requirements

Noctalia v5 with plugin API 26 or newer. Tested with v5.2.1 on Linux.

Install these commands on PATH:

Command When it runs
ss At startup, every refresh interval, and when you request a refresh. Runs ss -tulnpH.
kill When you select Stop for a listener with a known PID. Sends SIGTERM.
fuser When you select Stop for a listener whose PID is hidden. Runs through pkexec with -k -TERM <port>/<proto>.
pkexec Elevates the fuser action. Requires a polkit agent and may ask for authentication.
xdg-open When you select Open in browser for a TCP listener. Opens http://localhost:<port>.

fuser sends SIGTERM to every process using that port and protocol.

Usage

Enable the plugin in Settings → Plugins. Add the mahmoudomiesh/network-monitor:indicator widget to your bar.

The bar shows compact rates such as ↓120K ↑34K and a plug with the listener count. A direction's arrow uses the primary theme color above 1024 B/s. Rates use decimal units. The port count hides when zero. Disabling both display options leaves a clickable plug.

Left-click toggles the network panel. Middle-click refreshes listeners. Right-click opens the menu panel with Refresh and Settings. Hover the widget for full rates and up to eight listener rows.

Open the main panel from IPC:

noctalia msg panel-toggle mahmoudomiesh/network-monitor:panel

The panel shows download/upload history and a scrollable listener list. Hover a row for Open in browser and Stop. Opening a port closes the panel. Stop acts immediately, keeps the panel open, and refreshes the list about 600 ms after the command finishes. UDP rows only offer Stop. When Stop needs authentication, Noctalia's password prompt replaces the panel.

The menu can also be opened from IPC:

noctalia msg panel-toggle mahmoudomiesh/network-monitor:menu

Settings in the header or menu opens this plugin's settings. The scanner starts automatically when the plugin is enabled.

Settings

Setting Type Default Description
show_speed bool true Show download and upload speed in the bar.
show_ports bool true Show the listener count when greater than zero.
refresh_interval int 5 Seconds between listener scans, from 1 to 30. Traffic follows the shell's network poll interval.
hide_system_ports bool true Hide ports below 1024.
only_own_processes bool false Only show listeners with a visible PID. Visibility depends on ss permissions.
include_udp bool false Include UDP sockets.

IPC

Refresh listeners:

noctalia msg plugin mahmoudomiesh/network-monitor:scanner all refresh

Run the bundled tests inside the shell. Each case logs ok or not ok to the shell log:

noctalia msg plugin mahmoudomiesh/network-monitor:scanner all selftest

Notes

Traffic comes from Noctalia's system monitor ([system.monitor]), so it uses the same interface aggregation as the built-in sysmon widget. If that monitor or its network polling is disabled, the rates stop updating. The graph keeps up to 60 samples while the service runs.

IPv4 and IPv6 binds with the same protocol, port and PID merge into one row. A socket that several processes share, such as a server's forked workers, shows one row per process, so Stop ends only the process its row names. Known PIDs sort before unknown ones, then by port. The local chip means every bind address is loopback. An exposed bind can still be protected by a firewall.

The plugin sends no network requests itself. Open in browser launches your browser, which can make requests to the selected local service. It writes no files.

The right-click menu uses an attached panel because v5.2.1 exposes native context menus only to panel callbacks.

Versions

VersionPlugin APIUpdated
v2.0.0 latest26Oct 10, 2026

Older versions stay installable on a Noctalia release whose plugin API is below the latest version's.