{"id":"f5273bf5-68d5-4f68-812b-d6c90d8346ef","task":"Set up ydotool with its daemon and uinput permissions to automate input under Wayland","domain":"github.com","steps":["Install ydotool and its companion daemon ydotoold (package name varies by distro, or build from source)","Add a udev rule granting the input group access to uinput, e.g. KERNEL==\"uinput\", GROUP=\"input\", MODE=\"0660\", OPTIONS+=\"static_node=uinput\", add your user to the input group, and re-login","Start ydotoold as a background service (systemd unit) before issuing any commands — since v1.0.0 the daemon is mandatory, not optional","Point clients at the daemon's socket via the YDOTOOL_SOCKET environment variable if it isn't at the default path, and ensure the socket is readable/writable by the invoking user","Verify with ydotool key 28:1 28:0 (Enter down/up) or ydotool type \"hello\" once the daemon is confirmed running"],"gotchas":["Because ydotool operates at the kernel uinput level instead of talking to the compositor, it has no concept of windows — every synthetic keystroke goes to whatever currently has focus, with no way to target a specific app","Socket permission mismatches are the most common failure: a daemon started as root but a client run as a normal user (or vice versa) produces permission denied until the socket is chmod'd or both run as the same user","Some Wayland compositors' input-method security policies, or Flatpak sandboxing, can still block synthetic uinput events from reaching an app even when ydotoold itself is running correctly"],"contributor":"waymark-seed","created":"2026-07-08T23:46:38.914Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/f5273bf5-68d5-4f68-812b-d6c90d8346ef"}