EZMonitorModeButton
A simple yet robust Python GUI for the Raspberry Pi to easily enable and disable monitor mode on a wireless interface.
In wireless security auditing, the standard way to enable monitor mode is using the aircrack-ng suite:
-
sudo airmon-ng check kill (kills network managers, wpa_supplicant , dhcpcd , etc.)
-
sudo airmon-ng start wlan0
While entering monitor mode is easy, exiting it can be tedious and frustrating:
The Annoyance:
When airmon-ng check kill runs, it completely destroys the system's normal internet connectivity. To get back online, a user has to stop monitor mode and manually restart all networking services in the correct sequence.
How EZMonitorModeButton solves this:
This program automatically stops the monitor interface and sequentially restarts NetworkManager, wpa_supplicant, avahi-daemon,and dhcpcd .
The Value:
It acts as a safety net. Instead of leaving the user with broken internet, a single click restores normal network state cleanly.
┌────────────────────────┐
│ Start Auditing │
└───────────┬────────────┘
│
┌────────────────┴────────────────┐
▼ ▼
[ Traditional CLI ] [ EZMonitorMode ]
│ │
sudo airmon-ng check kill │
sudo airmon-ng start wlan0 ▼
│ ┌───────────────┐
▼ │ Switch [ON] │
(Internet Killed) └───────┬───────┘
│ │
├─────────────────────────────────┘
▼
=================
Wireless Auditing
=================
│
├─────────────────────────────────┐
▼ ▼
[ Manual Restoration ] [ EZMonitorMode ]
│ │
sudo airmon-ng stop ... ▼
sudo ip link set up ... ┌───────────────┐
sudo systemctl restart NM... │ Switch [OFF] │
│ └───────┬───────┘
│ (Complex & slow) │ (Instant & clean)
▼ ▼
┌─────────────────────────────────────────────────┐
│ Internet Restored Automatically │
└─────────────────────────────────────────────────┘
Changelog
Version 3.1.1
- Unobtrusive Update Notification: Asynchronous background check against GitHub Releases. Displays a subtle, non-intrusive
⚡ vX.Y.Zbadge in the GUI that opens the release page when clicked. Cached locally for 24 hours to eliminate redundant network requests. - CLI Update Tip: Subtle notification tip displayed when running
ezmonitormode --statusif a new version is available. - Zero-Disruption Offline Mode: If offline or auditing, the update check fails completely silently with zero popups or console warnings.
Version 3.1.0
- Enlarged Glowing Toggle Switch: Scaled the sliding switch to 130x54px with a 42px knob (occupying 64% of the container box) for clear visibility and effortless touch targeting on Raspberry Pi touchscreens.
- Sub-Second Network Restoration: Optimized
stop_monitor_mode.shto check active systemd units, prioritizing NetworkManager and reducing exit latency from 10+ seconds to under 1 second. - Keyboard & Touch Accessibility:
CanvasToggleswitch now supports keyboard focus (Tab), key toggling (Space/Enter), and a focus highlight ring. - Dynamic Tool Rescan: Interface refresh (
↻) dynamically scans for newly installed security utilities without restarting the app. - Idle Telemetry Sync: Background telemetry loop keeps the switch state accurate if monitor mode is modified externally.
- Cleaned Up Architecture Flow: Restructured the workflow diagram into a clear, boxed ASCII format.
For the complete release history, visit the Wiki Changelog.
Installation (Recommended)
Option 1: Debian Package (Pi/Ubuntu/Debian)
Download the latest .deb file from the Releases page and install it using:
sudo apt update
sudo apt install ./ezmonitormode_3.1.1_all.deb
Once installed, you can launch it from your application menu or by running ezmonitormode in the terminal.
Option 2: Via PyPI
pip install ezmonitormode
Once installed, run with sudo -E ezmonitormode.
Option 3: Running from Source
- Clone this repository:
git clone https://github.com/ldl805/EZMonitorModeButton.git cd EZMonitorModeButton
- Install dependencies:
sudo apt update sudo apt install python3-tk aircrack-ng wireless-tools iw
- Run the application:
sudo -E python3 src/ezmonitormode/monitor_gui.py
Troubleshooting
"no display name and no $DISPLAY environment variable"
This occurs if the GUI cannot find your screen.
- Running via SSH: Ensure you connected with X11 forwarding:
ssh -X user@pi. - Running via sudo: Use
sudo -E ezmonitormodeto preserve your display settings. - Running in Headless mode: This application requires a graphical desktop (Pi Desktop, VNC, etc.).
System Dependencies
Before running ezmonitormode, ensure you have the following system tools installed:
sudo apt update
sudo apt install python3-tk aircrack-ng wireless-tools
Optional tools for the shortcut buttons:
sudo apt install wifite wireshark kismet
License
MIT License
Metadata
Release files for ezmonitormode 3.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ezmonitormode-3.1.1.tar.gz | 18.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ezmonitormode-3.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.3 kB
Release files / ezmonitormode-3.1.1.tar.gz
| Download URL | ezmonitormode-3.1.1.tar.gz |
|---|---|
| Size | 18.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2731249387a0803e421c6c6a3e60e26041f4b4a37b60641ef89a63e772be2551
|
|
BLAKE2b-256 checksum How to use checksums |
8ca343d215198555b1b5152ca4c84d3ad4d6e6289cc93e3a8671bd302b4b2f0b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / ezmonitormode-3.1.1-py3-none-any.whl
| Download URL | ezmonitormode-3.1.1-py3-none-any.whl |
|---|---|
| Size | 20.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
819bb1420324c426f97e4e889bc7fb5f41280c5519c1a58ac51cdbc049a601ae
|
|
BLAKE2b-256 checksum How to use checksums |
06d5b997297ba3cb08ecea4255662d8eaab818b8800af00d3f94b5ac28054d0d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|