FREE & OPEN SOURCE (MIT) PRE-RELEASE v0.1.0

lamco-rdp-tools

CLI Automation Toolkit for RDP

A single Rust binary (rdpdo) with 55 commands for automating, testing, and provisioning Windows and Linux desktops over RDP. No guest-side installation required.

What is rdpdo?

There has never been an automation tool for RDP the way vncdotool exists for VNC. rdpdo fills that gap. It connects to any RDP server, sends input, captures screenshots, matches visual elements, transfers clipboard data, records sessions, and outputs results in JSON or JUnit XML for CI/CD pipelines.

Built on IronRDP -- the same pure-Rust protocol stack that powers lamco-rdp-server -- rdpdo requires zero guest-side installation. No agents, no scripts on the remote machine, no elevated privileges on the target. Everything happens over the standard RDP protocol.

55 Commands Across 9 Categories

Input

Send keystrokes, mouse clicks, drags, and text to the remote desktop.

type key click drag move
📷

Capture

Take screenshots, capture regions, or record timelapses of the remote screen.

screenshot region timelapse
👁

Visual Match

Wait for or assert visual elements using normalized cross-correlation image matching.

expect waitfor find
📋

Clipboard

Set and get clipboard contents, transfer files via the RDP clipboard channel.

clip-set clip-get file-transfer
🎵

Audio

Capture remote audio streams and assert audio is playing for media testing.

audio-capture assert-playing

Provisioning

Automate portal acceptance, screen unlock, and login flows for unattended setup.

accept-portal unlock login
🎯

Calibration

Grid-based click offset calibration for pixel-perfect input accuracy across displays.

calibrate grid-test

Recording

Record full sessions with input events and replay them for regression testing.

record replay

CI/CD Integration

Machine-readable output for continuous integration with JSON and JUnit XML support.

--json --junit --exit-code

Why rdpdo Matters

The Problem

  • × VNC has vncdotool -- RDP has had nothing comparable
  • × Existing approaches require agents installed on the guest
  • × FreeRDP + xdotool chains are fragile and slow
  • × No visual assertion tooling for RDP desktop testing

The Solution

  • Single binary, zero dependencies on the remote machine
  • Native RDP protocol -- works with any RDP server
  • Image matching via normalized cross-correlation (no OpenCV)
  • CI/CD-ready with JSON and JUnit XML output

How rdpdo Compares

Feature rdpdo vncdotool aardwolf FreeRDP + xdotool scrying openQA
Protocol RDP VNC RDP RDP + X11 RDP/VNC VNC/Serial
Guest agent required No No No Yes (xdotool) No Yes
Input automation Full Full No Partial No Full
Visual matching Built-in (NCC) No No No No OpenCV
Clipboard automation Yes No No Partial No No
CI/CD output JSON + JUnit No No No No Yes
Language Rust Python Rust C + Shell Rust Perl
Single binary Yes No (Python) Yes No Yes No

Technical Details

~8,800
Lines of Rust
55
Commands
0
External Dependencies
MIT
License

Key Design Decisions

  • Built on IronRDP -- the same pure-Rust RDP protocol stack used by lamco-rdp-server, ensuring protocol compatibility and shared improvements.
  • No OpenCV dependency -- image matching uses normalized cross-correlation implemented in pure Rust, keeping the binary self-contained.
  • No display server required -- rdpdo does not need X11, Wayland, or any GUI. It runs headless in CI/CD environments.
  • No Python dependency -- unlike vncdotool, rdpdo compiles to a single static binary with no runtime dependencies.

Example Usage

# Connect and type into the remote desktop
rdpdo --host 10.0.0.5 --user admin type "Hello, World!"

# Take a screenshot
rdpdo --host 10.0.0.5 --user admin screenshot desktop.png

# Wait for a visual element to appear (10s timeout)
rdpdo --host 10.0.0.5 --user admin waitfor login-button.png --timeout 10

# Click on a matched visual element
rdpdo --host 10.0.0.5 --user admin click --image ok-button.png

# Transfer clipboard text
rdpdo --host 10.0.0.5 --user admin clip-set "deployment config data"

# CI/CD: run a test sequence with JUnit output
rdpdo --host 10.0.0.5 --user admin --junit results.xml \
    screenshot before.png \
    type "notepad" key enter \
    waitfor notepad-window.png --timeout 15 \
    screenshot after.png

Current Status

Pre-release v0.1.0 -- All 55 commands are implemented. The tool is functional and being used internally for testing lamco-rdp-server. Public release is planned after further stabilization.

rdpdo is MIT-licensed and will be free and open source upon release.