Difference between revisions of "Xmodmap"

From ArchWiki
Jump to: navigation, search
(Editing)
Line 35: Line 35:
 
Not all keysyms have to be set, but if you want to assign a later keysym without assigning earlier ones set the earlier keysyms to {{codeline|NoSymbol}}.
 
Not all keysyms have to be set, but if you want to assign a later keysym without assigning earlier ones set the earlier keysyms to {{codeline|NoSymbol}}.
  
== Editing ==
+
== Custom table ==
 +
You can create your own map and store it in your home directory (i.e. {{filename|~/.Xmodmap}}). Print the current keymap table into a configuration file:
 +
xmodmap -pke > ~/.Xmodmap
  
Extract your actual table of keycodes in a file (here: .xmod)
+
Make the desired changes to {{filename|~/.Xmodmap}} and then test the new configuration with:
xmodmap -pke > ~/.xmod
+
  xmodmap ~/.Xmodmap
Now you can edit .xmod. The new .xmod get loaded by
+
  xmodmap ~/.xmod
+
'''This has be done after each start of X!''' So put it in your autostart...
+
  
You can get the keycode (and more information) of a key with xev (or xkeycaps). If you start xev within a shell, a window will be opened and if you type a key, there will be some informations about it in the shell. Among others you get the keycode.
+
To activate your custom table when starting Xorg add the following:
 +
{{File|name=~/.xinitrc|content=
 +
if [ -f $HOME/.Xmodmap ]; then
 +
    /usr/bin/xmodmap $HOME/.Xmodmap
 +
fi}}
  
=== Example ===
+
Alternatively, edit the global startup script: {{filename|/etc/X11/xinit/xinitrc}}.
  
If I'ld to get an 'e' if I type 'l' and an 'E' if I type 'L', I'ld have to change
+
=== Test changes ===
keycode  46 = l L l L lstroke Lstroke lstroke
+
Within a shell, you can make changes for the current session. For example:
to
+
keycode  46 = e E l L lstroke Lstroke lstroke
+
(Maybe my standard keycode differs from yours. This will be an result of using different keyboard layouts)
+
 
+
=== Keysym ===
+
 
+
It is also possible, to change the keysym. I.e:
+
keysym a = e E
+
* a -> e
+
* shift+a -> E
+
It has the same effect as editting the corresponding keycode.
+
 
+
=== xmodmap within a shell ===
+
 
+
Within a shell, you can type make changes for this session. It's useful for testing. Examples:
+
 
  xmodmap -e "keycode  46 = l L l L lstroke Lstroke lstroke"
 
  xmodmap -e "keycode  46 = l L l L lstroke Lstroke lstroke"
 
  xmodmap -e "keysym a = e E"
 
  xmodmap -e "keysym a = e E"

Revision as of 23:04, 11 September 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Summary help replacing me
A general overview of modifying keymaps and pointer mappings with xmodmap.
Related
Xorg
Extra Keyboard Keys in Xorg
Extra Keyboard Keys

Xmodmap is a utility for modifying keymaps and pointer button mappings in Xorg.

Introduction

The Linux kernel generates a code each time a key is pressed on a keyboard. That code is compared to a table of keycodes defining a figure that is then displayed.

This process is complicated by Xorg, which starts its own table of keycodes. Each keycode can belong to a keysym. A keysym is like a function, started by typing a key. Xmodmap allows you to edit these keycode-keysym relations.

Keymap table

Print the current keymap table formatted into expressions: Template:Command

Each keymap is followed by the keysyms it is mapped to. The above example indicates that the keycode Template:Codeline is mapped to the lowercase n keysym, while the uppercase N keysym is mapped to keycode 57 and shift.

Each keysym column in the table corresponds to a particular key combination:

  1. key
  2. shift + key
  3. mode_switch + key
  4. mode_switch + shift + key
  5. AltGr + key
  6. AltGr + shift + key

Not all keysyms have to be set, but if you want to assign a later keysym without assigning earlier ones set the earlier keysyms to Template:Codeline.

Custom table

You can create your own map and store it in your home directory (i.e. Template:Filename). Print the current keymap table into a configuration file:

xmodmap -pke > ~/.Xmodmap

Make the desired changes to Template:Filename and then test the new configuration with:

xmodmap ~/.Xmodmap

To activate your custom table when starting Xorg add the following: Template:File

Alternatively, edit the global startup script: Template:Filename.

Test changes

Within a shell, you can make changes for the current session. For example:

xmodmap -e "keycode  46 = l L l L lstroke Lstroke lstroke"
xmodmap -e "keysym a = e E"

Special keys/signals

You can also also edit the keys: shift, ctrl alt and super (there always exists a left and a right one (Alt_R=AltGr))

At first you have to delete/clear the signals that should be edited. Write at the beginning of your Xmodmap file (here: ~/.xmod) :

!clear Shift
!clear Lock
clear Control
!clear Mod1
!clear Mod2
!clear Mod3
clear Mod4
!clear Mod5
keycode   8 =
...

Remember: ! is a comment. So only Control and Mod4 (Standard: Super_L Super_R) get cleared.

Write the new signals at the end of ~/.xmod:

keycode 255 =
!add Shift   = Shift_L Shift_R
!add Lock    = Caps_Lock
add Control = Super_L Super_R
!add Mod1    = Alt_L Alt_R
!add Mod2    = Mode_switch
!add Mod3    =
add Mod4    = Control_L Control_R
!add Mod5    =

Here: We exchanged the Super-keys with the ctrl-keys. My lil' finger likes that really ;).

Additional resources