I've just installed i3 with the default configuration, and there's a major issue with keyboard shortcuts: even though my keyboard layout isn't QWERTY the keyboard shortcuts are mapped to the relevant QWERTY keys. So I have to press Win+the key marked "F" in the QWERTY layout to fullscreen a window, even though pressing that key produces a "u" character (in Dvorak layout). How do I work around this so that pressing Win+f works in any layout, without needing separate configuration per layout?
If you want to use the default configuration, you can just copy
~/.i3/config; replace whichever already exists to avoid confusion).
i3 supports configuring keyboard shortcuts by key symbols as well as by key codes.
Key symbols are the characters that are sent by a keypress and depend on the keyboard layout. They are bound with the
bindsymkeyword. For example, in order to bind
toggle fullscreento the combination of Win and the key that sends an "f" you would use:
bindsym Mod4+f fullscreen toggle
This method lends itself for use with mnemonics (Fullscreen, reSize, etc.) and you can immediately find the desired shortcut by just looking at the configuration. But if you switch between keyboard layouts, the key might also move around. Also if you switch between differing alphabets not every symbol will be represented in both layouts.
Key codes represent the physical key on the keyboard and do not depend on the keyboard layout but only on the keyboard model (e.g.
pc105). In order to bind
toggle fullscreento the combination of Win and the key that is labeled as F on an US keyboard (homerow, left index finger) :
bindcode Mod4+41 fullscreen toggle
This method keeps shortcuts in the same physical place across differing keyboard layouts. This is especially useful, if you sometimes switch between layouts but find your shortcuts mostly by muscle memory. On the other hand the configuration is not very readable (
Depending on personal preference you might want to choose either method. You can even mix them but you have to take some care to not assign the same key twice, e.g.
bindsym f … and
bindcode 41 … at the same time.
i3 packages come with a default configuration for each method.
i3 does not find a user configuration, it offers to create one using
i3-config-wizard. This takes the
config.keycodes default configuration and replaces all
bindcode configurations by the equivalent
bindsym configurations on the current keyboard layout. This ensures that all keys are in the same location as shown in the User's Guide and that the configuration file is easily understandable at the same time. The drawback is of course that it breaks some mnemonics if you are not using a QWERTY or QWERTZ layout.
My personal suggestion would be to have a (long) look at the User's Guide and only use the default configuration as a starting point to create your own configuration, that fits your workflow and preferences.