<?xml version="1.0"?>
<article><artheader><title>How to setup international keyboard in X Window with Xmodmap and XKB</title><author><firstname>by Juraj Sipos, <ulink url="mailto:xvudpapc@savba.sk">xvudpapc@savba.sk</ulink></firstname></author><abstract><para>How to setup international keyboard in Linux or Unix with Xmodmap and
XKB written by (c) Juraj Sipos. The Xmodmap is a file that XFree86
reads in order to give you a keyboard layout. This solution will work
for you in setting up any international keyboard for (Debian, RedHat,
Mandrake, CorelLinux) Linux, FreeBSD, OpenBSD, NetBSD and possibly
every Unix that uses XFree86. The advantage of this howto is that it
is not architecture specific and will work on all other systems.</para></abstract></artheader><sect1><title>Introduction</title><sect2><title>Copyright</title><para>This documentation is free documentation; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.</para><para>This documentation is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.</para></sect2><sect2><title>Revision history</title><para><revhistory><revision><revnumber>1.6</revnumber><date>2002-11-19</date><revremark>Some links added, info on newer Linux versions
           included, major formatting changes</revremark></revision><revision><revnumber>1.5</revnumber><date>2001-12-03</date><revremark>Links on internationalization
	  added, info on XKB, troubleshooting, info on newer Linux
	  versions, StarOffice 6</revremark></revision><revision><revnumber>1.4</revnumber><date>N/A</date><revremark>Correction of script for including X Window fonts 
           to StarOffice 5.2</revremark></revision><revision><revnumber>1.3</revnumber><date>N/A</date><revremark>Minor corrections, spell checking and editation made,
           few more Xmodmap files added; list of what all ISO8859* 
           specifications mean</revremark></revision><revision><revnumber>1.2</revnumber><date>N/A</date><revremark>Completely rebuilt, added the possibility to
	  force the system to read Xmodmap;
          some national Xmodmap files added, more information included on
          building up the standard Xmodmap files</revremark></revision><revision><revnumber>1.1</revnumber><date>N/A</date><revremark>Added copyright information and slight modifications
           pertaining to newer systems</revremark></revision><revision><revnumber>1.0</revnumber><date>1999-08-01</date><revremark>initial version</revremark></revision></revhistory></para></sect2><sect2><title>Introduction</title><para>The international keyboard Xmodmap HOWTO. Copyright (C) 1999, 2002 Juraj Sipos 
