Interesting, I have a file /var/lib/plasmalogin/.config/kxkbrc which you don’t - that file has settings for the layouts from my user session. (However, there doesn’t seem to be a way to actually switch layouts on the login screen, and my main layout is US English. So I’m not sure whether it does read that file and use the first listed layout, or whether the file is not used yet.)
I’m on KDE Linux (so Plasma 6.8 dev build) - not sure if this is new in 6.8.
I’m using programmer dvorak (dvp) (I want to use a custom layout - but dvp at least is close enough) which is correctly used by plasma-login-manager. The 2 files I mentioned seem to be the only ones on my system where dvp is configured, so I think that should be it.
But there might be another thing going on: I quickly peeked into the source code and plasma-login-manager queries the dbus system bus for the correct keymap - maybe that’s where things go wrong…
You can query it by running the following command: gdbus introspect --system --dest org.freedesktop.locale1 --object-path /org/freedesktop/locale1
the locale does not matter - thats only for translations and format of numbers, dates and stuff. The important values are the X11*. For me that part looks like this:
readonly s X11Layout = 'us';
readonly s X11Model = 'pc105';
readonly s X11Variant = 'dvp';
readonly s X11Options = '';
Hm… maybe I should have been suspicous when you wrote “already have layout=fr”.
~ ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 15:44:00 ─╮
❯ gdbus introspect --system --dest org.freedesktop.locale1 --object-path /org/freedesktop/locale1 ─╯
node /org/freedesktop/locale1 {
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface_name,
in s property_name,
out v value);
GetAll(in s interface_name,
out a{sv} props);
Set(in s interface_name,
in s property_name,
in v value);
signals:
PropertiesChanged(s interface_name,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
interface org.freedesktop.locale1 {
methods:
SetLocale(in as locale,
in b interactive);
SetVConsoleKeyboard(in s keymap,
in s keymap_toggle,
in b convert,
in b interactive);
SetX11Keyboard(in s layout,
in s model,
in s variant,
in s options,
in b convert,
in b interactive);
signals:
properties:
readonly as Locale = ['LANG=fr_FR.UTF-8'];
readonly s X11Layout = '';
readonly s X11Model = '';
readonly s X11Variant = '';
readonly s X11Options = '';
readonly s VConsoleKeymap = 'fr';
readonly s VConsoleKeymapToggle = '';
};
};
~ ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 15:44:01 ─╮
❯ cat /etc/X11/xorg.conf.d/00-keyboard.conf ─╯
# Read and parsed by systemd-localed. It's probably wise not to edit this file
# manually too freely.
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "fr"
Option "XkbVariant" ""
EndSection
~ ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 15:44:08 ─╮
❯ cat /etc/default/keyboard ─╯
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT=""
BACKSPACE="guess"
the kxkbrc file is where the plasma GUI settings > input device > keyboard saves it’s settings.
why is there a kxkbrc file located in /var when there is no plasma GUI settings up and running yet prior to login?
the one in /home should take precedence, so no matter what the one in /var says (or if it even exists) the one in /home would determine what gets used by the plasmashell.
did they stuff this file in in /var for the plasma login to use, so that it can be read earlier in the boot cycle before plasmashell even starts?
if that’s the case then just making a copy there should do the trick, yes?
there could be a glitch in the new plasma login manager where it doesn’t copy this file over for it’s own use in time for it to affect the plasma login
It helps for me, that I can login with de keyboard layout from the login screen. Showing the status of localectl reveals that X11 Layout was unset in my case.
❯ cat ~/.config/kxkbrc
[Layout]
LayoutList=de
Model=pc104alt
Use=true
❯ localectl
System Locale: LANG=en_GB.UTF-8
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_MONETARY=de_DE.UTF-8
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
VC Keymap: de
X11 Layout: (unset)
❯ localectl set-x11-keymap --no-convert de
❯ localectl
System Locale: LANG=en_GB.UTF-8
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_MONETARY=de_DE.UTF-8
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
VC Keymap: de
X11 Layout: de
From what I’ve observed, setting x11-keymap will generate the file under /etc/X11/xorg.conf.d/00-keyboard.conf, but I did not check if that file was present before that.
❯ cat /etc/X11/xorg.conf.d/00-keyboard.conf
# Written by systemd-localed(8), read by systemd-localed and Xorg. It's
# probably wise not to edit this file manually. Use localectl(1) to
# update this file.
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "de"
EndSection
I am not sure which upgraded packages cause this issue, because there was quiet a few. systemd may show a matching change note to this issue.
[2026-06-25T22:36:52+0200] [ALPM] upgraded xkeyboard-config (2.47-1 -> 2.48-1)
# ...
[2026-06-25T22:36:53+0200] [ALPM] upgraded systemd (260.2-2 -> 261-1)
[2026-06-25T22:36:54+0200] [ALPM-SCRIPTLET] Creating group 'systemd-imds' with GID 954.
[2026-06-25T22:36:54+0200] [ALPM-SCRIPTLET] Creating user 'systemd-imds' (systemd Instance Metadata) with UID 954 and GID 954.
[2026-06-25T22:36:54+0200] [ALPM-SCRIPTLET] :: This is a systemd feature update. You may want to have a look at
[2026-06-25T22:36:54+0200] [ALPM-SCRIPTLET] NEWS for what changed, or if you observe unexpected behavior:
[2026-06-25T22:36:54+0200] [ALPM-SCRIPTLET] /usr/share/doc/systemd/NEWS
# less /usr/share/doc/systemd/NEWS
* systemd-localed will now save the XKB keyboard configuration to
/etc/vconsole.conf, and also read it from there with a higher
preference than the /etc/X11/xorg.conf.d/00-keyboard.conf config
file. Previously, this information was stored in the former file in
converted form, and only in latter file in the original form. Tools
which want to access keyboard configuration can now do so from a
standard location.