Remote Desktop Dashboard — monitor machines and connect via Microsoft Windows App
Project description
Remote Desktop Dashboard
Browser-based dashboard to monitor and connect to ATC1–ATC10 machines. Replaces the legacy Remote Desktop Connection workflow with live status, machine locking, and one-click access via the Microsoft Windows App — no .rdp file download.
Features
- Live machine status (online/offline, users, MobaXterm, ETGui, cameras, COM tools)
- Agentless monitoring — one Windows server polls all benches (no install on each ATC PC)
- Connect opens Windows App via local launcher (
msrdc.exe+ temp.rdp) - Machine lock: when you connect, the machine is reserved under your name; Release or auto-timeout frees it
- WebSocket live dashboard updates
- Manage machines in the browser (add / edit / delete)
Architecture
Browser ──Connect──► Local launcher (127.0.0.1) ──► Windows App ──RDP──► ATC machine
│
└── REST + WebSocket ◄──► Dashboard server (Windows)
│
└── remote poll: query user/session, tasklist
(domain admin or RDD_MONITOR_* credentials)
| Command | Purpose |
|---|---|
remote-desktop-dashboard |
Start server + poller |
remote-desktop-dashboard-seed |
Add/update machines in DB |
rdd-agent |
(optional) legacy per-machine agent — not needed at scale |
Quick start
pip install -e .
remote-desktop-dashboard-seed --file data\machines.example.json
remote-desktop-dashboard
- Enter Your name (used for locking).
- Optionally enter Windows login (
DOMAIN\user) — password is entered in Windows App. - Click Connect on a machine.
Windows App setup
- Install Windows App from Microsoft Store.
- Set it as the default app for Remote Desktop /
rdp://links (Windows Settings → Apps → Default apps). - When the browser asks to open a link, choose Windows App and allow the protocol.
Machine locking
| Action | Behavior |
|---|---|
| Connect | Locks machine under your name, opens Windows App |
| Release | Frees the machine for others |
| Heartbeat | Sent every 60s while you hold the lock |
| Auto-release | After ~7 min without heartbeat (RDD_LOCK_TIMEOUT_SECONDS + grace) |
| Leave page | Sends release beacon for your locks |
If someone else holds the lock, Connect is disabled and you see In use: name.
Configuration
| Variable | Default | Description |
|---|---|---|
RDD_DATABASE_URL |
sqlite:///./remote_desktop_dashboard.db |
Database |
RDD_HOST / RDD_PORT |
0.0.0.0 / 8080 |
Server bind |
RDD_LOCK_TIMEOUT_SECONDS |
300 |
Lock idle timeout |
RDD_USE_WINDOWS_APP |
true |
Prefer ms-rd: over rdp:// |
RDD_RDP_PORT |
3389 |
RDP port |
RDD_RDP_DEFAULT_DOMAIN |
(empty) | Prepended to username |
RDD_POLLER_ENABLED |
true |
Server-side remote polling |
RDD_POLL_INTERVAL_SECONDS |
45 |
Seconds between poll cycles |
RDD_POLL_MAX_WORKERS |
40 |
Parallel remote probes per cycle |
RDD_POLL_TIMEOUT_SECONDS |
8 |
Per-host command timeout |
RDD_POLL_PREFER_IP |
true |
Poll by IP instead of hostname |
RDD_MONITOR_DOMAIN / RDD_MONITOR_USERNAME / RDD_MONITOR_PASSWORD |
(empty) | Credentials for query / tasklist on remote hosts |
Copy .env.example and adjust for your domain. For 100–1000 benches, increase interval and workers (e.g. RDD_POLL_INTERVAL_SECONDS=90, RDD_POLL_MAX_WORKERS=80).
Agentless requirements
- Dashboard server must run on Windows (domain-joined recommended).
- Service account or
RDD_MONITOR_*user needs rights to run remotequery user,query session, andtaskliston each bench. - Firewall: RPC, File and Printer Sharing, and RDP (3389) as needed.
Insert machines (ATC1–ATC10)
copy data\machines.example.json data\machines.json
# edit hostnames and IPs
remote-desktop-dashboard-seed --file data\machines.json
Optional legacy agent
If remote polling is blocked on some hosts, you can still run rdd-agent on that PC — most deployments should use agentless polling only.
API (connect & lock)
POST /api/v1/machines/ATC1/connect
{"operator": "Alice", "rdp_username": "DOMAIN\\alice", "use_hostname": true}
POST /api/v1/machines/ATC1/lock/heartbeat
{"operator": "Alice"}
POST /api/v1/machines/ATC1/lock/release
{"operator": "Alice"}
Response includes launch_uri (Windows App) and fallback_uri (rdp://).
Publish to PyPI
pip install build twine
python -m build
python -m twine upload dist/*
pip install remote-desktop-dashboard
remote-desktop-dashboard
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remote_desktop_dashboard-2.1.4.tar.gz.
File metadata
- Download URL: remote_desktop_dashboard-2.1.4.tar.gz
- Upload date:
- Size: 36.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fe78978d0aaa1386c10717bafc98687af22fa5058a3ff2cf2c4ea9e39701aec
|
|
| MD5 |
97103b722b22e7c8493af7d4a098c756
|
|
| BLAKE2b-256 |
33610e1959ea2b57be6b91b15b5c0f4fad34fd9d63bb7e6213714a3473752e66
|
File details
Details for the file remote_desktop_dashboard-2.1.4-py3-none-any.whl.
File metadata
- Download URL: remote_desktop_dashboard-2.1.4-py3-none-any.whl
- Upload date:
- Size: 49.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd6417f36daeedd79946be406e29b8e7f69129cda9f911d12f0921362c1623b2
|
|
| MD5 |
825ad062b780a2b945f6059a6462f49a
|
|
| BLAKE2b-256 |
ddf8ca8dab8be7eac71435675880899093bf6de3186688a2d861b2e2f3046ae3
|