200 lines
6.9 KiB
HTML
200 lines
6.9 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
|
|
<TITLE>The Linux keyboard and console HOWTO: Examples of use of loadkeys and xmodmap</TITLE>
|
|
<LINK HREF="Keyboard-and-Console-HOWTO-16.html" REL=next>
|
|
<LINK HREF="Keyboard-and-Console-HOWTO-14.html" REL=previous>
|
|
<LINK HREF="Keyboard-and-Console-HOWTO.html#toc15" REL=contents>
|
|
</HEAD>
|
|
<BODY>
|
|
<A HREF="Keyboard-and-Console-HOWTO-16.html">Next</A>
|
|
<A HREF="Keyboard-and-Console-HOWTO-14.html">Previous</A>
|
|
<A HREF="Keyboard-and-Console-HOWTO.html#toc15">Contents</A>
|
|
<HR>
|
|
<H2><A NAME="s15">15. Examples of use of loadkeys and xmodmap</A></H2>
|
|
|
|
<P>
|
|
<!--
|
|
loadkeys!example using
|
|
-->
|
|
|
|
<!--
|
|
xmodmap!example using
|
|
-->
|
|
<P>Switching Caps Lock and Control on the keyboard (assuming you use
|
|
keymaps 0-15; check with <CODE>dumpkeys | head -1</CODE>)
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
% loadkeys
|
|
keymaps 0-15
|
|
keycode 58 = Control
|
|
keycode 29 = Caps_Lock
|
|
%
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
Switching them under X only:
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
% xmodmap .xmodmaprc
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
where <CODE>.xmodmaprc</CODE> contains lines
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
remove Lock = Caps_Lock
|
|
remove Control = Control_L
|
|
keysym Control_L = Caps_Lock
|
|
keysym Caps_Lock = Control_L
|
|
add Lock = Caps_Lock
|
|
add Control = Control_L
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
What is this about the key numbering? Backspace is 14 under Linux,
|
|
22 under X? Well, the numbering can best be regarded as arbitrary;
|
|
the Linux number of a key can be found using showkey(1), and the
|
|
X number using xev(1). Often the X number will be 8 more than the
|
|
Linux number.
|
|
<P>Something else people like to change are the bindings of the function keys.
|
|
Suppose that you want to make F12 produce the string "emacs ".
|
|
Then
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
% loadkeys
|
|
keycode 88 = F12
|
|
string F12 = "emacs "
|
|
%
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
will do this. More explicitly, the procedure is like this:
|
|
(i) find the keycodes of the keys to be remapped, using showkey(1).
|
|
(ii) save the current keymap, make a copy and edit that:
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
% dumpkeys > my_keymap
|
|
% cp my_keymap trial_keymap
|
|
% emacs trial_keymap
|
|
% loadkeys trial_keymap
|
|
%
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
The format of the table can be guessed by looking at the output
|
|
of <CODE>dumpkeys</CODE>, and is documented in keymaps(5).
|
|
When the new keymap functions as desired, you can put an invocation
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
loadkeys my_new_keymap
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
in <CODE>/etc/rc.local</CODE> or so, to execute it automatically at boot-up.
|
|
Note that changing modifier keys is tricky, and a newbie can easily
|
|
get into a situation only an expert can get out of.
|
|
<P>The default directory for keymaps is <CODE>/usr/lib/kbd/keymaps</CODE>.
|
|
The default extension for keymaps is <CODE>.map</CODE>.
|
|
For example, <CODE>loadkeys uk</CODE> would probably load
|
|
<CODE>/usr/lib/kbd/keymaps/i386/qwerty/uk.map</CODE>.
|
|
(With kbd-0.95 and older this would be <CODE>/usr/lib/kbd/keytables</CODE>
|
|
and <CODE>/usr/lib/kbd/keytables/uk.map</CODE>.)
|
|
<P>
|
|
<P>(On my machine) <CODE>/dev/console</CODE> is a symbolic link to <CODE>/dev/tty0</CODE>,
|
|
and the kernel regards <CODE>/dev/tty0</CODE> as a synonym for the current VT.
|
|
XFree86 1.3 changes the owner of <CODE>/dev/tty0</CODE>, but does not reset this
|
|
after finishing. Thus, <CODE>loadkeys</CODE> or <CODE>dumpkeys</CODE> might fail because
|
|
someone else owns <CODE>/dev/tty0</CODE>;
|
|
in such a case you might run X first.
|
|
Note that you cannot change keyboard mappings when not at the console
|
|
(and not superuser).
|
|
<P>
|
|
<H2><A NAME="ss15.1">15.1 `I can use only one finger to type with'</A>
|
|
</H2>
|
|
|
|
<P>
|
|
<!--
|
|
keyboard!making modifier keys toggle
|
|
-->
|
|
<P>"Can the Shift, Ctrl and Alt keys be made to behave as toggles?"
|
|
<P>Yes, after saying
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
% loadkeys
|
|
keymaps 0-15
|
|
keycode 29 = Control_Lock
|
|
keycode 42 = Shift_Lock
|
|
keycode 56 = Alt_Lock
|
|
%
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
the left Control, Shift and Alt keys will act as toggles.
|
|
The numbers involved are revealed by showkey
|
|
(and usually are 29, 97, 42, 54, 56, 100 for left and right control,
|
|
shift and alt, respectively), and the functions are
|
|
Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.
|
|
<P>"What about `sticky' modifier keys?"
|
|
<P>Since version 1.3.33, the kernel knows about `sticky' modifier keys.
|
|
These act on the next key pressed. So, where one earlier needed
|
|
the 3-symbol sequence Shift_Lock a Shift_Lock to type `A', one
|
|
can now use the 2-symbol sequence SShift_Lock a.
|
|
You can say
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
% loadkeys
|
|
keymaps 0-15
|
|
keycode 54 = SShift
|
|
keycode 97 = SCtrl
|
|
keycode 100 = SAlt
|
|
%
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
to make the right Shift, Ctrl, Alt sticky versions of the left ones.
|
|
This will allow you to type Ctrl-Alt-Del in three keystrokes with one hand.
|
|
<P>The keymaps line in these examples should cover all keymaps you have in use.
|
|
You find what keymaps you have in use by
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
% dumpkeys | head -1
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
<P>
|
|
<P>
|
|
<H2><A NAME="ss15.2">15.2 Sticky keys under <CODE>X</CODE></A>
|
|
</H2>
|
|
|
|
<P>The following text was contributed by Piotr Mitros.
|
|
<P>XFree86 supports an accessibility option which allows disabled users
|
|
to type single-handed. With sticky keys enabled, the user can hit a
|
|
modifier key (ctrl, alt, shift) followed by another key, rather than
|
|
having to hold the modifier key while hitting the letter.
|
|
<P>To enable sticky keys, first make sure the xkb extension is enabled
|
|
(this is done during initial <CODE>X</CODE> server configuration and is usually
|
|
enabled by default). Next, run the <CODE>X</CODE> server with the <CODE>+accessx</CODE>
|
|
option. If you use <CODE>startx</CODE>, either run <CODE>startx -- +accessx</CODE> or
|
|
add <CODE>+accessx</CODE> to the serverargs line in the <CODE>startx</CODE> script.
|
|
If you use <CODE>xdm</CODE>, add <CODE>+accessx</CODE> to the appropriate server line
|
|
in <CODE>/etc/X11/xdm/Xservers</CODE>.
|
|
<P>It is also possible to enable <CODE>X</CODE> accessibility with some end-user
|
|
utilities with a running <CODE>X</CODE> server.
|
|
<P>Once <CODE>X</CODE> accessibility is enabled, press the shift key five times in a
|
|
row to enable sticky keys. To disable sticky keys, either press the
|
|
shift key five times again, or press a key while holding a modifier
|
|
key.
|
|
<P>XFree86 also supports Slow Keys, Repeat Keys, Bounce Keys and an
|
|
audible bell. <CODE>xkbcomp</CODE> can be used to generate a <CODE>.xkm</CODE> file
|
|
to enable these. The appropriate <CODE>xkbcomp</CODE> commands are listed in
|
|
<CODE>/usr/X11R6/lib/X11/xkb/compat/accessx</CODE>.
|
|
Unfortunately, the exact process is still undocumented.
|
|
<P>
|
|
<HR>
|
|
<A HREF="Keyboard-and-Console-HOWTO-16.html">Next</A>
|
|
<A HREF="Keyboard-and-Console-HOWTO-14.html">Previous</A>
|
|
<A HREF="Keyboard-and-Console-HOWTO.html#toc15">Contents</A>
|
|
</BODY>
|
|
</HTML>
|