Repository navigation
Conversation
… prompt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
yahya637
marked this pull request as draft
November 8, 2026 23:31
The desktop control prompt now offers R to allow an application in every session. Remembered names live in $XDG_STATE_HOME/umbriel/x11-input-permissions.json. x11-input-permissions lists them, and x11-input-revoke forgets a name, clears its session decision, and disconnects it so the next request prompts. Harness compositors get a private XDG_STATE_HOME. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
yahya637
marked this pull request as ready for review
November 8, 2026 23:59
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Lets X11 desktop input (XTest, used by Steam's desktop controller mappings) be allowed across Umbriel restarts, in two ways:
$XDG_STATE_HOME/umbriel/x11-input-permissions.json(mode 0600, written atomically).umbriel x11-input-permissionslists them.umbriel x11-input-revoke <name|all>forgets a name, clears the session's allow or deny decision for it, and disconnects its approved EIS client, so the next request prompts again.[input] x11_input_allow = ["steam"]allows listed names without ever prompting.Enter still allows for the current session only, and any other key or click still denies. Emulated input is already dropped while a prompt is visible, so an XTest client cannot press R for itself. R on this prompt is accepted from the same keyboards as Enter. Session-lock behavior is unchanged.
The harness now gives each compositor a private
XDG_STATE_HOME, so checks never read or write the user's state directory.Motivation
Steam asks again after every Umbriel restart. A stray click denies Steam for the rest of the session, with no way back short of restarting Umbriel. Users who always allow Steam can now say so once, and
x11-input-revokealso gives back the prompt after an accidental denial.Names are the ones Xwayland reports, as the in-session approval already uses.
security.mdnotes that X11 clients choose this name themselves, so an allowed name is trusted for any X11 client running as the user.Type of Change
Testing
meson test -C build-debug: 152/152 pass, including the newx11-input-permissionsstore tests (persistence across instances, file mode, revoke, unsafe or malformed stores) and a config-load test forx11_input_allow.input/xwayland_input_allow: a listed client types without a prompt, and an unlisted client is still prompted.input/xwayland_input_remember: R remembers,x11-input-permissionslists the name (text and--json), revoke disconnects the client and a new request prompts, revoking a denial prompts again, and Enter does not remember.server.cppreverted,xwayland_input_allowfails as expected.tests/harness/check.sh ./build-debug/umbriel): 453/458 pass. The 4 consistent failures (effect/selection,input/drop_zone_destination,input/title_bar_button_hover,render/title_bar) fail the same way on unmodifiedmainon this machine.drag/toplevel_drag_lifecyclepassed when rerun alone.clang-formatandclang-tidyon the changed sources are clean, andtools/remark/format.mjsleaves the docs as committed.x11_input_allow = ["steam"], the Steam Controller desktop mapping moved and clicked with no prompt.umbriel.service): R on Steam's prompt loggedinput permission remembered app='steam'and wrote the state file.x11-input-revoke steamcut Steam's input, and the prompt came back at once.Manual Coverage
Checklist
SCOPE.md, or its scope was agreed in an issue or on Discord first.CONTRIBUTING.md.just format, or this PR has no C++, shader, or Markdown changes.docs/andexamples/config.toml, or this PR does not change user-facing configuration or behavior.Additional Notes
input-capture-permissionshas no text-mode printer upstream, so it prints nothing without--json.x11-input-permissionsprints one name per line. I left the capture command alone to keep this PR to one change.config.toml, by design. The config is hand-edited, uses includes, and reloads live on save, so Umbriel rewriting it could lose comments or race the user's own edits. This also matches how InputCapture stores remembered grants.x11_input_allowstays the declarative, user-written list. If you'd prefer R to append tox11_input_allowinstead, I can change it.🤖 Generated with Claude Code