Skip to content

gnoblin.configure.xwayland ​

Configure Xwayland behavior in gnoblin.configure:

lua
gnoblin.configure {
    xwayland = {
        allow_grabs = false,
        grab_access_rules = {"legacy-app", "!blocked-app"},
        disable_extensions = {},
        allow_byte_swapped_clients = false,
        scaling_factor = 0,
    },
}
SettingAccepted valueDefault
allow_grabsBoolean. Allows supported X11 clients to take keyboard grabs on override-redirect windows.false
grab_access_rulesArray of resource names or resource classes. * and ? are wildcards; prefix a value with ! to deny it. Deny rules take precedence.{}
disable_extensionsArray containing "security", "xtest", both, or neither.{}
allow_byte_swapped_clientsBoolean. Allows X11 clients with a different byte order to connect.false
scaling_factor0 for automatic scaling, or a finite number from 0.5 through 2147483520. Mutter rounds positive values to the nearest integer.0

Mutter always adds its compiled system grab-access rules. An empty grab_access_rules list therefore removes only user-configured rules; it does not remove those built-in rules. Grab rules only permit a grab when allow_grabs is true.

"security" disables Xwayland's SECURITY extension. "xtest" disables its XTEST extension, which lets clients synthesize input events. Mutter ignores a request to disable an extension when Xwayland was built without that extension.

Changing disable_extensions or allow_byte_swapped_clients requires restarting Xwayland; restart the Gnoblin session for those changes to affect the running X server. The other settings can be reloaded during the session.

Gnoblin exposes the effective scale to X11 clients through XSettings and the Xft.dpi resource. A config reload updates these values live. If another XSettings manager already owns the XWayland display, Gnoblin leaves it in control.

The upper scale limit keeps Mutter's conversion to a signed integer in range: Mutter stores the value as a float, rounds it, and converts it to int for Xwayland coordinate scaling. Values below 0.5 would round to zero, so they are rejected. This is a representational limit, not a recommended display scale.

Type definition ​

lua
gnoblin.configure {
    xwayland = {
        allow_grabs = boolean?,
        grab_access_rules = {string, ...}?,
        disable_extensions = {"security" | "xtest", ...}?,
        allow_byte_swapped_clients = boolean?,
        scaling_factor = number?, -- 0 or 0.5–2147483520
    },
}