经 AI Skill Hub 精选评估,Linux桌面控制 获评「强烈推荐」。这款MCP工具在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 8.0 分,适合有一定技术背景的用户使用。
Linux桌面控制 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
Linux桌面控制 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/agent-sh/computer-use-linux
# 方式二:手动配置 claude_desktop_config.json
{
"mcpServers": {
"linux----": {
"command": "npx",
"args": ["-y", "computer-use-linux"]
}
}
}
# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
# 安装后在 Claude 对话中直接使用 # 示例: 用户: 请帮我用 Linux桌面控制 执行以下任务... Claude: [自动调用 Linux桌面控制 MCP 工具处理请求] # 查看可用工具列表 # 在 Claude 中输入:"列出所有可用的 MCP 工具"
// claude_desktop_config.json 配置示例
{
"mcpServers": {
"linux____": {
"command": "npx",
"args": ["-y", "computer-use-linux"],
"env": {
// "API_KEY": "your-api-key-here"
}
}
}
}
// 保存后重启 Claude Desktop 生效
Running open models for your company? Tiyuvta helps with model choice, deployment and optimization, and fine-tuning on your hardware or cloud account.
computer-use-linux gives AI agents real, structured control of a local Linux desktop: semantic AT-SPI accessibility trees, bounded screenshots, compositor-aware window targeting, Wayland/X11 input synthesis, single-round-trip post-action verification, and a click-through on-screen activity indicator across GNOME, KDE Plasma/KWin, Hyprland, niri, COSMIC, i3, and X11/EWMH.
| Category | Tool | What it does |
|---|---|---|
| **Diagnostics & setup** | doctor | Single-shot JSON readiness report (platform, portals, accessibility, windowing, input, readiness summary, and capability map). |
setup_accessibility | Enables and verifies GNOME's org.gnome.desktop.interface toolkit-accessibility setting so toolkit apps expose AT-SPI trees. | |
setup_window_targeting | Installs and enables the bundled GNOME Shell extension when org.gnome.Shell.Introspect is locked down. | |
| **Discovery & observation** | get_app_state | Combined screenshot + compacted AT-SPI accessibility tree with stable element_index handles. Scope with app_name_or_bundle_identifier or a window target (window_id, pid, app_id, wm_class, title). |
screenshot | Bounded PNG or JPEG capture of the full desktop (full_screen: true or no target) or a raised and cropped target window (window_id, pid, app_id, wm_class, title, raise_window). | |
list_windows | Compositor windows with window_id, title, app_id, wm_class, PID, focus state, client type (wayland/x11), bounds, and terminal TTY/process metadata. | |
focused_window | The window currently holding keyboard focus. | |
list_apps | Running desktop applications visible to the AT-SPI registry. | |
| **Input** | click | Click by element_index, semantic selector (role/name/text/states), or desktop/window-relative coordinates (left/right/middle, click_count). |
drag | Desktop coordinate drag from (start_x, start_y) to (end_x, end_y). | |
scroll | Page-based vertical/horizontal scroll on an element, window, or pixel coordinate. | |
press_key | Single keys or chords (Ctrl+L, Alt+F4, Return), optionally focusing a target window or terminal first. | |
type_text | Literal text entry, optionally targeted at a window or terminal (tty, terminal_pid, terminal_command, terminal_cwd). | |
| **Semantic actions** | perform_action | Invoke any AT-SPI action exposed by an element (Press, Activate, Toggle, Jump, …); defaults to the primary action. |
set_value | Write directly to a settable accessibility element (text fields, sliders, spinners). | |
| **Window management** | activate_window | Focus a window by window_id, pid, app_id, wm_class, title, or terminal selectors. |
move_window / resize_window | Reposition or resize a window in desktop coordinates (GNOME Shell extension and X11/EWMH backends). | |
| **Opt-in host tools** | complete_interaction | Parameter-free desktop completion notification (notify-send); registered only when COMPUTER_USE_LINUX_NOTIFY_ON_COMPLETE=1. |
run_shell | Bounded non-login /bin/sh -c execution; registered only when COMPUTER_USE_LINUX_ENABLE_SHELL=1 (absent by default). |
./install.sh, cargo install, the npm wrapper, and the Claude/Codex plugin launcher all install computer-use-linux, computer-use-linux-cosmic (COSMIC Wayland helper), and computer-use-linux-indicator (on-screen activity overlay) together automatically. Only manual prebuilt-binary installs need you to download all three release assets.
Installs system packages on Debian/Ubuntu, Fedora/RHEL-like, Arch-like, or Artix systems; installs Rust if needed; builds all three release binaries (computer-use-linux, computer-use-linux-cosmic, and computer-use-linux-indicator); installs them to ~/.local/bin; configures ydotoold as a systemd user service when available; enables GNOME AT-SPI settings when running under GNOME; and installs the bundled GNOME Shell extension on GNOME Wayland.
```bash git clone https://github.com/agent-sh/computer-use-linux cd computer-use-linux ./install.sh
computer-use-linux doctor | jq .readiness ```
ydotool is an optional fallback. On X11, the installer includes xdotool as the required keyboard backend. If ydotool is unavailable from the configured repositories, the installer continues, but doctor still requires a keyboard-capable RemoteDesktop portal on Wayland or xdotool on X11; direct uinput provides absolute pointer input only. On non-systemd hosts, automatic ydotoold service setup is skipped and the installer prints a command suitable for a per-user supervisor. For an unrecognized distro, pass --package-manager apt|dnf|pacman; --force-unknown-distro auto-selects only when exactly one of those managers is available.
Installs all three Rust binaries from crates.io. You still handle the system-level pieces yourself: AT-SPI, desktop portals, the optional ydotoold fallback, and the GNOME extension if you need the GNOME Wayland exact-focus backend.
cargo install computer-use-linux
computer-use-linux doctor
For unreleased changes from main, install directly from Git:
cargo install --git https://github.com/agent-sh/computer-use-linux
Then, as needed:
sudo apt install ydotool at-spi2-core # ydotool 1.0.3+ when using this fallback
sudo apt install wtype # optional Unicode typing on wlroots/Hyprland Wayland
systemctl --user enable --now ydotoold # only when doctor selects ydotool
computer-use-linux setup # gsettings AT-SPI bridge
computer-use-linux setup-window-targeting # GNOME Shell extension
codex-desktop-linux includes a native computer-use-linux feature that embeds and stages this backend inside the app's unified Computer Use plugin. Enable computer-use-linux via make setup-native (or in linux-features/features.json followed by make install-native), then toggle Settings → Computer use → Any App in the desktop app. Do not register a second standalone computer-use-linux MCP server inside Codex Desktop when the native feature is enabled.
claude mcp add --scope user computer-use-linux -- computer-use-linux mcp
Pick the setup that matches your agent or shell workflow:
| Host / workflow | Install command |
|---|---|
| **Claude Code** (plugin + skill) | claude plugin marketplace add agent-sh/computer-use-linux && claude plugin install computer-use-linux@computer-use-linux |
| **Codex CLI** (plugin + skill) | codex plugin marketplace add agent-sh/computer-use-linux && codex plugin add computer-use-linux@computer-use-linux |
| **Pi Coding Agent** (native lazy-loaded tools) | pi install npm:@agent-sh/computer-use-linux |
| **Hermes Agent** (CLI + skill + MCP server) | npm install -g @agent-sh/computer-use-linux && hermes skills tap add agent-sh/computer-use-linux && hermes skills install agent-sh/computer-use-linux/computer-use-linux && hermes mcp add computer-use-linux --command computer-use-linux --args mcp |
| **CLI + any stdio MCP client** (npm) | npm install -g @agent-sh/computer-use-linux |
| **CLI + system setup from source** | git clone https://github.com/agent-sh/computer-use-linux && cd computer-use-linux && ./install.sh |
**Rust crate (crates.io)** | cargo install computer-use-linux |
Verify desktop readiness from the shell (after installing the CLI on PATH via npm install -g @agent-sh/computer-use-linux, ./install.sh, or cargo install computer-use-linux):
computer-use-linux doctor | jq .readiness
computer-use-linux setup # enable AT-SPI accessibility bridge if needed
computer-use-linux setup-window-targeting # install GNOME Wayland window-control extension if needed
Plugin-only or Pi-only installs: The Claude Code / Codex plugin launcher andpi installmanage private cached binaries and do not addcomputer-use-linuxtoPATH. Either run the MCPdoctor/setup_accessibility/setup_window_targetingtools (orcomputer_use_linux_doctorin Pi) directly from your agent, or also install the CLI above when you want shell subcommands onPATH.
The Rust crate is published as computer-use-linux and the npm package as @agent-sh/computer-use-linux. Prebuilt x86_64 and aarch64 Linux binaries ship with the latest release.
Need an isolated desktop where the agent never touches your real mouse, keyboard, or focused window? Use the sibling project agent-workspace-linux alongside this one.
Screenshot payloads are size-bounded by default before they are returned to the MCP host: max 1920 px width/height and 2 MiB image bytes, with hard caps even when callers request more. Agents that need more detail can pass max_width, max_height, max_bytes, scale, format: "jpeg", or quality, preferably with a window target or crop. PNG remains the default; JPEG lets callers trade lossless pixels for a smaller payload before the byte cap forces further resizing. Returned screenshot metadata includes coordinate_width, coordinate_height, scale, format, and quality so callers can convert from a downscaled preview to desktop coordinate pixels.
Good for users who already have Node.js and want a no-Rust install. The npm package downloads and verifies the matching computer-use-linux, computer-use-linux-cosmic, and computer-use-linux-indicator binaries during install, then the wrapper wires COMPUTER_USE_LINUX_COSMIC_HELPER and COMPUTER_USE_LINUX_INDICATOR_BIN to the bundled helpers automatically.
npm install -g @agent-sh/computer-use-linux
computer-use-linux doctor
You will still need AT-SPI enabled (computer-use-linux setup) and one input backend reported ready by doctor. Start ydotoold only when using the ydotool fallback.
Linux x86_64 / aarch64 builds are published with each tag. Each binary ships a .sha256 next to it.
target=x86_64-unknown-linux-gnu
base=https://github.com/agent-sh/computer-use-linux/releases/latest/download
for binary in computer-use-linux computer-use-linux-cosmic computer-use-linux-indicator; do
asset="$binary-$target"
curl -L -O "$base/$asset"
curl -L -O "$base/$asset.sha256"
sha256sum -c "$asset.sha256"
install -m 0755 "$asset" "$HOME/.local/bin/$binary"
done
You will still need AT-SPI enabled (computer-use-linux setup) and one input backend reported ready by doctor (start ydotoold only when using the ydotool fallback).
inherit_mcp_toolsets: true
If you installed the binary somewhere that is not on `PATH`, pass the absolute path as `--command`.
Restart Hermes after editing the config. Hermes registers the tools as `mcp_computer_use_linux_<tool>` and creates the `mcp-computer-use-linux` runtime toolset.
You can verify both sides before asking Hermes to use the desktop:
bash computer-use-linux doctor | jq .readiness hermes skills inspect agent-sh/computer-use-linux/computer-use-linux hermes chat --toolsets mcp-computer-use-linux -q "List the current desktop windows." ```
For one-off installs without adding the tap first, Hermes also accepts hermes skills install agent-sh/computer-use-linux/skills/computer-use-linux.
Most setups need none of these — doctor and the installers pick sensible defaults. They exist for overriding auto-detected paths and input backends.
Server runtime (set in the MCP host's environment):
| Variable | Effect |
|---|---|
COMPUTER_USE_LINUX_NOTIFY_ON_COMPLETE | Set exactly to 1 to expose the optional complete_interaction notification tool. Requires notify-send and a desktop notification service; disabled by default. |
COMPUTER_USE_LINUX_COSMIC_HELPER | Path to the computer-use-linux-cosmic helper when it isn't next to the binary or on PATH. |
COMPUTER_USE_LINUX_INDICATOR | Set to 0 (or false/off/no) to turn off the on-screen indicator. On by default. |
COMPUTER_USE_LINUX_INDICATOR_BIN | Path to the computer-use-linux-indicator overlay when it isn't next to the binary or on PATH. |
COMPUTER_USE_LINUX_INDICATOR_HIDE_TEXT | Set exactly to 1 to mask all typed text and keycaps in the indicator. set_value values are always masked. |
COMPUTER_USE_LINUX_AGENT_NAME | Name shown in the indicator instead of the one derived from the MCP client's clientInfo. |
CU_DISABLE_ABS_POINTER | Disable the uinput absolute pointer. Wayland coordinate actions then need the RemoteDesktop portal; they refuse input rather than use ydotool's relative-motion approximation. Native X11 fallback is unchanged. |
COMPUTER_USE_LINUX_FORCE_PORTAL_POINTER / …_KEYBOARD | Prefer the RemoteDesktop portal on Wayland, skipping auto-detection. Pointer forcing skips the absolute uinput backend. Forced ydotool or XTEST keyboard overrides take precedence; KDE literal text keeps its clipboard route. Portal startup and text conversion failures return errors without replaying through ydotool. |
COMPUTER_USE_LINUX_PORTAL_SCROLL_INVERT | Set to 1 to reverse vertical scrolling through the RemoteDesktop portal. Defaults to normal direction on both GNOME and KDE Plasma; horizontal direction is unchanged. |
COMPUTER_USE_LINUX_PERSIST_REMOTE_DESKTOP | Set exactly to 1 to ask the RemoteDesktop portal to remember pointer and keyboard grants across processes. The first dialog still appears (on GNOME the remember box starts checked). Later processes reuse the single-use restore token from Start, stored mode 0600 under $XDG_STATE_HOME/computer-use-linux/ (or ~/.local/state/computer-use-linux/). Pointer and keyboard tokens are separate. Needs interface version 2. Unset, every new process is prompted. No effect when input is not using the portal. |
COMPUTER_USE_LINUX_FORCE_YDOTOOL_POINTER / …_KEYBOARD | Always route pointer / keyboard through ydotool, skipping the portal and KDE clipboard paths; pointer forcing also skips the absolute uinput backend and native-X11 xdotool coordinate clicks and scrolls. Coordinate pointer actions on Wayland then refuse input because ydotool cannot position them accurately; scrolling at the current pointer remains available. |
YDOTOOL_SOCKET | Explicit ydotool socket path. When unset, only an owner-only .ydotool_socket in the user's private runtime directory is accepted; the legacy shared /tmp/.ydotool_socket is never selected automatically. Setting this variable is an operator trust override for custom layouts. |
COMPUTER_USE_LINUX_FORCE_XDOTOOL_KEYBOARD | Prefer xdotool/XTEST keyboard input when DISPLAY is available. COMPUTER_USE_LINUX_FORCE_YDOTOOL_KEYBOARD=1 takes precedence. |
COMPUTER_USE_LINUX_XDOTOOL_TYPE_DELAY_MS | Per-character delay for xdotool type in milliseconds (default 12). 0 is faster but can deliver characters out of order on some X servers. |
COMPUTER_USE_LINUX_SCREENSHOT_BACKEND | Force a single screenshot backend, skipping the fallback chain. Accepts gnome-shell, portal, x11, or gnome-screenshot. x11 works only on a native X11 session. Pin gnome-screenshot for background/systemd contexts where the GNOME Shell and portal DBus paths are denied. |
COMPUTER_USE_LINUX_ENABLE_SHELL | Set exactly to 1 before starting the MCP server to register the destructive run_shell tool. Unset by default. Do not enable for untrusted or unattended MCP hosts. |
Build-time identity overrides (set while compiling a downstream embedded bundle): CUL_GNOME_EXTENSION_UUID, CUL_DBUS_SERVICE, and CUL_DBUS_OBJECT_PATH replace the default standalone GNOME Shell extension UUID and DBus endpoint in both the Rust probes and the generated extension files.
npm wrapper (set during npm install, or before running):
| Variable | Effect |
|---|---|
COMPUTER_USE_LINUX_BIN | Run this absolute binary path instead of the one bundled by the npm package. Relative paths are ignored. |
COMPUTER_USE_LINUX_DOWNLOAD_BASE | Override the GitHub release base URL the installer downloads from (mirrors, air-gapped hosts). |
COMPUTER_USE_LINUX_SKIP_DOWNLOAD=1 | Skip the post-install binary download entirely. |
COMPUTER_USE_LINUX_LOCAL_BINARY / …_LOCAL_COSMIC_HELPER / …_LOCAL_INDICATOR | Install from a local build instead of downloading (used by CI and local testing). |
This repo is a plugin marketplace for both Claude Code and Codex. The plugin registers the MCP server and ships the computer-use-linux skill. On first start it downloads the release binaries pinned to the plugin version, checks each against its published .sha256, and caches them under ~/.cache/computer-use-linux/plugin/. It needs curl or wget, and nothing else is installed.
Claude Code:
claude plugin marketplace add agent-sh/computer-use-linux
claude plugin install computer-use-linux@computer-use-linux
Codex CLI:
codex plugin marketplace add agent-sh/computer-use-linux
codex plugin add computer-use-linux@computer-use-linux
Start a new session afterwards. To run your own build instead of the pinned release, set COMPUTER_USE_LINUX_BIN to its path in the host's environment. System setup (computer-use-linux setup, setup-window-targeting, ydotoold) still applies; ask the agent to run the doctor tool to see what is missing. Codex passes only a short allowlist of environment variables to MCP servers, so the Codex manifest forwards the desktop session variables and the COMPUTER_USE_LINUX_* settings below explicitly. Codex Desktop's Linux build already bundles Computer Use; do not install both there.
To receive an explicit completion cue, start the MCP server with COMPUTER_USE_LINUX_NOTIFY_ON_COMPLETE=1. This exposes complete_interaction, a parameter-free tool the agent calls once after finishing its desktop work. It submits a notification through notify-send with a two-second execution limit and bounded process cleanup. Missing services, errors, or timeouts return cue: "skipped"; notification settings may suppress a submitted cue. This does not reserve the desktop or prove that other clients have stopped sending input. No sound or additional desktop settings are enabled by this option. This option currently applies only to directly spawned MCP hosts. The native Pi extension does not forward the flag or include this optional tool in its catalog.
setup and setup_accessibility write and read back GNOME's org.gnome.desktop.interface toolkit-accessibility setting, even if AT-SPI is already enabled at runtime. A runtime-only success is reported as a warning: newly launched GTK apps may still have no tree. Enabling the saved key may require restarting target apps. Other accessibility tools can change that key later; setup does not continuously override user settings.
For an explicit foreground guard while using desktop automation, run:
computer-use-linux guard-accessibility
The guard registers a passive AT-SPI window-activation listener and watches GNOME's saved toolkit-accessibility key. It re-enables the key after a reset and verifies it by readback, with periodic checks as well as change monitoring. This affects all applications using the current user's GNOME setting, not just the target app. It does not start a screen reader or change focus.
mcp, setup, setup_accessibility, and get_app_state never start this guard. Stop it with Ctrl-C or SIGTERM before intentionally disabling accessibility. Stopping ends setting writes and removes its listener without disabling other accessibility clients or restoring an old saved value. A reset and reassertion are not atomic: an app launched in that interval may still need restarting. This is an opt-in mitigation, not a guarantee that every GNOME toggle sequence preserves application accessibility trees.
computer-use-linux doctor is the source of truth. Common failure modes and fixes:
accessibility.at_spi_bus.ok = false — AT-SPI registry isn't running or the toolkit bridge is off. Fix: computer-use-linux setup (or call the setup_accessibility MCP tool). Restart the apps you want to drive.windowing.gnome_shell_introspect.ok = false and gnome_shell_extension_dbus.ok = false — GNOME blocks introspection and the extension isn't installed. Fix: computer-use-linux setup-window-targeting, then log out and log back in.input.ydotool_socket.ok = false while ydotool is the selected fallback — daemon isn't running. On systemd, run systemctl --user enable --now ydotoold. On other init systems, rerun ./install.sh and configure your per-user supervisor with the command it prints. If ydotool is not packaged for your distro, use another input backend or install a compatible ydotool release manually.input.ydotool.ok = false with an unsupported CLI message — install ydotool 1.0.3 or newer. A running daemon or socket alone is not enough; doctor verifies the raw key, wheel, stdin typing, and absolute-movement command family before advertising the backend.input.uinput.ok = false — /dev/uinput isn't accessible to your user. Fix: add yourself to the input group (sudo usermod -aG input $USER) and re-login. On distros that ship uinput as a kernel module without auto-loading it, add uinput to /etc/modules-load.d/. Direct uinput supplies absolute pointer input only, so doctor also requires a keyboard-capable portal, xdotool, or ydotool backend.xdg-desktop-portal or its backend (-gnome, -gtk, -kde, -wlr) crashed. Fix: check journalctl --user -u xdg-desktop-portal -u xdg-desktop-portal-gnome --since '5 min ago' and restart the relevant unit.doctor.windowing.backends. KWin needs session-bus scripting; Hyprland needs hyprctl; niri needs the session's NIRI_SOCKET, or an unambiguous matching niri.*.sock in XDG_RUNTIME_DIR; i3 needs i3-msg and its IPC socket; generic X11 needs wmctrl and xprop. COSMIC needs computer-use-linux-cosmic, which the standard installers provide automatically; if you copied binaries by hand, copy the he高质量的开源MCP工具
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:Linux桌面控制 的核心功能完整,质量优秀。对于Claude Desktop / Claude Code 用户来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | computer-use-linux |
| 原始描述 | 开源MCP工具:Linux desktop control over MCP — AT-SPI, GNOME Shell, Wayland portals, ydotool。⭐55 · Rust |
| Topics | linuxmcpdesktop |
| GitHub | https://github.com/agent-sh/computer-use-linux |
| License | MIT |
| 语言 | Rust |
收录时间:2026-05-25 · 更新时间:2026-05-30 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端