I am playing with xkeyboard-config. Currently, I'm trying to understand the rules files.
I've used xkbcomp
to get the current keymap from the X server and write it to a file. This keymap is the default keymap, which loads without errors when setxkbmap
is run without any arguments. I've then pulled the individual components into their own files, and I've placed the files into a directory structure resembling the xkb config directory structure.
It looks like this:
xkb
├── compat
│ └── current
├── geometry
│ └── current
├── keycodes
│ └── current
├── rules
│ ├── current
│ ├── current.lst
│ └── current.xml
├── symbols
│ └── current
└── types
└── current
I have created the files in the rules subdirectory myself in an attempt to create a minimal set of rules files capable of loading a single layout.
When I point setxkbmap
at this directory and try to load the keymap therin, I get an error, despite not having at all changed the contents of the components.
$ setxkbmap -Ixkb -v 10 -rules current -layout current -model current -variant current
Setting verbose level to 10
locale is C
Warning! Multiple definitions of rules file
Using command line, ignoring X server
Warning! Multiple definitions of keyboard model
Using command line, ignoring X server
Warning! Multiple definitions of keyboard layout
Using command line, ignoring X server
Trying to load rules file ./rules/current...
Trying to load rules file /usr/share/X11/xkb/rules/current...
Trying to load rules file xkb/rules/current...
Success.
Applied rules from current:
rules: current
model: current
layout: current
variant: current
Trying to build keymap using the following components:
keycodes: current
types: current
compat: current
symbols: current
geometry: current
Error loading new keyboard description
If I load the keymap by adding the -print
option to setxkbmap
, and piping the result into xkbcomp
, the keymap is compiled and loaded without any errors.
Since the only things that have substantially changed from how the X server loads the keymap to how I load the keymap are the rules files being used and the organization of the components, I'm presuming that the source of the error resides there. What is wrong with the setup that I have created? Why do I get an error when I try to reload the keymap using setxkbmap
?
For reference, the contents of the rules files follow.
xkb/rules/current
! model layout variant = keycodes types compat symbols geometry
current current current = current current current current current
xkb/rules/current.lst
! layout
current Current Layout
xkb/rules/current.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xkbConfigRegistry SYSTEM "xkb.dtd">
<xkbConfigRegistry version="1.1">
<modelList>
<model>
<configItem>
<name>current</name>
<description>Current Model</description>
<vendor>Zistack</vendor>
</configItem>
</model>
</modelList>
<layoutList>
<layout>
<configItem>
<name>current</name>
<description>Current Layout</description>
<languageList>
<iso639Id>eng</iso639Id>
</languageList>
</configItem>
<variantList>
<variant>
<configItem>
<name>current</name>
<shortDescription>current</shortDescription>
<description>current</description>
<languageList>
<iso639Id>eng</iso639Id>
</languageList>
</configItem>
</variant>
</variantList>
</layout>
</layoutList>
</xkbConfigRegistry>