wlcom GUI Automation
/install wlcom-gui-automation
wlcom GUI Automation
Use this skill when automating GUI tests on KylinOS V11 Desktop(银河麒麟桌面操作系统 V11)using wlcom's wlcctrl command.
Ground rules
- V11 uses Wayland + UKUI +
wayland-compositor/wlcom; do not assume X11 tools are authoritative. - Prefer
wlcctrlfor window discovery, screenshots, pointer movement, clicks, keys, and window placement. - Always inspect scale before calculating pointer coordinates.
wlcctrl --mousemoveis absolute, despite the man page saying displacement.- On tested V11 machines,
--mousemoveinput must be logical coordinate × output scale;--getmouselocationreturns logical coordinates. --windowmove -x/-yuses logical coordinates; do not multiply by scale.- Current
wlcctrl v1.0.0help/man shows screenshot support, but no recording subcommand. If recording is required, check for other wlcom tools or use an approved recorder.
Quick workflow
# 1. Confirm tool and version
command -v wlcctrl
wlcctrl --version
# 2. Inspect output UUID and scale
wlcctrl --outputs
wlcctrl --getdisplaygeometry \x3Coutput_uuid>
gsettings get org.ukui.SettingsDaemon.plugins.xsettings scaling-factor 2>/dev/null || true
# 3. Find target window
wlcctrl --list
wlcctrl --search '\x3Capp_id_or_title_regex>'
wlcctrl --getactivewindow
wlcctrl --getwindowgeometry \x3Cw_uuid>
# 4. Capture for visual coordinate identification
wlcctrl --windowcapture \x3Cw_uuid> --path /tmp/window.png
# 5. Move and click by scaled pointer coordinates
# logical_screen_x = window_x + screenshot_relative_x
# logical_screen_y = window_y + screenshot_relative_y
# mousemove_x = round(logical_screen_x * scale)
# mousemove_y = round(logical_screen_y * scale)
wlcctrl --mousemove \x3Cmousemove_x>,\x3Cmousemove_y>
wlcctrl --getmouselocation
wlcctrl --mousebutton 1
# 6. Verify by screenshot or pixel/window state
wlcctrl --windowcapture \x3Cw_uuid> --path /tmp/after.png
Helper scripts
The skill includes scripts under scripts/:
scripts/wlcctrl-info.sh— print version, outputs, display geometry, scale candidates, active window, and mouse location.scripts/wlcctrl-window-click.sh \x3Cwindow_uuid> \x3Crelative_x> \x3Crelative_y> [button]— click a point relative to a window screenshot. It reads window geometry and output scale, converts to scaled--mousemoveinput, verifies location, then clicks.scripts/wlcctrl-move-window.sh \x3Cwindow_uuid> \x3Cx> \x3Cy>— move a window using logical coordinates and verify geometry.
Resolve script paths relative to this SKILL.md directory before running.
Common commands
Outputs and scale
wlcctrl --outputs
wlcctrl --getdisplaygeometry \x3Coutput_uuid>
Look for:
physical size: 300x190 mm
scale: 1.750000
mode: 2880 x 1800 @ 90
position: 0, 0
xdpyinfo may report Xwayland logical DPI (for example 96x96) and should not be used alone for Wayland coordinate conversion.
Windows
wlcctrl --list
wlcctrl --search '\x3Cregex>'
wlcctrl --getactivewindow
wlcctrl --getwindowname \x3Cw_uuid>
wlcctrl --getwindowgeometry \x3Cw_uuid>
wlcctrl --windowactivate \x3Cw_uuid>
wlcctrl --windowmove \x3Cw_uuid> -x 0 -y 0
wlcctrl --windowsize \x3Cw_uuid> -w 800 -h 600
Screenshots
wlcctrl --windowcapture \x3Cw_uuid> --path /tmp/window.png
wlcctrl --fullscreencapture --path /tmp/full.png
wlcctrl --setarea \x3Cx,y,width,height> --path /tmp/area.png
wlcctrl --workspacecapture \x3Cworkspace_uuid:output_uuid> --path /tmp/workspace.png
Keyboard and pointer
wlcctrl --key ctrl+alt+t
wlcctrl --keystring 'text to type'
wlcctrl --mousebutton 1
wlcctrl --mousepress 1 --mouserelease 1
wlcctrl --scroll -y 10
wlcctrl --getmouselocation
For drag actions, move to start, press, move to end, release. Remember --mousemove coordinates are scaled absolute coordinates.
Coordinate recipe
Given:
- output scale =
S - window geometry =
(WX, WY) WIDTH x HEIGHT - target point in captured window image =
(RX, RY)
Then:
logical_x = WX + RX
logical_y = WY + RY
mousemove_x = round(logical_x * S)
mousemove_y = round(logical_y * S)
Run:
wlcctrl --mousemove "${mousemove_x},${mousemove_y}"
wlcctrl --getmouselocation # should be near logical_x,logical_y
wlcctrl --mousebutton 1
Known tested example on one V11 machine:
- output
eDP-1, scale1.75 - calculator window
geometry: (607, 176) 432 x 628 =center in window screenshot(376,593)- logical target
(983,769) --mousemoveinput about(1720,1346)--getmouselocationreturns about(983,769)
Test pattern
For a reliable GUI automation test:
- Normalize the window: activate and optionally move to
(0,0). - Capture the window.
- Identify target controls from screenshot coordinates.
- Click via scaled absolute
--mousemove+--mousebutton. - Capture again and verify visually or with OCR/image analysis.
- Log every
wlcctrlcommand and its output for reproducibility.
Safety
- Avoid
--windowcloseand--windowkillunless the user explicitly asks. - Before sending destructive keystrokes, confirm target window UUID/title.
- Store test screenshots/logs under a project
artifacts/directory when possible.
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install wlcom-gui-automation - After installation, invoke the skill by name or use
/wlcom-gui-automation - Provide required inputs per the skill's parameter spec and get structured output
What is wlcom GUI Automation?
Automate GUI tests on KylinOS V11 Wayland desktops using wlcctrl for window control, scaled pointer actions, screenshots, and result verification. It is an AI Agent Skill for Claude Code / OpenClaw, with 20 downloads so far.
How do I install wlcom GUI Automation?
Run "/install wlcom-gui-automation" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is wlcom GUI Automation free?
Yes, wlcom GUI Automation is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does wlcom GUI Automation support?
wlcom GUI Automation is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created wlcom GUI Automation?
It is built and maintained by Cyanogenic (@cyanogenic); the current version is v0.1.0.