Skip to content

Issue wit keyboard layout in Xwayland applications #3447

@hownioni

Description

@hownioni

I've tested that this is not an issue with xwayland-satellite.
When starting xterm on DISPLAY=:0 (the one niri uses by default when starting xwayland-satellite and when running X11 apps) it doesn't adhere to the keyboard layout I've set on my config. I then run xwayland-satellite manually on the terminal and it starts a new instance on DISPLAY=:1, then I use the command env DISPLAY=:1 xterm and it does adhere to my keyboard layout. I've tested this on both a laptop using Latin American keymap and a desktop using US International keymap and in both instances the same happens.

Config
config-notification {
    disable-failed
}

gestures {
    hot-corners {
        off
    }
}

// Input device configuration.
input {
    keyboard {
        // xkb {
        //     layout "us"
        //     variant "altgr-intl"
        //     options "compose:menu"
        // }
        repeat-delay 200
        repeat-rate 30
        numlock
    }

    touchpad {
        tap
        natural-scroll
    }

    mouse {
    }

    trackpoint {
    }

    // Focus windows and outputs automatically when moving the mouse into them.
    // Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
    focus-follows-mouse max-scroll-amount="0%"
}

// Settings that influence how windows are positioned and sized.
layout {
    background-color "transparent"
    center-focused-column "never"
    preset-column-widths {
        proportion 0.33333
        proportion 0.5
        proportion 0.66667
    }
    default-column-width { proportion 0.5; }
    border {
        off
        width 4
        active-color   "#707070"      // Neutral gray
        inactive-color "#d0d0d0"      // Light gray
        urgent-color   "#cc4444"      // Softer red
    }
    shadow {
        softness 30
        spread 5
        offset x=0 y=5
        color "#0007"
    }
    struts {
    }
}
layer-rule {
    match namespace="^quickshell$"
    place-within-backdrop true
}
overview {
    workspace-shadow {
        off
    }
}

environment {
  XDG_CURRENT_DESKTOP "niri"
}
hotkey-overlay {
    skip-at-startup
}
prefer-no-csd
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
animations {
    workspace-switch {
        spring damping-ratio=0.80 stiffness=523 epsilon=0.0001
    }
    window-open {
        duration-ms 150
        curve "ease-out-expo"
    }
    window-close {
        duration-ms 150
        curve "ease-out-quad"
    }
    horizontal-view-movement {
        spring damping-ratio=0.85 stiffness=423 epsilon=0.0001
    }
    window-movement {
        spring damping-ratio=0.75 stiffness=323 epsilon=0.0001
    }
    window-resize {
        spring damping-ratio=0.85 stiffness=423 epsilon=0.0001
    }
    config-notification-open-close {
        spring damping-ratio=0.65 stiffness=923 epsilon=0.001
    }
    screenshot-ui-open {
        duration-ms 200
        curve "ease-out-quad"
    }
    overview-open-close {
        spring damping-ratio=0.85 stiffness=800 epsilon=0.0001
    }
}
window-rule {
    match app-id=r#"^org\.wezfurlong\.wezterm$"#
    default-column-width {}
}
window-rule {
    match app-id=r#"^org\.gnome\."#
    draw-border-with-background false
    geometry-corner-radius 12
    clip-to-geometry true
}
window-rule {
    match app-id=r#"^gnome-control-center$"#
    match app-id=r#"^pavucontrol$"#
    match app-id=r#"^nm-connection-editor$"#
    default-column-width { proportion 0.5; }
    open-floating false
}
window-rule {
    match app-id=r#"^gnome-calculator$"#
    match app-id=r#"^galculator$"#
    match app-id=r#"^qalculate*"#
    match app-id=r#"^blueman-manager$"#
    match app-id=r#"^org\.gnome\.Nautilus$"#
    match app-id=r#"^xdg-desktop-portal$"#
    open-floating true
}
window-rule {
    match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
    default-floating-position x=10 y=10 relative-to="bottom-right"
    open-focused false
}
window-rule {
    match app-id=r#"^org\.wezfurlong\.wezterm$"#
    match app-id="Alacritty"
    match app-id="zen"
    match app-id="com.mitchellh.ghostty"
    match app-id="kitty"
    draw-border-with-background false
}
window-rule {
    match app-id=r#"firefox$"# title="^Picture-in-Picture$"
    match app-id="zoom"
    open-floating true
}
// Open dms windows as floating by default
window-rule {
    match app-id=r#"org.quickshell$"#
    open-floating true
}
debug {
    honor-xdg-activation-with-invalid-serial
}

// Override to disable super+tab
recent-windows {
    binds {
        Alt+Tab         { next-window scope="output"; }
        Alt+Shift+Tab   { previous-window scope="output"; }
        Alt+grave       { next-window filter="app-id"; }
        Alt+Shift+grave { previous-window filter="app-id"; }
    }
}

spawn-at-startup "lf-dbus"
spawn-at-startup "udiskie" "-t"
spawn-at-startup "kdeconnect-indicator"

// Include dms files
include "dms/colors.kdl"
include "dms/layout.kdl"
include "dms/alttab.kdl"
include "dms/binds.kdl"
include "dms/outputs.kdl"
include "dms/cursor.kdl"

// Include local files
include "local/kblayout.kdl"

// Contents of local/kblayout.kdl
input {
    keyboard {
        xkb {
            layout "us"
            model "pc104"
            variant "altgr-intl"
            options "compose:menu"
        }
    }
}

System Information

  • niri version: niri 25.11 (b35bcae)
  • Distro: Arch Linux x86_64
  • GPU 1: AMD Radeon RX 7800 XT [Discrete]
  • GPU 2: AMD Raphael [Integrated]
  • CPU: AMD Ryzen 5 7600X (12) @ 5.46 GHz

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:inputKeyboard, mouse, touchpad, tablet, gestures, pointernot niriOther non-niri issues

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions