Accents on US keyboards

From ArchWiki
Revision as of 18:37, 18 November 2012 by Jelliott (Talk | contribs) (What to do with the xmodmap file)

Jump to: navigation, search

Typing in foreign languages such as French, Italian and German can be difficult on an American keyboard. To remedy this, Xorg provides options such as the compose key and the xmodmap utility.

XCompose

The compose key, when pressed in sequence with other keys, produces a Unicode character. E.g., in most configurations pressing <Compose> ' e produces é.

Compose keys appeared on some computer keyboards decades ago, especially those produced by Sun Microsystems. However, it can be enabled on any keyboard with setxkbmap. For example, compose can be set to right alt by running:

setxkbmap -option compose:ralt

If you want another key to be your Compose key, see /usr/share/X11/xkb/rules/base.lst at the compose: lines.

You may also edit your /etc/X11/xorg.conf.d/20-evdev.conf and change InputClass / 'evdev keyboard catchall' to look like this.

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "XkbOptions" "terminate:ctrl_alt_bksp,compose:ralt"
EndSection


Key combinations

By default, the compose key uses combinations defined in a file. The file used depends on the user's locale: an American using LC_CTYPE=en_US.UTF-8, for instance, would find the defaults in /usr/share/X11/locale/en_US.UTF-8/Compose.

Some of the default combinations are listed below:

Compose ` a : à
Compose ' e : é
Compose ^ i : î
Compose ~ n : ñ
Compose / o : ø
Compose " u : ü
Compose o c : ©
Compose + - : ±
Compose : - : ÷

However, you can define your own compose key combinations by copying the default file to ~/.XCompose and editing it. The compose key works with any of the thousands of valid Unicode characters, including those outside the Basic Multilingual Plane.

Environment variables

Some unfriendly applications (including many GTK apps) will override the compose key and default to their own built-in combinations. You can typically fix this by setting environment variables; for instance, you can fix the behavior for GTK with:

export GTK_IM_MODULE=xim

xmodmap

The xmodmap utility that is supplied with Xorg allows user to completely remap the keyboard. The following is an example configuration:

Note: AltGr is the Alt key on the right-hand side of the space bar.

AltGr + e -> é
AltGr + r -> è
AltGr + a -> à
AltGr + u -> ù
AltGr + i -> ì
AltGr + o -> ò
AltGr + c -> ç
AltGr + [ -> «
AltGr + ] -> »
AltGr + ; -> dead diaresis (ï, ü, etc.)
AltGr + 6 -> dead circumflex (î, ê, etc.) 

A useful utility to produce a xmodmap file

On this page you'll find XKeyCaps, a graphical front-end to xmodmap which makes it easier to produce an ideal xmodmap file. XKeyCaps is available from the community repository and can be installed with pacman:

# pacman -S xkeycaps

Example xmodmap file

This is an xmodmap file which remaps keys to match the above example.

clear Mod1
clear Mod2
!  us.map with a few redefinitions
keycode   9 = Escape Escape
keycode  10 = 1 exclam
keycode  11 = 2 at at
keycode  12 = 3 numbersign
keycode  13 = 4 dollar dollar
keycode  14 = 5 percent currency
keycode  15 = 6 asciicircum dead_circumflex
keycode  16 = 7 ampersand braceleft
keycode  17 = 8 asterisk bracketleft
keycode  18 = 9 parenleft bracketright
keycode  19 = 0 parenright braceright
keycode  20 = minus underscore backslash
keycode  21 = equal plus
keycode  22 = BackSpace Delete
keycode  23 = Tab Tab
keycode  24 = q
keycode  25 = w
keycode  26 = e E eacute
keycode  27 = r R egrave
keycode  28 = t
keycode  29 = y
keycode  30 = u U ugrave
keycode  31 = i I igrave
keycode  32 = o O ograve
keycode  33 = p
keycode  34 = bracketleft braceleft guillemotleft
keycode  35 = bracketright braceright guillemotright
keycode  36 = Return
keycode  37 = Control_L
keycode  38 = a A agrave
keycode  39 = s
keycode  40 = d
keycode  41 = f
keycode  42 = g
keycode  43 = h
keycode  44 = j
keycode  45 = k
keycode  46 = l
keycode  47 = semicolon colon dead_diaeresis
keycode  48 = apostrophe quotedbl
keycode  49 = grave asciitilde dead_grave
keycode  50 = Shift_L
keycode  51 = backslash bar
keycode  52 = z
keycode  53 = x
keycode  54 = c C ccedilla
keycode  55 = v
keycode  56 = b
keycode  57 = n
keycode  58 = m
keycode  59 = comma less apostrophe
keycode  60 = period greater quotedbl
keycode  61 = slash question
keycode  62 = Shift_R
keycode  63 = KP_Multiply
keycode  64 = Alt_L Meta_L
keycode  65 = space space
keycode  66 = Caps_Lock
keycode  67 = F1 F11
keycode  68 = F2 F12
keycode  69 = F3 F13
keycode  70 = F4 F14
keycode  71 = F5 F15
keycode  72 = F6 F16
keycode  73 = F7 F17
keycode  74 = F8 F18
keycode  75 = F9 F19
keycode  76 = F10 F20
keycode  77 = Num_Lock
keycode  78 = Scroll_Lock
keycode  79 = KP_7
keycode  80 = KP_8
keycode  81 = KP_9
keycode  82 = KP_Subtract
keycode  83 = KP_4
keycode  84 = KP_5
keycode  85 = KP_6
keycode  86 = KP_Add
keycode  87 = KP_1
keycode  88 = KP_2
keycode  89 = KP_3
keycode  90 = KP_0
keycode  94 = less greater bar
keycode  95 = F11 F11
keycode  96 = F12 F12
keycode 108 = KP_Enter
keycode 109 = Control_R
keycode 112 = KP_Divide
keycode 113 = Mode_switch
keycode 114 = Break
keycode 110 = Find
keycode  98 = Up
keycode  99 = Prior
keycode 100 = Left
keycode 102 = Right
keycode 115 = Select
keycode 104 = Down
keycode 105 = Next
keycode 106 = Insert
keycode 116 = Mode_switch
! right windows-menu key, redefined as Compose key
keycode 117 = Multi_key
add Mod1 = Alt_L
add Mod2 = Mode_switch

What to do with the xmodmap file

To use this configuration, put it in a hidden file called .xmodmap in your home directory:

~/.xmodmap

Some desktop environments such as GNOME will automatically detect the file and ask you if you want to use it. If you are using a desktop environment or a window manager which does not do this, you will have to add a line to an executable file called .xinitrc, located in your home directory. This file contains a list of commands that are executed after you log in.

If you already have a .xinitrc file, type these commands in a terminal:

cd
echo "xmodmap ~/.xmodmap" >> .xinitrc

If you do not have a .xinitrc file, do this:

cd
echo "xmodmap ~/.xmodmap" > .xinitrc
chmod 755 .xinitrc