(xvudpapc@savba.sk). Imagine you use a Linux or a BSD OS and want to write 
a business letter to a person that has a foreign name with a slash or 
diaeresis (two dots above a letter). Czech language uses signs like ent 
and many European languages have their special non-English characters.</para><para>This is the Xmodmap Howto, but some info on XKB is included, too.
Why Xmodmap? Xmodmap is a little hackers' solution that lets you gain
a complete control of a keyboard - you can map the keyboard to almost
everything. You can do this with XKB, too, but it's a little dirtier way,
albeit a possible one. A good idea is to keep your XKB maps clean and unmodified,
so that you don't have to reinstall your Unix box. Xmodmap solution helps you
map keyboard to your choice and if something goes wrong, you will be able
to use standard X keyboard. Some people also like their own customized 
keyboard layouts and this HOWTO will explain how to achieve this.</para><para>With information in this file you can make your own customized (international) 
keyboard layouts without installing any additional packages. The following 
information will help you set up German, Spanish, Italian, Slovak, Czech, 
Polish, Slovenian, Croatian, Danish, Dutch, French, Finnish, Norwegian, 
Estonian, Latvian, Swedish and other keyboards. You can also alternatively 
look at my hompage at <ulink url="http://www.freebsd.nfo.sk/">http://www.freebsd.nfo.sk</ulink> 
to see visual layouts of various keyboards. In case you want to install 
Greek, Hebrew or Russian language, follow my information and apply 
changes pertinent to these languages also with respect to other 
documentation (e.g., install Greek fonts, etc., see the Cyrilic, 
Hebrew, or Danish howto). </para></sect2></sect1><sect1><title>Setting up international keyboard in X Window System with Xmodmap and XKB</title><sect2><title>Quick start</title><sect3><title>Xmodmap</title><para>Make your own .Xmodmap file according to information in this file.</para><para>  
Write the following to your .bashentprofile in your home directory:</para><para>export LANG=language</para><para>where "language" is the language you want to use. The languages can be
found in the file locale.alias in /usr/X11R6/lib/X11/locale.
NOTE: some programs, like Mozilla, don't care about these user's locale settings.
Run "exit" command on the console and log in again for Bash to read
the statement from its .bashentprofile. </para><para>Install fonts (best are ISO8859-2 Type1 fonts for Eastern Europe, Czech 
or Slovak), put them in your font path in the /etc/X11/XF86Config file
(on some newer systems this is not necessary). Start X Server (startx). 
If you use GDM or XDM and your X server is already running, restart X server.  
Run the command "xmodmap ent/.Xmodmap" from the X terminal window to force
the system to read the .Xmodmap file. The dot does not have to be there. Name
the xmodmap keyboard map whatever way you want. Switch keyboard by pressing
a key (it is usually right Alt, Scroll Lock, it depends on how switching is
defined in the xmodmap file). That's all. NOTE: This HOWTO is for the X Window 
System, use of national keyboards on the console is not explained here. If 
you are desperate, try to issue the commands like: </para><para>setfont LatArCyrHeb-14 -m 8859-2  </para><para>followed by </para><para>loadkeys sk </para><para>("sk" stands for the Slovak language). Most Linuxes have their own utilities 
to set up console keyboards). </para></sect3><sect3><title>XKB</title><para>Provided you have your fonts installed, just open the X terminal window
and issue a command: setxkbmap kb, where "kb" is the keyboard layout you
want to use, for example:</para><para>setxkbmap si</para><para>for the Slovenian language</para><para>setxkbmap de</para><para>for the German language</para><para>All the language names you may use are located in /usr/X11R6/lib/X11/xkb/symbols
directory. </para><para>Alternatively, if you are using KDE 2.0, open the KDE Start button, click 
on Preferences, Personalization, Country ent Language and choose ISO8859-2 
charset. Note that this may be slightly different depending on the Linux or 
KDE distribution. In newer Linux distributions you don't have to do this 
anymore; in Slackware Linux 8.1, RedHat 8.0 or Mandrake 9 with KDE 3.0, 
for example, just open Preferences, Peripherals, Keyboard - choose your keyboard 
layout and everything should work fine (if you have the fonts pertinent for the
language of your choice installed, obviously).</para><para>You will see a language icon on the KDE panel. Switch the keyboard 
(NOTE: this is for XKB, my xmodmap definition uses Scroll Lock for switching, 
other xmodmap files use Right Alt) and enjoy.</para><para>You may alternatively edit the /etc/X11/Xf86Config file as explained in 
the Danish Howto, or issue this command in an X terminal window for 
the Slovak keyboard:</para><para>setxkbmap -model pc102 -symbols 'czsk(usentskentqwertz)'
setxkbmap cs -option grp:shiftenttoggle</para><para>In RedHat 7.2 and Mandrake 8.1, it is enough to run the following 
setxkbmap command from an X Terminal Window (assuming you have correct
fonts installed):</para><para>setxkbmap sk</para><para>setxkbmap si</para><para>setxkbmap de</para><para>qwerty or qwertz means that the letter z Z and y Y are swapped. </para><para>To see a variety of language maps (symbols), look in the file symbols.dir
in /usr/X11R6/lib/X11/xkb directory. </para><para>Some X Window managers override .Xmodmap setting. If .Xmodmap isn't
read by X automatically after starting the X Window System, a good way 
is to force the system to read it from your root (home) directory. 
You will do this by issuing the following command from an X terminal window:</para><para>xmodmap ent/.Xmodmap</para><para>After I installed the Slovak keyboard in KDE with Xmodmap file that used
definitions for ISO8859-2 keycode entities (lcaron, scaron, etc.), some changes
had to be done in the system in relation to a Linux or XFree distribution. The
changes mostly pertained to dead keys that did not work. </para></sect3></sect2></sect1><sect1><title>How to do it: this experimental solution is a legacy issue - do not read it if you use newer systems</title><para>Before the year 2000, I used the following way to customize keyboard in X Window
System on some Unices. Put the following in your .bashentprofile: </para><para>export LANG=language</para><para>OR</para><para>OR for csh shell</para><para>setenv LANG=langauge</para><para>and have the Xmodmap file in your home directory. If you ask me
where you may obtain such Xmodmap files, some are in this HOWTO, or go to GNOME
../share directory. The file /usr/X11R6/lib/X11/locale/locale.alias
contains the aliases for langauges, so look there in order to find out
what is caentES or brentFR (the exact syntax for your language to use -
you cannot write "croatia" but you must write "croatian", not "Croatian";
this is very important, as Unix is case sensitive).</para><para>Now you must install the pertinent language fonts and put path 
in XF86Config file to these fonts. If you want to internationalize your 
keyboard, use the standard Xmodmap definitions first and use right alt
to switch between keyboards (if you use GNOME Xmodmap files). 
If it does not work, do the following:</para><para>a) Copy the "Compose"
file from: /usr/X11R6/lib/X11/locale/iso8859-2
to: /usr/X11R6/lib/X11/locale/iso8859-1 directory (yes, iso8859-1,
not iso8859-2). Back up the original "Compose" file if you want </para><para>b) Put the included .Xmodmap file to your root directory (Slovak
language, or make your own .Xmodmap file, or choose from the ones
listed here).  </para><para>c) Install ISO8859-2 fonts (or other pertinent fonts). </para><para>You may try to issue the command:</para><para>xset q</para><para>to see which fonts are in your path.</para><para>If you want to add fonts in your path from the X Window System, 
issue the command:</para><para>xset fp+ /usr/fontsentpath</para><para>xset fp rehash</para><para>d) Disable every "Scroll Lock" uncommented line in your XF86Config,
because our .Xmodmap file for the Slovak language uses the Scroll Lock to 
switch between keyboards. </para><para>e) Put the appropriate fontpath for your newly installed fonts 
in the XF86Config file, if necessary (Mandrake 7.2 and other OS's may not
require this). The Xmodmap solution may be applied to all X keyboards 
of your choice. </para><para>First, I must say that in my solution (in older XFree86 versions), 
different mapping, if used, appears to work for Xmodmap keycodes for some 
ISO8859-2 keycode entities. ISO8859-2 definitions (keycode entities) like 
lcaron, zcaron actually do not work. This means that the ISO8859-1 definitions 
must be used instead and they will either give you what they say they 
are (aacute ento?=, eacute ento?=, etc.), or they will not give you 
what they say they are (using ISO8859-2 fonts, putting "threequarters" 
in your .Xmodmap file will not give you "3/4" but "z" with a caron,
a reversed ent above it). For example, "mu" will give lcaron, "oslash" 
rcaron, etc. </para><para>However, other key definitions, for example, adieresis (a with two 
dots above it), uacute (u with a slash above it), as well as deadentdiaeresis 
do not require a substitution of other definitions and work pretty well, 
as they're defined everywhere (a dead key is a key you press, hold 
it, yet nothing happens, but after pressing another key you will get 
a special letter).</para><para>The original "Compose" file in ../iso8859-1 directory can be fully
utilized for English, Slovak or Czech keyboard layouts (Polish, Hungarian, 
Slovenian, Croatian) in some older XFree86 distributions, but there is 
only one problem - dead keys do not work. That's why you have to copy 
the "Compose" file from the iso8859-2 directory to iso8859-1 directory, 
or alternatively, you can edit the "Compose" file in iso8859-1 directory.</para><para>You can leave the Keyboard section in your XF86Config file without 
much change. Put (if it's not already there) the following in the 
"Keyboard" section: </para><para>Section "Keyboard" </para><para>Protocol "Standard"</para><para>XkbRules "xfree86" </para><para>XkbModel "pc101" </para><para>XkbLayout "us" </para><para>Force the system to read the xmodmap map by issuing the command:
"xmodmap ent/.Xmodmap". Alternatively, you can have 60 .Xmodmap files 
like .Xmo1, .Xmo2, .Xmo3, .Xmo4, etc., and you may force the system 
to read them (xmodmap ent/.Xmo1). The dot means it is a hidden file and 
it is not necessary. You may also have xmo1, xmo2, or xmo3 Xmodmap files.</para><para>NOTE: If you are using some legacy programs like StarOffice 5.2, they have 
their own fonts, so Xmodmap solution will not work on older systems immediately 
with these applications. StarOffice 6.0 handles well conversion to win1250 
and vice versa, so you can transport documents to a M$ platform. In my 
Mandrake 8.0, StarOffice 6.0 was internationalized immediately after using 
my standard Xmodmap solution. All the fonts worked. However, with StarOffice 5.2 
this is not the case. In StarOffice 5.2, you must add X fonts to StarOffice's 
fonts directory. Here is a script that will do it for you. Cut it, name 
it "so52", make it executable (chmod +x so52), copy it to the 
StarOffice5.2/share/xp3 directory and execute it there.</para><para>-------------------------------cutenthere-----------------------------------</para><para>ent!/bin/sh</para><para>ent Put path to your StarOffice here</para><para>STARentOFFICEentROOT=/mnt/StarOffice5.2</para><para>FONTSentDIR=/usr/X11R6/lib/X11/fonts/ISO8859-2/Type1</para><para>ent -----------------------------------------------------------------------</para><para>ent Don't edit the script here</para><para>ent -----------------------------------------------------------------------</para><para>XP3entDIR=$STARentOFFICEentROOT/share/xp3</para><para>if ent -e $XP3entDIR/psstd.fonts.il2 ]; then</para><para>echo "Changes were already done!"</para><para>echo "If there's a problem, delete the file"</para><para>echo "  $XP3entDIR/psstd.fonts.il2"</para><para>exit 1</para><para>fi</para><para>if ent -e $FONTSentDIR/afm ]; then</para><para>AFMentDIR=$FONTSentDIR/afm</para><para>else</para><para>AFMentDIR=$FONTSentDIR</para><para>fi</para><para>ent Link AFM files.</para><para>ln -sf $AFMentDIR/*.entaA]entfF]entmM] $XP3entDIR/fontmetrics/afm</para><para>ent Link PFB files.</para><para>ln -sf $FONTSentDIR/*.entpP]entfF]entbB] $XP3entDIR/pssoftfonts</para><para>grep "\.pf" $FONTSentDIR/fonts.dir \</para><para>ent sed -e 's/\.pfb /, /g' -e 's/-0-0-0-0-/-entd-entd-entd-entd-/g' \</para><para>ent $XP3entDIR/psstd.fonts.il2</para><para>cat $XP3entDIR/psstd.fonts.il2 entent $XP3entDIR/psstd.fonts</para><para>------------------------------------cutenthere-----------------------------</para><para>StarOffice 5.2 fully recognizes Word97 documents even written in other
languages, but a converter from iso8859-2 to win1250 encoding is necessary
in order to transport ISO8859-2 documents to M$ platform. For html documents
this is not necessary. </para><para>StarOffice 5.2 can be thus used by professional translators.</para><sect2><title>Xmodmap theory and Xmodmap solution</title><para>If you want to edit and make your own .Xmodmap keyboard layout definitions, 
I'll explain one line of the .Xmodmap file to make clear what you should do. </para><para>This example can be used for all keycodes. For example, the line: </para><para>keycode 0x11 = 8 asterisk aacute 8 </para><para>(note: keycode 0x11 is derived from the "xkeycaps" utility; you can also use
the X Window "xev" utility to explore keyboard puzzles.) </para><para>says that the first pair, the default one, (number "8" and "asterisk") 
will display number "8" when you press keycode 0x11 ("8"), will display 
asterisk when a "shift" key is pressed. After pressing the Scroll Lock,
there's another definition: ISOentNEXTentGROUP, which means that when 
you press the default "8" key, no "8" will be displayed, but aacute (ent);
when you press the "shift" key, number "8" will be displayed. So if
you change "aacute" and "8", anything you put instead of "aacute" and
"8" will be displayed, for example: </para><para>keycode 0x11 = 8 asterisk semicolon colon </para><para>will give you "semicolon" and "colon" in your 0x11 keycode after
pressing  the Scroll Lock. </para><para>The ISOentNEXTentGROUP is defined by another line. If this line is not 
defined, you will be able to use only two definitions ("8" and "asterisk") - 
look at my .Xmodmap file. If you delete the ISOentNEXTentGROUP (the 
next pair of definitions on the right), you will have only one group of 
keyboard definitions ("8" and "asterisk"). Be careful when editing the .Xmodmap
file. You mustn't delete definitions that enable utilization of the
Scroll Lock unless you know what you are doing (or you map the second keyboard
by right Alt). These are the lines such as: </para><para>keycode 0x4e = ISOentNextentGroup </para><para>add mod5 = ISOentNextentGroup, </para><para>etc. You must also keep in mind that Unices are case sensitive. If you want 
to find out more about keycodes, install the package "xkeycaps" or use "xev".</para><para>The following symbols on your right is what I found out through my research.
This is just an example. When you use a "Pound" definition in the Xmodmap
file, the X Window System will display you a Lslash instead (in relation
to using iso8859-2 fonts, of course). When you choose some easy KDE text
editor, select iso8859-2 fonts charset from the fonts menu. NOTE:
vowel *acute (uacute, eacute, etc.) signs require no substitution,
therefore I omitted iacute, aacute, etc., here.</para><para>ISO8859-1 entity will give you the: 	ISO8859-2 entity</para><para>in our nonstandard or experimental Xmodmap keycode definition</para><para>egrave	    				ccaron</para><para>ugrave	    				uring</para><para>agrave	   				racute</para><para>ecircumflex				"c" with something at the bottom of it</para><para>ucircumflex
Lslash     				"Pound" in Xmodmap gives you Lslash.</para><para>Lcaron      				Writing "yen" will give us Lcaron</para><para>Scaron      				copyright (will give us Scaron)</para><para>Tcaron      				guillemotleft (will give us Tcaron)</para><para>Zcaron      				registered</para><para>lcaron      				mu</para><para>scaron      				onesuperior</para><para>tcaron      				guillemotright</para><para>zcaron      				threequarters</para><para>Cacute      				AE</para><para>Eogonek     				find out yourself</para><para>Edieresis   				Edieresis</para><para>ecaron      				igrave</para><para>onequarter				zacute</para><para>questiondown				z with a ring above it</para><para>Dcaron      				find out yourself</para><para>Ooblique				Rcaron</para><para>thorn					t with something at the bottom of it</para><para>Sterling				Lstroke</para><para>yen					Lcaron</para><para>copyright				Scaron</para><para>brokenbar				Sacute</para><para>macron					Z with something above it</para><para>paragraph				sacute</para><para>periodcentered				caron</para><para>masculine				s with something at the bottom of it</para><para>onequarter				zacute</para><para>ecircumflex				d with a line above it</para><para>ETH					Dstroke</para><para>Ntilde					Nacute</para><para>Otilde					O with two dots above it</para><para>registered				Zcaron</para><para>Nacute      				Ograve</para><para>nacute	    				ograve</para><para>Ocircumflex  				Ocircumflex</para><para>ccaron     				egrave</para><para>nacute     				ntilde
------------------------------------------------------------------------</para></sect2><sect2><title>Experimental .Xmodmap sample file for the Slovak language typewriter layout</title><para>You may use this file as an example to build your own xmodmap keyboard layouts.
entententententententententententententententententententententententcutenthereententententententententententententententententententententententententent</para><para>keycode 0x09 = Escape </para><para>keycode 0x43 = F1 F11 F1 Multientkey </para><para>keycode 0x44 = F2 F12 F2 F12 </para><para>keycode 0x45 = F3 F13 F3 F13 idiaeresis </para><para>keycode 0x46 = F4 F14 F4 F14 mu yen </para><para>keycode 0x47 = F5 F15 F5 F15 guillemotright guillemotleft </para><para>keycode 0x48 = F6 F16 F6 F16 ograve </para><para>keycode 0x49 = F7 F17 F7 deadentabovedot oacute </para><para>keycode 0x4A = F8 F18 F8 deadentbreve acute </para><para>keycode 0x4B = F9 F19 F9 deadentcedilla ugrave </para><para>keycode 0x4C = F10 F20 F10 deadentogonek </para><para>keycode 0x5F = F11 F21 deadentacute deadentcaron </para><para>keycode 0x60 = F12 F22 deadentabovering deadentdiaeresis </para><para>keycode 0x6F = Print Execute deadentiota </para><para>keycode 0x4E = ISOentNextentGroup </para><para>keycode 0x6E = Pause </para><para>keycode 0x31 = grave asciitilde semicolon deadentdiaeresis </para><para>keycode 0x0A = 1 exclam plus 1 </para><para>keycode 0x0B = 2 at mu 2 </para><para>keycode 0x0C = 3 numbersign onesuperior 3 </para><para>keycode 0x0D = 4 dollar egrave 4 </para><para>keycode 0x0E = 5 percent 0x0bb 5 </para><para>keycode 0x0F = 6 asciicircum threequarters 6 </para><para>keycode 0x10 = 7 ampersand yacute 7 </para><para>keycode 0x11 = 8 asterisk aacute 8 </para><para>keycode 0x12 = 9 parenleft iacute 9 </para><para>keycode 0x13 = 0 parenright eacute 0 </para><para>keycode 0x14 = minus underscore equal percent </para><para>keycode 0x15 = equal plus deadentacute deadentcaron </para><para>keycode 0x33 = backslash bar ograve parenright </para><para>keycode 0x16 = BackSpace </para><para>keycode 0x6A = Insert </para><para>keycode 0x61 = Home </para><para>keycode 0x63 = Prior </para><para>keycode 0x4D = NumentLock PointerentEnableKeys </para><para>keycode 0x70 = KPentDivide slash </para><para>keycode 0x3F = KPentMultiply asterisk</para><para>keycode 0x52 = KPentSubtract minus</para><para>keycode 0x17 = Tab ISOentLeftentTab </para><para>keycode 0x18 = q Q </para><para>keycode 0x19 = w W </para><para>keycode 0x1A = e E </para><para>keycode 0x1B = r R</para><para>keycode 0x1C = t T </para><para>keycode 0x1D = y Y z Z </para><para>keycode 0x1E = u U </para><para>keycode 0x1F = i I </para><para>keycode 0x20 = o O </para><para>keycode 0x21 = p P</para><para>keycode 0x22 = bracketleft braceleft uacute slash </para><para>keycode 0x23 = bracketright braceright adiaeresis parenleft </para><para>keycode 0x24 = Return </para><para>keycode 0x6B = Delete </para><para>keycode 0x67 = End </para><para>keycode 0x69 = Next</para><para>keycode 0x4F = KPentHome 7 KPentHome </para><para>keycode 0x50 = KPentUp 8 </para><para>keycode 0x51 = KPentPrior 9 </para><para>keycode 0x56 = KPentAdd plus </para><para>keycode 0x42 = CapsentLock </para><para>keycode 0x26 = a A</para><para>keycode 0x27 = s S </para><para>keycode 0x28 = d D </para><para>keycode 0x29 = f F </para><para>keycode 0x2A = g G </para><para>keycode 0x2B = h H </para><para>keycode 0x2C = j J</para><para>keycode 0x2D = k K </para><para>keycode 0x2E = l L </para><para>keycode 0x2F = semicolon colon ocircumflex quotedbl </para><para>keycode 0x30 = apostrophe quotedbl section exclam </para><para>keycode 0x53 = KPentLeft 4</para><para>keycode 0x54 = KPentBegin 5</para><para>keycode 0x55 = KPentRight 6 </para><para>keycode 0x32 = ShiftentL ISOentNextentGroup </para><para>keycode 0x34 = z Z y Y </para><para>keycode 0x35 = x X </para><para>keycode 0x36 = c C </para><para>keycode 0x37 = v V</para><para>keycode 0x38 = b B </para><para>keycode 0x39 = n N </para><para>keycode 0x3A = m M </para><para>keycode 0x3B = comma less comma question </para><para>keycode 0x3C = period greater period colon </para><para>keycode 0x3D = slash question minus underscore</para><para>keycode 0x3E = ShiftentR </para><para>keycode 0x62 = Up </para><para>keycode 0x57 = KPentEnd 1 </para><para>keycode 0x58 = KPentDown 2</para><para>keycode 0x59 = KPentNext 3 </para><para>keycode 0x6C = KPentEnter Return</para><para>keycode 0x25 = ControlentL ISOentNextentGroup </para><para>!keycode 0x40 = AltentL MetaentL </para><para>keycode 0x40 = MetaentL AltentL </para><para>keycode 0x41 = space </para><para>keycode 0x71 = AltentR MetaentR </para><para>keycode 0x6D = ControlentR</para><para>keycode 0x64 = Left </para><para>keycode 0x68 = Down </para><para>keycode 0x66 = Right </para><para>keycode 0x5A = KPentInsert 0 </para><para>keycode 0x5B = KPentDelete period </para><para>!keysym AltentL = MetaentL</para><para>!keysym F12 = Multientkey </para><para>clear Shift </para><para>!clear Lock</para><para>clear Control </para><para>clear Mod1 </para><para>clear Mod2</para><para>clear Mod3 </para><para>clear Mod4 </para><para>clear Mod5 </para><para>add Shift = ShiftentL ShiftentR </para><para>add Control = ControlentL ControlentR </para><para>!add Mod1 = AltentL AltentR</para><para>add Mod1 = MetaentL AltentR </para><para>add Mod2 = NumentLock </para><para>add Mod5 = ISOentNextentGroup </para><para>!add Mod1 = </para><para>!add Mod2 = AltentR AltentL Modeentswitch </para><para>keycode 0x73 = ISOentNextentGroup</para><para>keycode 0x74 = deadentacute deadentdiaeresis </para><para>keycode 0x75 = deadentcaron deadentabovering</para><para>entententententententententententententententententententententententententententententcutenthereententententententententententententententententententententententententententententent</para><para>You may find almost any xmodmap file in the GNOME directory in
(SuSE) /opt/gnome/share/xmodmap (with standard ISO8859-1,2 and other
definitions). To switch between the keyboards, use right Alt.</para></sect2></sect1><sect1><title>Xmodmap theory and Xmodmap solution</title><para>If you want to edit and make your own .Xmodmap keyboard layout definitions,
I'll explain one line of the .Xmodmap file to make clear what you should do.</para><para>This explanation can be used for all keycodes. For example, the line:</para><para>keycode 0x11 = 8 asterisk aacute 8</para><para>(note: keycode 0x11 is derived from the "xkeycaps" utility; you can also use
the X Window "xev" utility to explore keyboard puzzles.)</para><para>says that the first pair, the default one, (number "8" and "asterisk")
will display number "8" when you press keycode 0x11 ("8"), will display
asterisk when a "shift" key is pressed. After pressing the Scroll Lock,
there's another definition: ISOentNEXTentGROUP, which means that when you
press the default "8" key, no "8" will be displayed, but aacute (ent);
when you press the "shift" key, number "8" will be displayed. So if
you change "aacute" and "8", anything you put instead of "aacute" and
"8" will be displayed, for example:</para><para>keycode 0x11 = 8 asterisk semicolon colon</para><para>will give you "semicolon" and "colon" in your 0x11 keycode after
pressing  the Scroll Lock.</para><para>The ISOentNEXTentGROUP is defined by another line. If this line is not 
defined, you will be able to use only two definitions ("8" and "asterisk") - 
look at my .Xmodmap file. If you delete the ISOentNEXTentGROUP (the 
next pair of definitions on the right), you will have only one group of 
keyboard definitions ("8" and "asterisk"). Be careful when editing the .Xmodmap
file. You mustn't delete definitions that enable utilization of the
Scroll Lock unless you know what you are doing (or you map the second keyboard
by right Alt). These are the lines such as:</para><para>keycode 0x4e = ISOentNextentGroup</para><para>add mod5 = ISOentNextentGroup,</para><para>etc. You must also keep in mind that Unixes are case sensitive. If you want
to find out more about keycodes, install the package "xkeycaps" or use "xev".</para><sect2><title>.Xmodmap sample file for the Slovak language typewriter layout</title><para>The following .Xmodmap sample file consists of two groups of keyboard 
definitions you my use in addition to your default or XKB keyboard choice. 
You may use this file as an example to build your own keyboard maps. This
file needs editing for your specific purposes and it's here only as a hint.
If you change letters like "y Y" to "t T", you will have "t T", etc. on your 
keyboard where you normally have "y Y" keys. So you see that thus you can 
have almost absolute control of your keyboard - something which in Microsoft 
Windows operating system can only be achieved by special and certainly 
expensive programs. Use the Scroll Lock to switch between the first and second 
group of key definitions. 
entententententententententententententententententententententententcutenthereententententententententententententententententententententententententent</para><para>keycode 0x09 = Escape</para><para>keycode 0x43 = F1 F11 F1 Multientkey</para><para>keycode 0x44 = F2 F12 F2 F12</para><para>keycode 0x45 = F3 F13 F3 F13 idiaeresis</para><para>keycode 0x46 = F4 F14 F4 F14 mu yen</para><para>keycode 0x47 = F5 F15 F5 F15 guillemotright guillemotleft</para><para>keycode 0x48 = F6 F16 F6 F16 ograve</para><para>keycode 0x49 = F7 F17 F7 deadentabovedot oacute</para><para>keycode 0x4A = F8 F18 F8 deadentbreve acute</para><para>keycode 0x4B = F9 F19 F9 deadentcedilla ugrave </para><para>keycode 0x4C = F10 F20 F10 deadentogonek </para><para>keycode 0x5F = F11 F21 deadentacute deadentcaron </para><para>keycode 0x60 = F12 F22 deadentabovering deadentdiaeresis</para><para>keycode 0x6F = Print Execute deadentiota </para><para>keycode 0x4E = ISOentNextentGroup</para><para>keycode 0x6E = Pause </para><para>keycode 0x31 = grave asciitilde semicolon deadentdiaeresis </para><para>keycode 0x0A = 1 exclam plus 1 </para><para>keycode 0x0B = 2 at lcaron 2</para><para>keycode 0x0C = 3 numbersign scaron 3 </para><para>keycode 0x0D = 4 dollar ccaron 4</para><para>keycode 0x0E = 5 percent tcaron 5</para><para>keycode 0x0F = 6 asciicircum zcaron 6 </para><para>keycode 0x10 = 7 ampersand yacute 7 </para><para>keycode 0x11 = 8 asterisk aacute 8</para><para>keycode 0x12 = 9 parenleft iacute 9 </para><para>keycode 0x13 = 0 parenright eacute 0 </para><para>keycode 0x14 = minus underscore equal percent </para><para>keycode 0x15 = equal plus deadentacute deadentcaron </para><para>keycode 0x33 = backslash bar ncaron parenright </para><para>keycode 0x16 = BackSpace</para><para>keycode 0x6A = Insert</para><para>keycode 0x61 = Home </para><para>keycode 0x63 = Prior </para><para>keycode 0x4D = NumentLock PointerentEnableKeys </para><para>keycode 0x70 = KPentDivide slash </para><para>keycode 0x3F = KPentMultiply asterisk</para><para>keycode 0x52 = KPentSubtract minus</para><para>keycode 0x17 = Tab ISOentLeftentTab</para><para>keycode 0x18 = q Q </para><para>keycode 0x19 = w W </para><para>keycode 0x1A = e E </para><para>keycode 0x1B = r R</para><para>keycode 0x1C = t T </para><para>keycode 0x1D = y Y z Z </para><para>keycode 0x1E = u U </para><para>keycode 0x1F = i I </para><para>keycode 0x20 = o O </para><para>keycode 0x21 = p P</para><para>keycode 0x22 = bracketleft braceleft uacute slash </para><para>keycode 0x23 = bracketright braceright adiaeresis parenleft </para><para>keycode 0x24 = Return </para><para>keycode 0x6B = Delete </para><para>keycode 0x67 = End </para><para>keycode 0x69 = Next</para><para>keycode 0x4F = KPentHome 7 KPentHome</para><para>keycode 0x50 = KPentUp 8 </para><para>keycode 0x51 = KPentPrior 9 </para><para>keycode 0x56 = KPentAdd plus </para><para>keycode 0x42 = CapsentLock </para><para>keycode 0x26 = a A</para><para>keycode 0x27 = s S </para><para>keycode 0x28 = d D </para><para>keycode 0x29 = f F </para><para>keycode 0x2A = g G </para><para>keycode 0x2B = h H</para><para>keycode 0x2C = j J</para><para>keycode 0x2D = k K </para><para>keycode 0x2E = l L </para><para>keycode 0x2F = semicolon colon ocircumflex quotedbl </para><para>keycode 0x30 = apostrophe quotedbl section exclam </para><para>keycode 0x53 = KPentLeft 4</para><para>keycode 0x54 = KPentBegin 5</para><para>keycode 0x55 = KPentRight 6 </para><para>keycode 0x32 = ShiftentL ISOentNextentGroup </para><para>keycode 0x34 = z Z y Y </para><para>keycode 0x35 = x X </para><para>keycode 0x36 = c C </para><para>keycode 0x37 = v V</para><para>keycode 0x38 = b B </para><para>keycode 0x39 = n N </para><para>keycode 0x3A = m M </para><para>keycode 0x3B = comma less comma question</para><para>keycode 0x3C = period greater period colon </para><para>keycode 0x3D = slash question minus underscore</para><para>keycode 0x3E = ShiftentR </para><para>keycode 0x62 = Up </para><para>keycode 0x57 = KPentEnd 1 </para><para>keycode 0x58 = KPentDown 2</para><para>keycode 0x59 = KPentNext 3</para><para>keycode 0x6C = KPentEnter Return</para><para>keycode 0x25 = ControlentL ISOentNextentGroup </para><para>!keycode 0x40 = AltentL MetaentL </para><para>keycode 0x40 = MetaentL AltentL </para><para>keycode 0x41 = space </para><para>keycode 0x71 = AltentR MetaentR </para><para>keycode 0x6D = ControlentR</para><para>keycode 0x64 = Left </para><para>keycode 0x68 = Down </para><para>keycode 0x66 = Right</para><para>keycode 0x5A = KPentInsert 0 </para><para>keycode 0x5B = KPentDelete period </para><para>!keysym AltentL = MetaentL</para><para>!keysym F12 = Multientkey </para><para>clear Shift </para><para>!clear Lock</para><para>clear Control</para><para>clear Mod1 </para><para>clear Mod2</para><para>clear Mod3 </para><para>clear Mod4 </para><para>clear Mod5 </para><para>add Shift = ShiftentL ShiftentR </para><para>add Control = ControlentL ControlentR </para><para>!add Mod1 = AltentL AltentR</para><para>add Mod1 = MetaentL AltentR </para><para>add Mod2 = NumentLock</para><para>add Mod5 = ISOentNextentGroup </para><para>!add Mod1 = </para><para>!add Mod2 = AltentR AltentL Modeentswitch </para><para>keycode 0x73 = ISOentNextentGroup</para><para>keycode 0x74 = deadentacute deadentdiaeresis </para><para>keycode 0x75 = deadentcaron deadentabovering</para><para>entententententententententententententententententententententententententententententcutenthereententententententententententententententententententententententententententententent</para></sect2></sect1><sect1><title>Character sets</title><para>If you want to build an .Xmodmap and you know how the character looks visually,
you may have problems about knowing how it is defined by name. A good site that
may help you with this may be:
<ulink url="http://www.geocities.com/gorazd.hribar/latin-2/eng-iso-8859-2.html"></ulink>
Here you can see ISO8859-2 characters visually.</para><para>I also included here some ISO8859-2 Character definitions for you to know which 
names are used for pertinent keys. It may not be complete and you should not 
bother about the keycode numbers, but notice how keys are named. Much of this 
information is useful to build a keyboard with ISO8859-1 characters only, or 
a combination of East European characters and Western characters. If you're 
going to use other languages than the Central European or West-European ones, 
find a pertinent table for your ISO*** character set on the Internet. The 
gdkkeysyms.h file that contains all the crazy names for keycode entities 
including hexcodes is in (older versions of RedHat) /usr/include/gdk/ directory. 
If no gdkkeysyms.h file is on your sustem, see the file 
/usr/X11R6/include/X11/keysymdef.h (you must install XFree86 development 
package to make use of this directory), or try to look in 
/lib/perl5/siteentperl/5.6.0/i386-linux/GTK/keysyms.pm (it also
contains names of keycode entities including hex codes). If you have a newer
version of PERL, the version number "5.6.0" may differ. The similar thing 
should apply to other systems (FreeBSD), too, as they also use PERL.</para><sect2><title>ISO-8859-2 (ISO Latin2) character set </title><para>Xmodmap entities with their word definitions (which you put in the Xmodmap file)
and their visual representation. Some word definitions lack their visual forms.</para><para>----------------------------------------------------------------------</para><para>space</para><para>exclam				!</para><para>quotedbl      		    	"</para><para>numbersign			ent</para><para>dollar				$</para><para>percent		</para><para>ampersand     		     	ent</para><para>quoteright			'</para><para>parenleft			(</para><para>parenright			)</para><para>asterisk			*</para><para>plus				+</para><para>comma				,</para><para>hyphen				-</para><para>period				.</para><para>slash				/</para><para>zero				0</para><para>one				1</para><para>two				2</para><para>three				3</para><para>four				4</para><para>five				5</para><para>six				6</para><para>seven				7</para><para>eight				8</para><para>nine				9</para><para>colon				:</para><para>semicolon			;</para><para>less          	ent      	ent</para><para>equal				=</para><para>greater       	ent      	ent</para><para>question			?</para><para>at				@</para><para>A				A</para><para>B				B</para><para>C				C</para><para>D				D</para><para>E				E</para><para>F				F</para><para>G				G</para><para>H				H</para><para>I				I</para><para>J				J</para><para>K				K</para><para>L				L</para><para>M				M</para><para>N				N</para><para>O				O</para><para>P				P</para><para>Q				Q</para><para>R				R</para><para>S				S</para><para>T				T</para><para>U				U</para><para>V				V</para><para>W				W</para><para>X				X</para><para>Y				Y</para><para>Z				Z</para><para>bracketleft			ent</para><para>backslash			\</para><para>bracketright			]</para><para>asciicircum			ent</para><para>underscore			ent</para><para>quoteleft			`</para><para>a				a</para><para>b				b</para><para>c				c</para><para>d				d</para><para>e				e</para><para>f				f</para><para>g				g</para><para>h				h</para><para>i				i</para><para>j				j</para><para>k				k</para><para>l				l</para><para>m				m</para><para>n				n</para><para>o				o</para><para>p				p</para><para>q				q</para><para>r				r</para><para>s				s</para><para>t				t</para><para>u				u</para><para>v				v</para><para>w				w</para><para>x				x</para><para>y				y</para><para>z				z</para><para>braceleft			ent</para><para>bar				ent</para><para>braceright			ent</para><para>tilde				ent</para><para>space				</para><para>Aogonek					</para><para>breve				</para><para>Lslash				</para><para>currency			</para><para>Lcaron				</para><para>Sacute				</para><para>section			</para><para>dieresis			</para><para>Scaron 	ent			</para><para>Scedilla 				</para><para>Tcaron	ent				</para><para>Zacute  ent				</para><para>hyphen				</para><para>Zcaron	ent			</para><para>Zdotaccent			</para><para>degree				</para><para>aogonek			</para><para>ogonek				</para><para>lslash				</para><para>acute 				</para><para>lcaron  ent				</para><para>sacute  ent				</para><para>caron				</para><para>cedilla			</para><para>scaron	ent			</para><para>scedilla			</para><para>tcaron	ent			</para><para>zacute				</para><para>hungarumlaut			</para><para>zcaron	ent			</para><para>zdotaccent			</para><para>Racute				</para><para>Aacute        	 	</para><para>Acircumflex   	   	</para><para>Abreve				</para><para>Adieresis     	    	</para><para>Lacute				</para><para>Cacute				</para><para>Ccedilla      	  	</para><para>Ccaron	ent			</para><para>Eacute  ent        	  	</para><para>Eogonek			</para><para>Edieresis     	   	</para><para>Ecaron	ent			</para><para>Iacute  ent      	  	</para><para>Icircumflex   	   	</para><para>Dcaron	ent			</para><para>Eth           	</para><para>Nacute	ent			</para><para>Ncaron	ent			</para><para>Oacute  ent      	  	</para><para>Ocircumflex   	  	</para><para>Ohungarumlaut			</para><para>Odieresis     	    	</para><para>multiply			</para><para>Rcaron	ent			</para><para>Uring	ent			</para><para>Uacute  ent      	  	</para><para>hungarumlaut			</para><para>Udieresis     	    	</para><para>Yacute        	  	</para><para>Tcedilla			</para><para>germandbls    	  	</para><para>racute				</para><para>aacute  ent      	</para><para>acircumflex   	   	</para><para>abreve				</para><para>adieresis     	    	</para><para>lacute				</para><para>cacute				</para><para>ccedilla      	</para><para>ccaron	ent			</para><para>eacute        	  	</para><para>eogonek			</para><para>edieresis     	    	</para><para>ecaron				</para><para>iacute        	  	</para><para>icircumflex   	   	</para><para>dcaron				</para><para>dbar 				</para><para>nacute				</para><para>ncaron				</para><para>oacute         	</para><para>ocircumflex  </para><para>ohungarumlaut			</para><para>odieresis     	</para><para>divide				</para><para>rcaron				</para><para>uring				</para><para>uacute        	</para><para>uhungarumlaut			</para><para>udieresis     </para><para>yacute  	</para><para>tcedilla		</para><para>dotaccent			</para><para>---------------------------------------------------------------------- </para><para>First, if you are using older systems (see the legacy solution), try to see if 
definitions will give you (after installing pertinent fonts and 
building the Xmodmap map with keyboard definitions for X) what they say they 
are. If they will not give you what they say they are, see my legacy soluttion.</para><para></para></sect2></sect1><sect1><title>How this Xmodmap solution works on various systems</title><sect2><title>SuSE 6.4 and 7.0 </title><sect3><title>SuSE 7.0 with XFree86 version 3.3.6 and KDE 2.0 (this also applies to SuSE 6.4</title><para>No LANG=language statement is necessary in your bashentprofile. You may use 
the Xmodmap file with standard ISO8859-2 keycode definitions and the  
.Xmodmap file (not from the legacy solution). Unfortunately, 
although you may immediately start writing with ISO8859-2 keycodes, the 
dead keys are not working properly and export LANG=language does not work 
here in order to make these dead keys work. There's also some bug with fonts 
or something - KDE 2.0 (or older XFree86 does not properly handle ISO8859-2 
fonts together with Xmodmap. Old kedit, newest GNOME's gedit and StarOffice 5.2
work well (after applying the above script for StarOffice 5.2).</para><para>After copying the Compose file from /usr/X11R6/lib/X11/locale/iso8859-2/
to the /usr/X11R6/lib/X11/locale/iso8859-1/, you may start elegantly 
working with dead keys. This was also tested on StarOffice 5.2.</para></sect3></sect2><sect2><title>SuSE 7.0 (Xfree86 3.3.6, KDE 1.x), SuSE 8.0</title><para>SuSE 7.0 works same as above. SuSE 8.0 works without problems - just apply
the xmodmap command on your xmodmap keyboard definition and you are ready 
to go. It is a good idea to install support for your national language 
in Yast2, if there is a problem.</para></sect2><sect2><title>Mandrake Linux 7.2 </title><sect3><title>Mandrake Linux 7.2 - works as it should </title><para>Yes, it works as it should - I used the "kcmshell Personalization/kcmlayout", 
command, which is in the menu in Configuration ent KDE ent Personalization ent 
keyboard layout and after just putting the LANG=language statement in 
my .bashentprofile, StarOffice worked immediately (with ISO8859-2 fonts 
added to its directory) and I only switched the keyboards. I chose 
Czechoslovakian as the second language and could write in Czech with ISO8859-2 
characters on my screen. (I used the script for putting the ISO8859-2 fonts 
for StarOffice). Unfortunatelly, the KDE 2.0 kedit could not visualize the 
ISO8859-2 fonts and after switching the keyboard and selecting ISO8859-2 
charset I saw this: ??????? instead of lcaron, scaron, etc., but *acute 
symbols (uacute, aacute, etc.) displayed well.</para><para>The maps in /usr/X11R6/lib/X11/xkb/symbols can be modified on the fly,
but this is a dirtier way than to modify Xmodmap maps. You switch keyboards from 
the panel flag icon. </para></sect3><sect3><title>Mandrake Linux 7.2 with XFree86 version 3.3.6</title><para>Apply the standard .Xmodmap keycodes (scaron, lcaron, not "threequarters" 
or "mu", etc.) and issue the command: "xmodmap ent/.Xmodmap" and you may 
work by switching the keyboards by pressing Scroll Lock (if you use my 
Xmodmap file; if you use other Xmodmap file, try right Alt or whatever else
that is defined in the Xmodmap file).</para><para>The FontPath statement in /etc/X11/XF86Config and /etc/X11/XF86Config
does not have to be changed:</para><para>FontPath "unix/:1"</para><para>The XFree86 reads automatically your fonts, but I put the ISO8859-2 fonts to
/usr/share/fonts directory (same as in RedHat). Surprisingly, you do not 
have to copy the ../ISO8859-2/Compose file to ../ISO8859-1 directory 
and dead keys work nicely.</para></sect3></sect2><sect2><title>Mandrake 8.1</title><para>These distributions work well as they should. In KDE, you must open the
menu: Start ent Preferences ent Personalization  ent Country and Language,
where you will change CHARSET from ISO8859-1 to ISO8859-2 (or ISO8859-X for
any other language of your choice). Then you may either select a keyboard 
layout - Peripherals, Keyboard (Slovak is included with dozens of other 
keyboard XKB maps) from the menu: Start ent Configuration ent KDE ent  
Personalisation ent Peripherals ent Keyboard, or you may choose my Standard 
Xmodmap solution. No other files require editing. That's great! Alternatively, 
you can set your keyboard with setxkbmap command (see section FreeBSD 4.4). </para></sect2><sect2><title>RedHat 5.1, 5.2, 6.0, 6.1 and 6.2 (XFree86 3.3.6 and older)</title><para>The legacy solution must be used here. No LANG=language statement is necessary 
in your bashentprofile. Here the "experimental" .Xmodmap solution works 
("mu" instead of "lcaron", etc.) and you must copy the Compose file from 
../IS08859-2 to ISO8859-1 directory in order for dead keys to work. There is 
only one XF86Config file in /etc/X11 and its FontPath must contain path to
the pertinent fonts.</para></sect2><sect2><title>RedHat 7.2, RedHat 8.0, Slackware 8.1</title><para>RedHat 7.2 behaves same as Mandrake 8.1. RedHat 8.0, with KDE 3, works nicely
without problems - you can use the xmodmap solution immediately without digging 
up in the system and changing configurations. You do not have to go to Look and
Feel menu in the Preferences menu - you can either apply the xmodmap solution 
immediately, or you can choose to configure (add) keyboard in the Preferences -
Peripherals menu (if you decide for XKB). You will have the keyboard icon 
placed on the panel and you just click on it to switch between keyboards.
Slackware 8.1 behaves exactly as RedHat 8.0, I only had to include the "export=
language command (both for XKB and Xmodmap solution) in the Bash profile for 
the dead keys to work.</para></sect2><sect2><title>FreeBSD 3.1 and 3.2</title><para>Internationalization works the same way as with RedHat 5.1, 5.2, 6.0, 6.1, 6.2</para></sect2><sect2><title>FreeBSD 4.1, 4.2, 4.3, 4.4, 4.5 </title><para>No LANG=language statement is necessary in your bashentprofile. But
you must put this to /etc/profile:
LANG=csentCZ.ISOent8859-2; export LANG</para><para>FreeBSD 4.1, 4.2, 4.3, 4.4 does not use Slovak locale, so we must use
the Czech one here. It really does not matter. Here this depends on XFree86. 
Because the FreeBSD guys are too conservative about newer versions, 
they ship FreeBSD with older versions of XFree86. In FreeBSD 4.1 the 
experimental .Xmodmap solution works and you have to copy the 
../ISO8859-2/Compose file to ../ISO8859-1 directory to make the dead keys work.</para></sect2><sect2><title>FreeBSD 4.6.</title><para>The Standard Xmodmap solution works well. I think this version has some
problems with installation - after installing the system, I missed some 
things I had selected in the installation wizard. A good idea would be to 
upgrade.</para><para>If you decide to run setxkbmap (FreeBSD or Linux), you may use</para><para>setxkbmap si</para><para>as a command from an X Terminal for the Slovenian language</para><para>setxkbmap se</para><para>for Swedish</para><para>setxkbmap de</para><para>for German, etc. </para><para>A brief overview of names that stand for XKB maps:</para><para>am                 Armenian keyboard </para><para>be                 Belgian </para><para>de                 German </para><para>ca                 Canadian </para><para>cs                 Czech</para><para>dk                 Danish </para><para>es                 Spanish </para><para>fi                 Finnish </para><para>fr                 French </para><para>gb                 Great Britain </para><para>hu                 Hungarian</para><para>is                 Iceland </para><para>it                 Italian </para><para>jp                 Japanese </para><para>no                 Norwegian</para><para>pl                 Polish</para><para>pt                 Portugese </para><para>ro                 Romanian</para><para>ru                 Russian</para><para>se                 Swedish </para><para>si                 Slovenian</para></sect2><sect2><title>Corel Linux 1.0 and 1.1</title><para>Same as with FreeBSD 3.x - legacy Xmodmap solution must be applied.</para></sect2></sect1><sect1><title>ISO* specifications</title><para>-------------------------------------------------------------------
ISO8859-0
old, replaced by ISO 8859-14 and ISO 8859-15.</para><para>ISO8859-1
Western Europe: Danish, Dutch, English, Faeroese, Finnish, Flemish, 
French, German, Icelandic, Irish, Italian, Norwegian, Portuguese, 
Spanish, and Swedish. Many other languages can be written with this.</para><para>ISO8859-2
Eastern Europe: Czech, Slovak, English, German, Hungarian, Polish, 
Romanian, Serbo-Croatian, Slovak, Slovene.</para><para>ISO8859-3
English, Esperanto, Galician, Maltese and Turkish.</para><para>ISO8859-4
English, Baltic languages - Estonian, Latvian, Lithuanian, 
and Scandinavian languages - Danish, Faeroese, Icelandic, Lappish, 
Norwegian, and Swedish.</para><para>ISO8859-5
Latin/Cyrillic alphabet: Bulgarian, Byelorussian, English,
Macedonian, Russian, Serbian, Ukrainian.</para><para>ISO8859-6
Latin/Arabic alphabet: English, Arabic.</para><para>ISO8859-7
Latin/Greek alphabet: English, Greek.</para><para>ISO8859-8
Latin/Hebrew alphabet: English, Hebrew.</para><para>ISO8859-9
Latin alphabet: Danish, Dutch, English, Finnish, French,
German, Irish, Italian, Norwegian, Portuguese, Spanish, Swedish,
Turkish, formed by extending ISO8859-1.</para><para>ISO8859-10
Latin alphabet: Modification of ISO8859-4 </para><para>ISO8859-11
Latin/Thai alphabet.</para><para>ISO8859-12
Reserved.</para><para>ISO8859-13
Baltic.</para><para>ISO8859-14
Celtic</para><para>ISO8859-15
Similar to Latin-1</para><para>ISO8859-16
Albanian, Croatian, English, Finnish, French, German, Hungarian, 
Irish Gaelic, Italian, Latin, Polish, Romanian, Slovenian, Lithuanian, 
and Scandinavian languages (Danish, Faeroese, Icelandic.</para></sect1><sect1><title>Some national Xmodmap files</title><para>Please note: I'am not the author of these files and don't mail me if you
find something incorrect in them. These files were taken from the GNOME
distribution and the main focus of this howto is to tell you how to map 
various keycode entities. Use right Alt to switch the keyboard.</para><sect2><title>German</title><para>clear Mod1</para><para>clear Mod2</para><para>keycode   9 = Escape Escape</para><para>keycode  10 = 1 exclam</para><para>keycode  11 = 2 quotedbl twosuperior</para><para>keycode  12 = 3 section threesuperior</para><para>keycode  13 = 4 dollar dollar</para><para>keycode  14 = 5 percent</para><para>keycode  15 = 6 ampersand</para><para>keycode  16 = 7 slash braceleft</para><para>keycode  17 = 8 parenleft bracketleft</para><para>keycode  18 = 9 parenright bracketright</para><para>keycode  19 = 0 equal braceright</para><para>keycode  20 = ssharp question backslash</para><para>keycode  21 = deadentacute deadentgrave</para><para>keycode  22 = BackSpace Delete</para><para>keycode  23 = Tab Tab</para><para>keycode  24 = q Q at</para><para>keycode  25 = w</para><para>keycode  26 = e</para><para>keycode  27 = r</para><para>keycode  28 = t</para><para>keycode  29 = z</para><para>keycode  30 = u</para><para>keycode  31 = i</para><para>keycode  32 = o</para><para>keycode  33 = p</para><para>keycode  34 = udiaeresis Udiaeresis</para><para>keycode  35 = plus asterisk deadenttilde</para><para>keycode  36 = Return</para><para>keycode  37 = ControlentL</para><para>keycode  38 = a</para><para>keycode  39 = s</para><para>keycode  40 = d</para><para>keycode  41 = f</para><para>keycode  42 = g</para><para>keycode  43 = h</para><para>keycode  44 = j</para><para>keycode  45 = k</para><para>keycode  46 = l</para><para>keycode  47 = odiaeresis Odiaeresis</para><para>keycode  48 = adiaeresis Adiaeresis</para><para>keycode  49 = deadentcircumflex degree</para><para>keycode  50 = ShiftentL</para><para>keycode  51 = numbersign apostrophe</para><para>keycode  52 = y</para><para>keycode  53 = x</para><para>keycode  54 = c</para><para>keycode  55 = v</para><para>keycode  56 = b</para><para>keycode  57 = n</para><para>keycode  58 = m</para><para>keycode  59 = comma semicolon</para><para>keycode  60 = period colon Multientkey</para><para>keycode  61 = minus underscore</para><para>keycode  62 = ShiftentR</para><para>keycode  63 = KPentMultiply</para><para>keycode  64 = AltentL MetaentL</para><para>keycode  65 = space space</para><para>keycode  66 = CapsentLock</para><para>keycode  67 = F1 F11</para><para>keycode  68 = F2 F12</para><para>keycode  69 = F3 F13</para><para>keycode  70 = F4 F14</para><para>keycode  71 = F5 F15</para><para>keycode  72 = F6 F16</para><para>keycode  73 = F7 F17</para><para>keycode  74 = F8 F18</para><para>keycode  75 = F9 F19</para><para>keycode  76 = F10 F20</para><para>keycode  77 = NumentLock</para><para>keycode  78 = ScrollentLock</para><para>keycode  79 = KPent7</para><para>keycode  80 = KPent8</para><para>keycode  81 = KPent9</para><para>keycode  82 = KPentSubtract</para><para>keycode  83 = KPent4</para><para>keycode  84 = KPent5</para><para>keycode  85 = KPent6</para><para>keycode  86 = KPentAdd</para><para>keycode  87 = KPent1</para><para>keycode  88 = KPent2</para><para>keycode  89 = KPent3</para><para>keycode  90 = KPent0</para><para>keycode  91 = KPentDecimal</para><para>keycode  94 = less greater bar</para><para>keycode  95 = F11 F11</para><para>keycode  96 = F12 F12</para><para>keycode 108 = KPentEnter</para><para>keycode 109 = ControlentR</para><para>keycode 112 = KPentDivide</para><para>keycode 113 = Modeentswitch</para><para>keycode 114 = Break</para><para>keycode 110 = Find</para><para>keycode  98 = Up</para><para>keycode  99 = Prior</para><para>keycode 100 = Left</para><para>keycode 102 = Right</para><para>keycode 115 = Select</para><para>keycode 104 = Down</para><para>keycode 105 = Next</para><para>keycode 106 = Insert</para><para>! right windows-logo key</para><para>! in "windows" keyboards the postion of the key is annoying, is where AltGr</para><para>! usually resides, so go define it as AltGr</para><para>keycode 116 = Modeentswitch</para><para>! right windows-menu key</para><para>keycode 117 = Multientkey</para><para>add Mod1 = AltentL</para><para>add Mod2 = Modeentswitch</para></sect2><sect2><title>Hungarian</title><para>clear Mod1</para><para>clear Mod2</para><para>!charset "iso-8859-2"</para><para>keycode   9 = Escape</para><para>keycode  10 = 1 apostrophe asciitilde</para><para>keycode  11 = 2 quotedbl deadentcaron</para><para>keycode  12 = 3 plus deadentcircumflex</para><para>keycode  13 = 4 exclam deadentbreve</para><para>keycode  14 = 5 percent degree</para><para>keycode  15 = 6 slash deadentogonek</para><para>keycode  16 = 7 equal deadentgrave</para><para>keycode  17 = 8 parenleft deadentabovedot</para><para>keycode  18 = 9 parenright deadentacute</para><para>keycode  19 = odiaeresis Odiaeresis deadentdoubleacute</para><para>keycode  20 = udiaeresis Udiaeresis deadentdiaeresis</para><para>keycode  21 = oacute Oacute deadentcedilla</para><para>keycode  22 = BackSpace Delete</para><para>keycode  23 = Tab Tab</para><para>keycode  24 = q Q backslash</para><para>keycode  25 = w W bar</para><para>keycode  26 = e E currency</para><para>keycode  27 = r</para><para>keycode  28 = t</para><para>keycode  29 = z</para><para>keycode  30 = u</para><para>keycode  31 = i I iacute Iacute</para><para>keycode  32 = o</para><para>keycode  33 = p</para><para>keycode  34 = odoubleacute Odoubleacute division</para><para>keycode  35 = uacute Uacute</para><para>keycode  36 = Return</para><para>keycode  37 = ControlentL</para><para>keycode  38 = a</para><para>keycode  39 = s S dstroke</para><para>keycode  40 = d D Dstroke</para><para>keycode  41 = f F bracketleft</para><para>keycode  42 = g G bracketright</para><para>keycode  43 = h</para><para>keycode  44 = j J Iacute iacute</para><para>keycode  45 = k K lstroke Lstroke</para><para>keycode  46 = l L Lstroke lstroke</para><para>keycode  47 = eacute Eacute dollar</para><para>keycode  48 = aacute Aacute ssharp</para><para>keycode  49 = 0 section</para><para>keycode  50 = ShiftentL</para><para>keycode  51 = udoubleacute Udoubleacute currency</para><para>keycode  52 = y Y greater</para><para>keycode  53 = x X numbersign</para><para>keycode  54 = c C ampersand</para><para>keycode  55 = v V at</para><para>keycode  56 = b B braceleft</para><para>keycode  57 = n N braceright</para><para>keycode  58 = m</para><para>keycode  59 = comma question semicolon</para><para>keycode  60 = period colon Multientkey</para><para>keycode  61 = minus underscore asterisk</para><para>keycode  62 = ShiftentR</para><para>keycode  63 = KPentMultiply</para><para>keycode  64 = AltentL MetaentL</para><para>keycode  65 = space space</para><para>keycode  66 = CapsentLock</para><para>keycode  67 = F1 F11</para><para>keycode  68 = F2 F12</para><para>keycode  69 = F3 F13</para><para>keycode  70 = F4 F14</para><para>keycode  71 = F5 F15</para><para>keycode  72 = F6 F16</para><para>keycode  73 = F7 F17</para><para>keycode  74 = F8 F18</para><para>keycode  75 = F9 F19</para><para>keycode  76 = F10 F20</para><para>keycode  77 = NumentLock</para><para>keycode  78 = ScrollentLock</para><para>keycode  79 = KPent7</para><para>keycode  80 = KPent8</para><para>keycode  81 = KPent9</para><para>keycode  82 = KPentSubtract</para><para>keycode  83 = KPent4</para><para>keycode  84 = KPent5</para><para>keycode  85 = KPent6</para><para>keycode  86 = KPentAdd</para><para>keycode  87 = KPent1</para><para>keycode  88 = KPent2</para><para>keycode  89 = KPent3</para><para>keycode  90 = KPent0</para><para>keycode  91 = KPentDecimal</para><para>keycode  94 = iacute Iacute less</para><para>keycode  95 = F11 F11</para><para>keycode  96 = F12 F12</para><para>keycode 108 = KPentEnter</para><para>keycode 109 = ControlentR</para><para>keycode 112 = KPentDivide</para><para>keycode 113 = Modeentswitch</para><para>keycode 114 = Break</para><para>keycode 110 = Find</para><para>keycode  98 = Up</para><para>keycode  99 = Prior</para><para>keycode 100 = Left</para><para>keycode 102 = Right</para><para>keycode 115 = Select</para><para>keycode 104 = Down</para><para>keycode 105 = Next</para><para>keycode 106 = Insert</para><para>keycode 107 = Delete</para><para>!  as deadentogonek, deadentcaron, deadentbreve and deadentdoubleacute doesn't exist</para><para>!  (yet), I put also compose lines for use with respectively deadentcedilla,</para><para>!  deadentcircumflex, deadenttilde and deadenttilde</para><para>add Mod1 = AltentL</para><para>add Mod2 = Modeentswitch</para></sect2><sect2><title>Czech</title><para>! Converted keytable file to xmodmap file</para><para>clear Mod1</para><para>clear Mod2</para><para>keycode   9 = Escape Escape</para><para>keycode  10 = plus 1 asciitilde</para><para>keycode  11 = ecaron 2 deadentcaron</para><para>keycode  12 = scaron 3 asciicircum</para><para>keycode  13 = ccaron 4 deadentbreve</para><para>keycode  14 = rcaron 5 degree</para><para>keycode  15 = zcaron 6 deadentogonek</para><para>keycode  16 = yacute 7 deadentgrave</para><para>keycode  17 = aacute 8 deadentabovedot</para><para>keycode  18 = iacute 9 deadentacute</para><para>keycode  19 = eacute 0 deadentdoubleacute</para><para>keycode  20 = equal percent deadentdiaeresis</para><para>keycode  21 = deadentacute deadentcaron deadentcedilla</para><para>keycode  22 = BackSpace Delete</para><para>keycode  23 = Tab Tab</para><para>keycode  24 = q Q backslash</para><para>keycode  25 = w W bar</para><para>keycode  26 = e E currency</para><para>keycode  27 = r</para><para>keycode  28 = t</para><para>keycode  29 = z</para><para>keycode  30 = u</para><para>keycode  31 = i</para><para>keycode  32 = o</para><para>keycode  33 = p</para><para>keycode  34 = uacute slash division</para><para>keycode  35 = parenright parenleft</para><para>keycode  36 = Return</para><para>keycode  37 = ControlentL</para><para>keycode  38 = a</para><para>keycode  39 = s S dstroke Dstroke</para><para>keycode  40 = d D Dstroke dstroke</para><para>keycode  41 = f F bracketleft</para><para>keycode  42 = g G bracketright</para><para>keycode  43 = h</para><para>keycode  44 = j</para><para>keycode  45 = k K lstroke Lstroke</para><para>keycode  46 = l L Lstroke lstroke</para><para>keycode  47 = uring quotedbl dollar</para><para>keycode  48 = section exclam ssharp</para><para>keycode  49 = semicolon degree</para><para>keycode  50 = ShiftentL</para><para>keycode  51 = deadentdiaeresis deadentacute currency</para><para>keycode  52 = y Y greater</para><para>keycode  53 = x X numbersign</para><para>keycode  54 = c</para><para>keycode  55 = v V at</para><para>keycode  56 = b B braceleft</para><para>keycode  57 = n N braceright</para><para>keycode  58 = m</para><para>keycode  59 = comma question</para><para>keycode  60 = period colon Multientkey</para><para>keycode  61 = minus underscore</para><para>keycode  62 = ShiftentR</para><para>keycode  63 = KPentMultiply</para><para>keycode  64 = AltentL MetaentL</para><para>keycode  65 = space space</para><para>keycode  66 = CapsentLock</para><para>keycode  67 = F1 F11</para><para>keycode  68 = F2 F12</para><para>keycode  69 = F3 F13</para><para>keycode  70 = F4 F14</para><para>keycode  71 = F5 F15</para><para>keycode  72 = F6 F16</para><para>keycode  73 = F7 F17</para><para>keycode  74 = F8 F18</para><para>keycode  75 = F9 F19</para><para>keycode  76 = F10 F20</para><para>keycode  77 = NumentLock</para><para>keycode  78 = ScrollentLock</para><para>keycode  79 = KPent7</para><para>keycode  80 = KPent8</para><para>keycode  81 = KPent9</para><para>keycode  82 = KPentSubtract</para><para>keycode  83 = KPent4</para><para>keycode  84 = KPent5</para><para>keycode  85 = KPent6</para><para>keycode  86 = KPentAdd</para><para>keycode  87 = KPent1</para><para>keycode  88 = KPent2</para><para>keycode  89 = KPent3</para><para>keycode  90 = KPent0</para><para>keycode  94 = ampersand asterisk less</para><para>keycode  95 = F11 F11</para><para>keycode  96 = F12 F12</para><para>keycode 108 = KPentEnter</para><para>keycode 109 = ControlentR</para><para>keycode 112 = KPentDivide</para><para>keycode 113 = Modeentswitch</para><para>keycode 114 = Break</para><para>keycode 110 = Find</para><para>keycode  98 = Up</para><para>keycode  99 = Prior</para><para>keycode 100 = Left</para><para>keycode 102 = Right</para><para>keycode 115 = Select</para><para>keycode 104 = Down</para><para>keycode 105 = Next</para><para>keycode 106 = Insert</para><para>! right windows-logo key</para><para>! in "windows" keyboards the postion of the key is annoying, is where AltGr</para><para>! usually resides, so go definie it as AltGr</para><para>keycode 116 = Modeentswitch</para><para>! right windows-menu key</para><para>keycode 117 = Multientkey</para><para>add Mod1 = AltentL</para><para>add Mod2 = Modeentswitch</para></sect2><sect2><title>Polish</title><para>! The "AltGr" (right Alt) key generates Modeentswitch</para><para>keycode 0x09 =	Escape</para><para>keycode 0x43 =	F1</para><para>keycode 0x44 =	F2</para><para>keycode 0x45 =	F3</para><para>keycode 0x46 =	F4</para><para>keycode 0x47 =	F5</para><para>keycode 0x48 =	F6</para><para>keycode 0x49 =	F7</para><para>keycode 0x4A =	F8</para><para>keycode 0x4B =	F9</para><para>keycode 0x4C =	F10</para><para>keycode 0x5F =	F11</para><para>keycode 0x60 =	F12</para><para>keycode 0x6F =	Print</para><para>keycode 0x4E =	Multientkey</para><para>keycode 0x6E =	Pause</para><para>keycode 0x31 =	grave		asciitilde</para><para>keycode 0x0A =	1		exclam</para><para>keycode 0x0B =	2		at</para><para>keycode 0x0C =	3		numbersign</para><para>keycode 0x0D =	4		dollar</para><para>keycode 0x0E =	5		percent</para><para>keycode 0x0F =	6		asciicircum</para><para>keycode 0x10 =	7		ampersand	section</para><para>keycode 0x11 =	8		asterisk</para><para>keycode 0x12 =	9		parenleft</para><para>keycode 0x13 =	0		parenright</para><para>keycode 0x14 =	minus		underscore</para><para>keycode 0x15 =	equal		plus</para><para>keycode 0x33 =	backslash	bar</para><para>keycode 0x16 =	BackSpace</para><para>keycode 0x6A =	Insert</para><para>keycode 0x61 =	Home</para><para>keycode 0x63 =	Prior</para><para>keycode 0x4D =	NumentLock</para><para>keycode 0x70 =	KPentDivide</para><para>keycode 0x3F =	KPentMultiply</para><para>keycode 0x52 =	KPentSubtract</para><para>keycode 0x17 =	Tab</para><para>keycode 0x18 =	Q</para><para>keycode 0x19 =	W</para><para>keycode 0x1A =	e		E		eogonek		Eogonek</para><para>keycode 0x1B =	R</para><para>keycode 0x1C =	T</para><para>keycode 0x1D =	Y</para><para>keycode 0x1E =	U</para><para>keycode 0x1F =	I</para><para>keycode 0x20 =	o		O		oacute		Oacute</para><para>keycode 0x21 =	P</para><para>keycode 0x22 =	bracketleft	braceleft</para><para>keycode 0x23 =	bracketright	braceright</para><para>keycode 0x24 =	Return</para><para>keycode 0x6B =	Delete</para><para>keycode 0x67 =	End</para><para>keycode 0x69 =	Next</para><para>keycode 0x4F =	KPent7</para><para>keycode 0x50 =	KPent8</para><para>keycode 0x51 =	KPent9</para><para>keycode 0x56 =	KPentAdd</para><para>keycode 0x42 =	CapsentLock</para><para>keycode 0x26 =	a		A		aogonek		Aogonek</para><para>keycode 0x27 =	s		S		sacute		Sacute</para><para>keycode 0x28 =	D</para><para>keycode 0x29 =	F</para><para>keycode 0x2A =	G</para><para>keycode 0x2B =	H</para><para>keycode 0x2C =	J</para><para>keycode 0x2D =	K</para><para>keycode 0x2E =	l		L		lstroke		Lstroke</para><para>keycode 0x2F =	semicolon	colon</para><para>keycode 0x30 =	apostrophe	quotedbl</para><para>keycode 0x53 =	KPent4</para><para>keycode 0x54 =	KPent5</para><para>keycode 0x55 =	KPent6</para><para>keycode 0x32 =	ShiftentL</para><para>keycode 0x34 =	z		Z		zabovedot	Zabovedot</para><para>keycode 0x35 =	x		X		zacute		Zacute</para><para>keycode 0x36 =	c		C		cacute		Cacute</para><para>keycode 0x37 =	V</para><para>keycode 0x38 =	B</para><para>keycode 0x39 =	n		N		nacute		Nacute</para><para>keycode 0x3A =	M</para><para>keycode 0x3B =	comma		less</para><para>keycode 0x3C =	period		greater		Multientkey </para><para>keycode 0x3D =	slash		question</para><para>keycode 0x3E =	ShiftentR</para><para>keycode 0x62 =	Up</para><para>keycode 0x57 =	KPent1</para><para>keycode 0x58 =	KPent2</para><para>keycode 0x59 =	KPent3</para><para>keycode 0x6C =	KPentEnter</para><para>keycode 0x25 =	ControlentL</para><para>keycode 0x40 =	AltentL		MetaentL</para><para>keycode 0x41 =	space</para><para>keycode 0x71 =	Modeentswitch</para><para>keycode 0x6D =	ControlentR</para><para>keycode 0x64 =	Left</para><para>keycode 0x68 =	Down</para><para>keycode 0x66 =	Right</para><para>keycode 0x5A =	KPent0</para><para>keycode 0x5B =	KPentDecimal</para><para>! right windows-logo key</para><para>! in "windows" keyboards the postion of the key is annoying, is where AltGr</para><para>! usually resides, so go definie it as AltGr</para><para>keycode 116 = Modeentswitch</para><para>! right windows-menu key</para><para>keycode 117 = Multientkey</para><para>clear Shift</para><para>clear Lock</para><para>clear Control</para><para>clear Mod1</para><para>clear Mod2</para><para>clear Mod3</para><para>clear Mod4</para><para>clear Mod5</para><para>add    Shift   = ShiftentL ShiftentR</para><para>add    Lock    = CapsentLock</para><para>add    Control = ControlentL ControlentR</para><para>add    Mod1    = AltentL </para><para>!Modeentswitch</para><para>add    Mod2    = Modeentswitch</para></sect2><sect2><title>French</title><para>clear Mod1</para><para>clear Mod2</para><para>keycode   9 = Escape Escape</para><para>keycode  10 = ampersand 1</para><para>keycode  11 = eacute 2 deadenttilde</para><para>keycode  12 = quotedbl 3 numbersign</para><para>keycode  13 = apostrophe 4 braceleft</para><para>keycode  14 = parenleft 5 bracketleft</para><para>keycode  15 = minus 6 bar</para><para>keycode  16 = egrave 7 deadentgrave</para><para>keycode  17 = underscore 8 backslash</para><para>keycode  18 = ccedilla 9 asciicircum</para><para>keycode  19 = agrave 0 at</para><para>keycode  20 = parenright degree bracketright</para><para>keycode  21 = equal plus braceright</para><para>keycode  22 = BackSpace</para><para>keycode  23 = Tab Tab</para><para>keycode  24 = a</para><para>keycode  25 = z</para><para>keycode  26 = e E currency</para><para>keycode  27 = r</para><para>keycode  28 = t</para><para>keycode  29 = y</para><para>keycode  30 = u</para><para>keycode  31 = i</para><para>keycode  32 = o</para><para>keycode  33 = p</para><para>keycode  34 = deadentcircumflex  deadentdiaeresis </para><para>keycode  35 = dollar sterling currency</para><para>keycode  36 = Return</para><para>keycode  37 = ControlentL</para><para>keycode  38 = q</para><para>keycode  39 = s</para><para>keycode  40 = d</para><para>keycode  41 = f</para><para>keycode  42 = g</para><para>keycode  43 = h</para><para>keycode  44 = j</para><para>keycode  45 = k</para><para>keycode  46 = l</para><para>keycode  47 = m M</para><para>keycode  48 = ugrave percent</para><para>keycode  49 = twosuperior</para><para>keycode  50 = ShiftentL</para><para>keycode  51 = asterisk mu</para><para>keycode  52 = w</para><para>keycode  53 = x</para><para>keycode  54 = c</para><para>keycode  55 = v</para><para>keycode  56 = b</para><para>keycode  57 = n</para><para>keycode  58 = comma question deadentcedilla</para><para>keycode  59 = semicolon period</para><para>keycode  60 = colon slash Multientkey</para><para>keycode  61 = exclam section</para><para>keycode  62 = ShiftentR</para><para>keycode  63 = KPentMultiply</para><para>keycode  64 = AltentL MetaentL</para><para>keycode  65 = space space</para><para>keycode  66 = CapsentLock</para><para>keycode  67 = F1 F11</para><para>keycode  68 = F2 F12</para><para>keycode  69 = F3 F13</para><para>keycode  70 = F4 F14</para><para>keycode  71 = F5 F15</para><para>keycode  72 = F6 F16</para><para>keycode  73 = F7 F17</para><para>keycode  74 = F8 F18</para><para>keycode  75 = F9 F19</para><para>keycode  76 = F10 F20</para><para>keycode  77 = NumentLock</para><para>keycode  78 = ScrollentLock</para><para>keycode  79 = KPent7</para><para>keycode  80 = KPent8</para><para>keycode  81 = KPent9</para><para>keycode  82 = KPentSubtract</para><para>keycode  83 = KPent4</para><para>keycode  84 = KPent5</para><para>keycode  85 = KPent6</para><para>keycode  86 = KPentAdd</para><para>keycode  87 = KPent1</para><para>keycode  88 = KPent2</para><para>keycode  89 = KPent3</para><para>keycode  90 = KPent0</para><para>keycode  92 = SysentReq</para><para>keycode  94 = less greater bar</para><para>keycode  95 = F11 F11</para><para>keycode  96 = F12 F12</para><para>keycode 107 = Delete</para><para>keycode 108 = KPentEnter</para><para>keycode 109 = ControlentR</para><para>keycode 112 = KPentDivide</para><para>keycode 113 = Modeentswitch</para><para>keycode 114 = Break</para><para>keycode 110 = Find</para><para>keycode  98 = Up</para><para>keycode  99 = Prior</para><para>keycode 100 = Left</para><para>keycode 102 = Right</para><para>keycode 104 = Down</para><para>keycode 105 = Next</para><para>keycode 106 = Insert</para><para>! right windows-logo key</para><para>! in "windows" keyboards the postion of the key is annoying, is where AltGr</para><para>! usually resides, so go definie it as AltGr</para><para>keycode 116 = Modeentswitch</para><para>! right windows-menu key</para><para>keycode 117 = Multientkey</para><para>add Mod1 = AltentL</para><para>add Mod2 = Modeentswitch</para></sect2><sect2><title>Croatian/Slovenian</title><para>clear Mod1</para><para>clear Mod2</para><para>keycode   9 = Escape</para><para>keycode  10 = 1 exclam asciitilde</para><para>keycode  11 = 2 quotedbl caron</para><para>keycode  12 = 3 numbersign asciicircum</para><para>keycode  13 = 4 dollar breve</para><para>keycode  14 = 5 percent degree</para><para>keycode  15 = 6 ampersand ogonek</para><para>keycode  16 = 7 slash grave</para><para>keycode  17 = 8 parenleft abovedot</para><para>keycode  18 = 9 parenright acute</para><para>keycode  19 = 0 equal doubleacute</para><para>keycode  20 = apostrophe question diaeresis</para><para>keycode  21 = plus asterisk cedilla</para><para>keycode  22 = Delete Delete</para><para>keycode  23 = Tab Tab</para><para>keycode  24 = q Q backslash</para><para>keycode  25 = w W bar</para><para>keycode  26 = e</para><para>keycode  27 = r</para><para>keycode  28 = t</para><para>keycode  29 = z</para><para>keycode  30 = u</para><para>keycode  31 = i</para><para>keycode  32 = o</para><para>keycode  33 = p</para><para>keycode 34 = scaron Scaron division</para><para>keycode 35 = dstroke Dstroke multiply</para><para>keycode  36 = Return</para><para>keycode  37 = ControlentL</para><para>keycode  38 = a</para><para>keycode  39 = s</para><para>keycode  40 = d</para><para>keycode  41 = f F bracketleft</para><para>keycode  42 = g G bracketright</para><para>keycode  43 = h</para><para>keycode  44 = j</para><para>keycode 45 = k K lstroke</para><para>keycode 46 = l L Lstroke</para><para>keycode 47 = ccaron Ccaron</para><para>keycode 48 = cacute Cacute ssharp</para><para>keycode  49 = cedilla diaeresis</para><para>keycode  50 = ShiftentL</para><para>keycode 51 = zcaron Zcaron currency</para><para>keycode  52 = y</para><para>keycode  53 = x</para><para>keycode  54 = c</para><para>keycode  55 = v V at</para><para>keycode  56 = b B braceleft</para><para>keycode  57 = n N braceright</para><para>keycode  58 = m M section</para><para>keycode  59 = comma semicolon</para><para>keycode  60 = period colon</para><para>keycode  61 = minus underscore</para><para>keycode  62 = ShiftentR</para><para>keycode  63 = KPentMultiply</para><para>keycode  64 = AltentL MetaentL</para><para>keycode  65 = space space</para><para>keycode  66 = CapsentLock</para><para>keycode  67 = F1 F11</para><para>keycode  68 = F2 F12</para><para>keycode  69 = F3 F13</para><para>keycode  70 = F4 F14</para><para>keycode  71 = F5 F15</para><para>keycode  72 = F6 F16</para><para>keycode  73 = F7 F17</para><para>keycode  74 = F8 F18</para><para>keycode  75 = F9 F19</para><para>keycode  76 = F10 F20</para><para>keycode  77 = NumentLock</para><para>keycode  78 = ScrollentLock</para><para>keycode  79 = KPent7</para><para>keycode  80 = KPent8</para><para>keycode  81 = KPent9</para><para>keycode  82 = KPentSubtract</para><para>keycode  83 = KPent4</para><para>keycode  84 = KPent5</para><para>keycode  85 = KPent6</para><para>keycode  86 = KPentAdd</para><para>keycode  87 = KPent1</para><para>keycode  88 = KPent2</para><para>keycode  89 = KPent3</para><para>keycode  90 = KPent0</para><para>keycode  91 = KPentDecimal</para><para>keycode  92 = X386SysentReq</para><para>keycode  94 = less greater</para><para>keycode  95 = F11 F1</para><para>keycode  96 = F12 F12</para><para>keycode 108 = KPentEnter</para><para>keycode 109 = ControlentR</para><para>keycode 112 = KPentDivide</para><para>keycode 113 = Modeentswitch</para><para>keycode 114 = Break</para><para>keycode 110 = Find</para><para>keycode  98 = Up</para><para>keycode  99 = Prior</para><para>keycode 100 = Left</para><para>keycode 102 = Right</para><para>keycode 104 = Down</para><para>keycode 105 = Next</para><para>keycode 106 = Insert</para><para>add Mod1 = AltentL</para><para>add Mod2 = Modeentswitch</para></sect2><sect2><title>Lithuanian keyboard (AZERTY layout)</title><para> </para><para>clear Mod1</para><para>clear Mod2</para><para>keycode   9 = Escape Escape</para><para>keycode  10 = exclam 1 </para><para>keycode  11 = quotedbl 2 at</para><para>keycode  12 = slash 3 numbersign</para><para>keycode  13 = semicolon 4 dollar</para><para>keycode  14 = colon 5 percent</para><para>keycode  15 = comma 6 asciicircum</para><para>keycode  16 = period 7 ampersand</para><para>keycode  17 = question 8 asterisk </para><para>keycode  18 = parenleft 9</para><para>keycode  19 = parenright 0</para><para>keycode  20 = underscore minus minus underscore</para><para>keycode  21 = plus equal equal plus </para><para>keycode  22 = BackSpace</para><para>keycode  23 = Tab Tab</para><para>keycode  24 = aogonek Aogonek q Q</para><para>keycode  25 = zcaron Zcaron w W</para><para>keycode  26 = e E currency</para><para>keycode  27 = r</para><para>keycode  28 = t</para><para>keycode  29 = y</para><para>keycode  30 = u</para><para>keycode  31 = i</para><para>keycode  32 = o</para><para>keycode  33 = p</para><para>keycode  34 = iogonek Iogonek bracketleft braceleft</para><para>keycode  35 = leftdoublequotemark doublelowquotemark bracketright braceright</para><para>keycode  36 = Return</para><para>keycode  37 = ControlentL</para><para>keycode  38 = a</para><para>keycode  39 = s</para><para>keycode  40 = d</para><para>keycode  41 = f</para><para>keycode  42 = g</para><para>keycode  43 = h</para><para>keycode  44 = j</para><para>keycode  45 = k</para><para>keycode  46 = l</para><para>keycode  47 = uogonek Uogonek semicolon colon</para><para>keycode  48 = eabovedot Eabovedot apostrophe quotedbl</para><para>keycode  49 = grave asciitilde</para><para>keycode  50 = ShiftentL</para><para>keycode  51 = backslash bar</para><para>keycode  52 = z</para><para>keycode  53 = umacron Umacron x X</para><para>keycode  54 = c</para><para>keycode  55 = v</para><para>keycode  56 = b</para><para>keycode  57 = n</para><para>keycode  58 = m</para><para>keycode  59 = ccaron Ccaron comma less</para><para>keycode  60 = scaron Scaron period greater</para><para>keycode  61 = eogonek Eogonek slash question</para><para>keycode  62 = ShiftentR</para><para>keycode  63 = KPentMultiply</para><para>keycode  64 = AltentL MetaentL</para><para>keycode  65 = space space</para><para>keycode  66 = CapsentLock</para><para>keycode  67 = F1 F11</para><para>keycode  68 = F2 F12</para><para>keycode  69 = F3 F13</para><para>keycode  70 = F4 F14</para><para>keycode  71 = F5 F15</para><para>keycode  72 = F6 F16</para><para>keycode  73 = F7 F17</para><para>keycode  74 = F8 F18</para><para>keycode  75 = F9 F19</para><para>keycode  76 = F10 F20</para><para>keycode  77 = NumentLock</para><para>keycode  78 = ScrollentLock</para><para>keycode  79 = KPent7</para><para>keycode  80 = KPent8</para><para>keycode  81 = KPent9</para><para>keycode  82 = KPentSubtract</para><para>keycode  83 = KPent4</para><para>keycode  84 = KPent5</para><para>keycode  85 = KPent6</para><para>keycode  86 = KPentAdd</para><para>keycode  87 = KPent1</para><para>keycode  88 = KPent2</para><para>keycode  89 = KPent3</para><para>keycode  90 = KPent0</para><para>keycode  94 = less greater bar</para><para>keycode  95 = F11 F11</para><para>keycode  96 = F12 F12</para><para>keycode 108 = KPentEnter</para><para>keycode 109 = ControlentR</para><para>keycode 112 = KPentDivide</para><para>keycode 113 = Modeentswitch</para><para>keycode 114 = Break</para><para>keycode 110 = Find</para><para>keycode  98 = Up</para><para>keycode  99 = Prior</para><para>keycode 100 = Left</para><para>keycode 102 = Right</para><para>keycode 115 = Select</para><para>keycode 104 = Down</para><para>keycode 105 = Next</para><para>keycode 106 = Insert</para><para>! right windows-logo key</para><para>! in "windows" keyboards the postion of the key is annoying, is where AltGr</para><para>! usually resides, so go definie it as AltGr</para><para>keycode 116 = Modeentswitch</para><para>! right windows-menu key, redefined as Compose key</para><para>keycode 117 = Multientkey</para><para>add Mod1 = AltentL</para><para>add Mod2 = Modeentswitch</para></sect2><sect2><title>Polish</title><para>! The "ent 7" key generates 7, ampersand, and section</para><para>! The "E" key generates e, E, eogonek, and Eogonek</para><para>! The "O" key generates o, O, oacute, and Oacute</para><para>! The "A" key generates a, A, aogonek, and Aogonek</para><para>! The "S" key generates s, S, sacute, and Sacute</para><para>! The "L" key generates l, L, lstroke, and Lstroke</para><para>! The "Z" key generates z, Z, zabovedot, and Zabovedot</para><para>! The "X" key generates x, X, zacute, and Zacute</para><para>! The "C" key generates c, C, cacute, and Cacute</para><para>! The "N" key generates n, N, nacute, and Nacute</para><para>! The "AltGr" key generates Modeentswitch</para><para>keycode 0x09 =	Escape</para><para>keycode 0x43 =	F1</para><para>keycode 0x44 =	F2</para><para>keycode 0x45 =	F3</para><para>keycode 0x46 =	F4</para><para>keycode 0x47 =	F5</para><para>keycode 0x48 =	F6</para><para>keycode 0x49 =	F7</para><para>keycode 0x4A =	F8</para><para>keycode 0x4B =	F9</para><para>keycode 0x4C =	F10</para><para>keycode 0x5F =	F11</para><para>keycode 0x60 =	F12</para><para>keycode 0x6F =	Print</para><para>keycode 0x4E =	Multientkey</para><para>keycode 0x6E =	Pause</para><para>keycode 0x31 =	grave		asciitilde</para><para>keycode 0x0A =	1		exclam</para><para>keycode 0x0B =	2		at</para><para>keycode 0x0C =	3		numbersign</para><para>keycode 0x0D =	4		dollar</para><para>keycode 0x0E =	5		percent</para><para>keycode 0x0F =	6		asciicircum</para><para>keycode 0x10 =	7		ampersand	section</para><para>keycode 0x11 =	8		asterisk</para><para>keycode 0x12 =	9		parenleft</para><para>keycode 0x13 =	0		parenright</para><para>keycode 0x14 =	minus		underscore</para><para>keycode 0x15 =	equal		plus</para><para>keycode 0x33 =	backslash	bar</para><para>keycode 0x16 =	BackSpace</para><para>keycode 0x6A =	Insert</para><para>keycode 0x61 =	Home</para><para>keycode 0x63 =	Prior</para><para>keycode 0x4D =	NumentLock</para><para>keycode 0x70 =	KPentDivide</para><para>keycode 0x3F =	KPentMultiply</para><para>keycode 0x52 =	KPentSubtract</para><para>keycode 0x17 =	Tab</para><para>keycode 0x18 =	Q</para><para>keycode 0x19 =	W</para><para>keycode 0x1A =	e		E		eogonek		Eogonek</para><para>keycode 0x1B =	R</para><para>keycode 0x1C =	T</para><para>keycode 0x1D =	Y</para><para>keycode 0x1E =	U</para><para>keycode 0x1F =	I</para><para>keycode 0x20 =	o		O		oacute		Oacute</para><para>keycode 0x21 =	P</para><para>keycode 0x22 =	bracketleft	braceleft</para><para>keycode 0x23 =	bracketright	braceright</para><para>keycode 0x24 =	Return</para><para>keycode 0x6B =	Delete</para><para>keycode 0x67 =	End</para><para>keycode 0x69 =	Next</para><para>keycode 0x4F =	KPent7</para><para>keycode 0x50 =	KPent8</para><para>keycode 0x51 =	KPent9</para><para>keycode 0x56 =	KPentAdd</para><para>keycode 0x42 =	CapsentLock</para><para>keycode 0x26 =	a		A		aogonek		Aogonek</para><para>keycode 0x27 =	s		S		sacute		Sacute</para><para>keycode 0x28 =	D</para><para>keycode 0x29 =	F</para><para>keycode 0x2A =	G</para><para>keycode 0x2B =	H</para><para>keycode 0x2C =	J</para><para>keycode 0x2D =	K</para><para>keycode 0x2E =	l		L		lstroke		Lstroke</para><para>keycode 0x2F =	semicolon	colon</para><para>keycode 0x30 =	apostrophe	quotedbl</para><para>keycode 0x53 =	KPent4</para><para>keycode 0x54 =	KPent5</para><para>keycode 0x55 =	KPent6</para><para>keycode 0x32 =	ShiftentL</para><para>keycode 0x34 =	z		Z		zabovedot	Zabovedot</para><para>keycode 0x35 =	x		X		zacute		Zacute</para><para>keycode 0x36 =	c		C		cacute		Cacute</para><para>keycode 0x37 =	V</para><para>keycode 0x38 =	B</para><para>keycode 0x39 =	n		N		nacute		Nacute</para><para>keycode 0x3A =	M</para><para>keycode 0x3B =	comma		less</para><para>keycode 0x3C =	period		greater		Multientkey </para><para>keycode 0x3D =	slash		question</para><para>keycode 0x3E =	ShiftentR</para><para>keycode 0x62 =	Up</para><para>keycode 0x57 =	KPent1</para><para>keycode 0x58 =	KPent2</para><para>keycode 0x59 =	KPent3</para><para>keycode 0x6C =	KPentEnter</para><para>keycode 0x25 =	ControlentL</para><para>keycode 0x40 =	AltentL		MetaentL</para><para>keycode 0x41 =	space</para><para>keycode 0x71 =	Modeentswitch</para><para>keycode 0x6D =	ControlentR</para><para>keycode 0x64 =	Left</para><para>keycode 0x68 =	Down</para><para>keycode 0x66 =	Right</para><para>keycode 0x5A =	KPent0</para><para>keycode 0x5B =	KPentDecimal</para><para>! right windows-logo key</para><para>! in "windows" keyboards the postion of the key is annoying, is where AltGr</para><para>! usually resides, so go definie it as AltGr</para><para>keycode 116 = Modeentswitch</para><para>! right windows-menu key
keycode 117 = Multientkey</para><para>clear Shift</para><para>clear Lock</para><para>clear Control</para><para>clear Mod1</para><para>clear Mod2</para><para>clear Mod3</para><para>clear Mod4</para><para>clear Mod5</para><para>add    Shift   = ShiftentL ShiftentR</para><para>add    Lock    = CapsentLock</para><para>add    Control = ControlentL ControlentR</para><para>add    Mod1    = AltentL </para><para>!Modeentswitch
add    Mod2    = Modeentswitch</para></sect2></sect1><sect1><title>Troubleshooting and some Xmodmap tips</title><sect2><title>Troubleshooting</title><para>Get the newest Linux distribution. Mandrake 8.1 or RedHat 7.2 or 8.0 work
fantastically with regard to internationalization (which could not be
said about previous distributions). If locales are not installed, you must
install them. The GNU C Library comes with a locale database, which you should have on your system.
Upgrade your glibc. Troubleshooting of older versions of XFree or KDE is
insignificant in my opinion, as the systems get better and better and people
install newer versions. You may find almost any xmodmap file in the GNOME 
directory in (SuSE) /opt/gnome/share/xmodmap (with standard ISO8859-1,2 
and other definitions). To switch between the keyboards, use right Alt.
Slackware has a very good databse of xmodmap maps in /usr/share/xmodmap.
Use the command: locale -a to see all the locales.</para><para></para></sect2><sect2><title>Tips</title><para>If you want to list the current keymap table, issue the command:
xmodmap -pk ent more</para><para>The xkeycaps program is a sort of graphical front-end for xmodmap. Start it
and see which numbers mean which keycode.</para><para>To make the mouse buttons left-handed, use a command:
xmodmap -e "pointer = 3 2 1"</para><para>To remove the CapsLock and change it to a control key, write this
in your Xmodmap file:</para><para>remove Lock = CapsentLock
keysym CapsentLock = ControlentL
add Control = ControlentL</para></sect2></sect1><sect1><title>Links</title><sect2><title>Other information on internationalization</title><para><ulink url="http://www.geocities.com/gorazd.hribar/latin-2/eng-iso-8859-2.html"></ulink>
Here you can see ISO8859-2 characters visually <ulink url="http://users.raketnet.nl/koos_pol/en/xmodmap-nl.html"></ulink>
Dutch keymap <ulink url="http://www.linuxfaq.com/HOWTO/Unicode-HOWTO.html"></ulink>
Unicode HOWTO <ulink url="http://www.linuxfaq.com/HOWTO/Cyrillic-HOWTO.html"></ulink>
Cyrillic HOWTO <ulink url="http://www.linuxfaq.com/HOWTO/Esperanto-HOWTO.html"></ulink>
Esperanto HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Belgian-HOWTO.html"></ulink>
Belgian HOWTO <ulink url="http://www.linuxfaq.com/HOWTO/Chinese-HOWTO.html"></ulink>
Chinese HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Danish-HOWTO.html"></ulink>
Danish HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Finnish-HOWTO.html"></ulink>
Finnish HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/French-HOWTO.html"></ulink>
French HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/German-HOWTO.html"></ulink>
German HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Hebrew-HOWTO.html"></ulink>
Hebrew HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Hellenic-HOWTO.html"></ulink>
Hellenic HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Italian-HOWTO.html"></ulink>
Italian HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Polish-HOWTO.html"></ulink>
Polish HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Portuguese-HOWTO.html"></ulink>
Portugese HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Serbian-HOWTO.html"></ulink>
Serbian HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Slovenian-HOWTO.html"></ulink>
Slovenian HOWTO <ulink url="http://www.linuxfaq.com/HOWTO/Spanish-HOWTO.html"></ulink>
Spanish HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Thai-HOWTO.html"></ulink>
Thai HOWTO  <ulink url="http://www.linuxfaq.com/HOWTO/Turkish-HOWTO.html"></ulink>
Turskish HOWTO</para></sect2><sect2><title>Links to some non ISO8859-1 fonts</title><para><ulink url="ftp://ftp.redhat.com/pub/redhat/linux/7.2/en/os/i386/RedHat/RPMS/XFree86-ISO8859-15-100dpi-fonts-4.1.0-3.i386.rpm"></ulink>
<ulink url="ftp://ftp.redhat.com/pub/redhat/linux/7.2/en/os/i386/RedHat/RPMS/XFree86-ISO8859-15-75dpi-fonts-4.1.0-3.i386.rpm"></ulink>
<ulink url="ftp://ftp.redhat.com/pub/redhat/linux/7.2/en/os/i386/RedHat/RPMS/XFree86-ISO8859-2-100dpi-fonts-4.1.0-3.i386.rpm"></ulink>
<ulink url="ftp://ftp.redhat.com/pub/redhat/linux/7.2/en/os/i386/RedHat/RPMS/XFree86-ISO8859-2-75dpi-fonts-4.1.0-3.i386.rpm"></ulink></para><para>Note: This RedHat ftp directory contains more fonts, just look into the RPMdirectory above.</para></sect2></sect1></article>

