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.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install wlcom-gui-automation - 安装完成后,直接呼叫该 Skill 的名称或使用
/wlcom-gui-automation触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
wlcom GUI Automation 是什么?
Automate GUI tests on KylinOS V11 Wayland desktops using wlcctrl for window control, scaled pointer actions, screenshots, and result verification. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 20 次。
如何安装 wlcom GUI Automation?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install wlcom-gui-automation」即可一键安装,无需额外配置。
wlcom GUI Automation 是免费的吗?
是的,wlcom GUI Automation 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
wlcom GUI Automation 支持哪些平台?
wlcom GUI Automation 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 wlcom GUI Automation?
由 Cyanogenic(@cyanogenic)开发并维护,当前版本 v0.1.0。