Blame docs/doc/kbd.FAQ-15.html

Packit Service 50ad14
Packit Service 50ad14
<HTML>
Packit Service 50ad14
<HEAD>
Packit Service 50ad14
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
Packit Service 50ad14
 <TITLE>The Linux keyboard and console HOWTO: Examples of use of loadkeys and xmodmap</TITLE>
Packit Service 50ad14
 <LINK HREF="kbd.FAQ-16.html" REL=next>
Packit Service 50ad14
 <LINK HREF="kbd.FAQ-14.html" REL=previous>
Packit Service 50ad14
 <LINK HREF="kbd.FAQ.html#toc15" REL=contents>
Packit Service 50ad14
</HEAD>
Packit Service 50ad14
<BODY>
Packit Service 50ad14
Next
Packit Service 50ad14
Previous
Packit Service 50ad14
Contents
Packit Service 50ad14

Packit Service 50ad14

15. Examples of use of loadkeys and xmodmap

Packit Service 50ad14
Packit Service 50ad14

Packit Service 50ad14
Packit Service 50ad14
loadkeys!example using
Packit Service 50ad14
-->
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
xmodmap!example using
Packit Service 50ad14
-->
Packit Service 50ad14

Switching Caps Lock and Control on the keyboard (assuming you use

Packit Service 50ad14
keymaps 0-15; check with dumpkeys | head -1)
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        % loadkeys
Packit Service 50ad14
        keymaps 0-15
Packit Service 50ad14
        keycode 58 = Control
Packit Service 50ad14
        keycode 29 = Caps_Lock
Packit Service 50ad14
        %
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Switching them under X only:
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        % xmodmap .xmodmaprc
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
where .xmodmaprc contains lines
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        remove Lock = Caps_Lock
Packit Service 50ad14
        remove Control = Control_L
Packit Service 50ad14
        keysym Control_L = Caps_Lock
Packit Service 50ad14
        keysym Caps_Lock = Control_L
Packit Service 50ad14
        add Lock = Caps_Lock
Packit Service 50ad14
        add Control = Control_L
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
What is this about the key numbering? Backspace is 14 under Linux,
Packit Service 50ad14
22 under X?  Well, the numbering can best be regarded as arbitrary;
Packit Service 50ad14
the Linux number of a key can be found using showkey(1), and the
Packit Service 50ad14
X number using xev(1). Often the X number will be 8 more than the
Packit Service 50ad14
Linux number.
Packit Service 50ad14

Something else people like to change are the bindings of the function keys.

Packit Service 50ad14
Suppose that you want to make F12 produce the string "emacs ".
Packit Service 50ad14
Then
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        % loadkeys
Packit Service 50ad14
        keycode 88 = F12
Packit Service 50ad14
        string F12 = "emacs "
Packit Service 50ad14
        %
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
will do this. More explicitly, the procedure is like this:
Packit Service 50ad14
(i) find the keycodes of the keys to be remapped, using showkey(1).
Packit Service 50ad14
(ii) save the current keymap, make a copy and edit that:
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        % dumpkeys > my_keymap
Packit Service 50ad14
        % cp my_keymap trial_keymap
Packit Service 50ad14
        % emacs trial_keymap
Packit Service 50ad14
        % loadkeys trial_keymap
Packit Service 50ad14
        %
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
The format of the table can be guessed by looking at the output
Packit Service 50ad14
of dumpkeys, and is documented in keymaps(5).
Packit Service 50ad14
When the new keymap functions as desired, you can put an invocation
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        loadkeys my_new_keymap
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
in /etc/rc.local or so, to execute it automatically at boot-up.
Packit Service 50ad14
Note that changing modifier keys is tricky, and a newbie can easily
Packit Service 50ad14
get into a situation only an expert can get out of.
Packit Service 50ad14

The default directory for keymaps is /usr/lib/kbd/keymaps.

Packit Service 50ad14
The default extension for keymaps is .map.
Packit Service 50ad14
For example, loadkeys uk would probably load
Packit Service 50ad14
/usr/lib/kbd/keymaps/i386/qwerty/uk.map.
Packit Service 50ad14
(With kbd-0.95 and older this would be /usr/lib/kbd/keytables
Packit Service 50ad14
and /usr/lib/kbd/keytables/uk.map.)
Packit Service 50ad14

Packit Service 50ad14

(On my machine) /dev/console is a symbolic link to /dev/tty0,

