Skip to content
Back to skills

Linuse

ASecurity

Control the Linux/GNOME/Wayland desktop — screenshots, mouse taps, keyboard input. Use when asked to interact with the desktop, automate GUI apps, or do computer-use on the local Linux machine.

  • 57 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added May 31, 2026
toolspythongobash

Works with

  • cli

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned May 31, 2026

npx -y skills add diegosouzapw/awesome-omni-skill --skill linuse --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Linuse?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Linuse
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/diegosouzapw-linuse/badge)](https://www.skillsdirectory.com/skills/diegosouzapw-linuse)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: linuse
description: Control the Linux/GNOME/Wayland desktop — screenshots, mouse taps, keyboard input. Use when asked to interact with the desktop, automate GUI apps, or do computer-use on the local Linux machine.
metadata: {"emoji": "🐧"}
---

# LinUse — Linux Desktop Automation (Wayland/GNOME)

Control the local GNOME Wayland desktop: take screenshots, tap/click, type text, press keys. Uses evdev virtual touchscreen + keyboard to bypass Wayland's input restrictions.

## Prerequisites

- GNOME on Wayland (tested on GNOME 44–46, Ubuntu 22.04–24.04)
- `gnome-screenshot` installed (`sudo apt install gnome-screenshot`)
- `evdev` Python package (`pip install evdev`)
- `/dev/uinput` writable (`sudo chmod 666 /dev/uinput`)
- Screen lock disabled for automation:
  ```bash
  gsettings set org.gnome.desktop.screensaver lock-enabled false
  gsettings set org.gnome.desktop.session idle-delay 0
  gsettings set org.gnome.desktop.interface enable-hot-corners false
  ```

## Location

```
/path/to/linuse/
```

## Quick Reference

All commands via: `cd /path/to/linuse && python3 -m linuse <command>`

### Single Commands

```bash
# Display info
python3 -m linuse info

# Screenshot (returns file path)
python3 -m linuse screenshot
python3 -m linuse screenshot -o /tmp/screen.png

# Tap at coordinates
python3 -m linuse tap 640 400

# Double-tap
python3 -m linuse double-tap 640 400

# Long press
python3 -m linuse long-press 640 400 --duration 0.5

# Drag
python3 -m linuse drag 100 100 500 500 --duration 0.3

# Type text (character by character via evdev)
python3 -m linuse type "hello world"

# Press single key
python3 -m linuse key Return
python3 -m linuse key Tab
python3 -m linuse key Escape

# Key combo
python3 -m linuse combo ctrl c
python3 -m linuse combo alt F4
python3 -m linuse combo ctrl shift t
```

### Chained Commands (IMPORTANT)

For keyboard input to work reliably, **chain commands in a single invocation** using `,` as separator. This keeps the evdev devices alive across actions:

```bash
python3 -m linuse tap 640 60 , sleep 0.5 , type "example.com" , sleep 0.3 , key Return
python3 -m linuse combo ctrl l , sleep 0.5 , type "google.com" , key Return
python3 -m linuse combo alt F4
```

**Why?** Mutter registers/deregisters evdev devices when they're created/destroyed. Single commands create→use→destroy per invocation. Chaining keeps them alive.

## Computer-Use Workflow

```
1. Screenshot  →  python3 -m linuse screenshot -o /tmp/screen.png
                  → analyze with image tool
2. Decide      →  identify target coordinates or text to type
3. Act         →  python3 -m linuse tap X Y , sleep 0.3 , type "text" , key Return
4. Verify      →  python3 -m linuse screenshot -o /tmp/after.png
                  → analyze with image tool
5. Repeat
```

### Example: Open a URL in Firefox

```bash
# Focus address bar, type URL, navigate
python3 -m linuse combo ctrl l , sleep 0.5 , type "example.com" , sleep 0.3 , key Return
sleep 3
python3 -m linuse screenshot -o /tmp/result.png
```

### Example: Close current window

```bash
python3 -m linuse combo alt F4
```

### Example: Type in a text field after clicking it

```bash
python3 -m linuse tap 400 300 , sleep 0.3 , type "Hello from Clawdia"
```

## Coordinate Tips

- Screen resolution detected automatically (check with `info`)
- Coordinates are in logical pixels (1280x800 on this machine)
- Insert `sleep 0.3` between tap and type to let focus settle
- Insert `sleep 0.1` between screenshot and the previous action
- For dock icons: x≈27, y varies by icon position (top of dock ≈ 150-170)

## Limitations

- **Touch semantics only** — no hover state, no right-click (it's a touchscreen)
- **No clipboard paste** — type goes character by character (slow for long text)
- **No window enumeration** — can't list windows like winuse does
- **GNOME-specific** — won't work on KDE/Sway without changes
- **Needs uinput access** — requires chmod or udev rule

## Troubleshooting

### Keyboard input not reaching app
- Use **chained commands** (`,` separator) — single-shot keyboard commands may not work
- Make sure the target window has focus (tap it first, add sleep)

### Screenshot returns black
- Screen might be locked: `loginctl unlock-session`
- Display might be off: `gsettings set org.gnome.desktop.session idle-delay 0`

### "Permission denied" on /dev/uinput
```bash
sudo chmod 666 /dev/uinput
# Or persistent: echo 'KERNEL=="uinput", MODE="0666"' | sudo tee /etc/udev/rules.d/99-uinput.rules
```

### Taps land in wrong place
- Verify resolution with `python3 -m linuse info`
- Take a screenshot and estimate coordinates from the image
- Remember: coordinates are absolute screen pixels

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.