Packit Service 50ad14
and the kernel regards /dev/tty0 as a synonym for the current VT.
Packit Service 50ad14
XFree86 1.3 changes the owner of /dev/tty0, but does not reset this
Packit Service 50ad14
after finishing. Thus, loadkeys or dumpkeys might fail because
Packit Service 50ad14
someone else owns /dev/tty0;
Packit Service 50ad14
in such a case you might run X first.
Packit Service 50ad14
Note that you cannot change keyboard mappings when not at the console
Packit Service 50ad14
(and not superuser).
Packit Service 50ad14

Packit Service 50ad14

15.1 `I can use only one finger to type with'

Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14

Packit Service 50ad14
Packit Service 50ad14
keyboard!making modifier keys toggle
Packit Service 50ad14
-->
Packit Service 50ad14

"Can the Shift, Ctrl and Alt keys be made to behave as toggles?"

Packit Service 50ad14

Yes, after saying

Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        % loadkeys
Packit Service 50ad14
        keymaps 0-15
Packit Service 50ad14
        keycode 29 = Control_Lock
Packit Service 50ad14
        keycode 42 = Shift_Lock
Packit Service 50ad14
        keycode 56 = Alt_Lock
Packit Service 50ad14
        %
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
the left Control, Shift and Alt keys will act as toggles.
Packit Service 50ad14
The numbers involved are revealed by showkey
Packit Service 50ad14
(and usually are 29, 97, 42, 54, 56, 100 for left and right control,
Packit Service 50ad14
shift and alt, respectively), and the functions are
Packit Service 50ad14
Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.
Packit Service 50ad14

"What about `sticky' modifier keys?"

Packit Service 50ad14

Since version 1.3.33, the kernel knows about `sticky' modifier keys.

Packit Service 50ad14
These act on the next key pressed. So, where one earlier needed
Packit Service 50ad14
the 3-symbol sequence Shift_Lock a Shift_Lock to type `A', one
Packit Service 50ad14
can now use the 2-symbol sequence SShift_Lock a.
Packit Service 50ad14
You can say
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        % loadkeys
Packit Service 50ad14
        keymaps 0-15
Packit Service 50ad14
        keycode 54 = SShift
Packit Service 50ad14
        keycode 97 = SCtrl
Packit Service 50ad14
        keycode 100 = SAlt
Packit Service 50ad14
        %
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
to make the right Shift, Ctrl, Alt sticky versions of the left ones.
Packit Service 50ad14
This will allow you to type Ctrl-Alt-Del in three keystrokes with one hand.
Packit Service 50ad14

The keymaps line in these examples should cover all keymaps you have in use.

Packit Service 50ad14
You find what keymaps you have in use by
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
        % dumpkeys | head -1
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14

Packit Service 50ad14

Packit Service 50ad14

15.2 Sticky keys under X

Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14

The following text was contributed by Piotr Mitros.

Packit Service 50ad14

XFree86 supports an accessibility option which allows disabled users

Packit Service 50ad14
to type single-handed. With sticky keys enabled, the user can hit a
Packit Service 50ad14
modifier key (ctrl, alt, shift) followed by another key, rather than
Packit Service 50ad14
having to hold the modifier key while hitting the letter. 
Packit Service 50ad14

To enable sticky keys, first make sure the xkb extension is enabled

Packit Service 50ad14
(this is done during initial X server configuration and is usually
Packit Service 50ad14
enabled by default). Next, run the X server with the +accessx
Packit Service 50ad14
option. If you use startx, either run startx -- +accessx or
Packit Service 50ad14
add +accessx to the serverargs line in the startx script.
Packit Service 50ad14
If you use xdm, add +accessx to the appropriate server line
Packit Service 50ad14
in /etc/X11/xdm/Xservers.
Packit Service 50ad14

It is also possible to enable X accessibility with some end-user

Packit Service 50ad14
utilities with a running X server.
Packit Service 50ad14

Once X accessibility is enabled, press the shift key five times in a

Packit Service 50ad14
row to enable sticky keys. To disable sticky keys, either press the
Packit Service 50ad14
shift key five times again, or press a key while holding a modifier
Packit Service 50ad14
key.
Packit Service 50ad14

XFree86 also supports Slow Keys, Repeat Keys, Bounce Keys and an

Packit Service 50ad14
audible bell. xkbcomp can be used to generate a .xkm file
Packit Service 50ad14
to enable these. The appropriate xkbcomp commands are listed in
Packit Service 50ad14
/usr/X11R6/lib/X11/xkb/compat/accessx.
Packit Service 50ad14
Unfortunately, the exact process is still undocumented.
Packit Service 50ad14

Packit Service 50ad14

Packit Service 50ad14
Next
Packit Service 50ad14
Previous
Packit Service 50ad14
Contents
Packit Service 50ad14
</BODY>
Packit Service 50ad14
</HTML>