For some languages you will need to create a keyboard. For many Latin languages this is not that difficult for others it can get quite elaborate and time consuming. Its easy if you are simply capturing the keyboard operation from an existing platform eg migrating a Microsoft based keyboard to Linux. However, if you are creating a whole new keyboard then you have a number of issues such as acceptance of the keyboard and standardisation processes.

Creating keyboards on Microsoft

Microsoft Keyboard Layout Creator (MSKLC)

  • MSKLC – Microsoft Keyboard Layout Creator

This will only work on Windows 2000 and XP. It WILL NOT work on Windows 95, 98, ME or NT 4


Firstly load an existing keyboard layout if you simply want to extend and existing layout.

You will notice that you can define keys for for each of the shift states and for the other modified state (usualy AltGr). For dead keys you must define one of the states as being a dead key and then define each of the combinations. Quite easy but tedious.

Once you are happy with your keyboard then select Project ‣ Test Keyboard Layout... you will see a text entry field and can type and test the keyboard. If all works well then select Project ‣ Validate Layout, this will give you a report about any problems that were detected in your keyboard.

Want a picture of your new keyboard? File ‣ Save As Image – they’re ugly but they get the message across.

The last step is to build your keyboard for that select Project ‣ Build DLL and Setup Package. This will create and MSI installer and a keyboard DLL, see the section below for steps on how to actually make the installer work.

Repackaging Installers with WiX

The MSKLC creates .msi files that don’t contain the dll (they put it in a separate file).

In the keyboards/za module in CVS there is an example of how to rebuild these files correctly (for the South African keyboards). You need to run Make xx-xx.msi (and have the WiX binaries installed, see below) to rebuild the msi file for a language. You will probably need cygwin to run Make (it requires sed as well).

Manual way to fix this:

  1. download WiX binaries from and unpack them somewhere.
  2. Disassemble the .msi file: /path/to/wix/dark.exe -x . path/to/us-za.msi us-za.wxs
  3. Make the changes to the .wxs file listed below
  4. Make the wix object file: /path/to/wix/candle.exe us-za.wxs
  5. Build the new installer: /path/to/wix/light.exe us-za.wixobj

You should see that the built installer has increased in size.

Changes need to the MSKLC to get it to make a standalone installer

Edit the .wxs file before the candle and light commands:

  1. Add Compressed=”yes” as an attribute to the Package element at the start
  2. Add EmbedCab=”yes” Cabinet=”” to the Media element a bit further down
  3. Move the Media entry to between the Package and Property sections.

Using MSKLC automatically

It’s nasty using a GUI tool :-) seems to be an approach to making it command-line...

Janko’s Keyboard Generator

This will only work for Windows 95, 98 and ME.

Please note that if your languages characters are not in any Microsoft codepages then you will not be able to create a keyboard with those characters. Michael Kaplan (the Microsoft localisation guru) explains why not in this blog entry (look at the second one). Essentially Windows 95 is an old product which MS has stopped supporting and they’d rather you move to something new, they’re both technical and marketing considerations.

Creating keyboard layouts for Linux and XFree86

FIXME various pointers

Getting a nice picture of your layout

This prooves rather harder than expected. These pages will give you some pointers that are hopefully helpfull.

Keyboard Mapping for Linux (KMFL)

This project is trying to bring the kyman keyboard mapings to Linux it is/will be GPL’d

Changes needed to your Linux distribution

The various Linux distros have different configuration applications for setting things like keyboard. These few notes give a quick guide as to what files you need to change and where you need to look.

Fedora/Red Hat

The application system-config-keyboard sets the keyboard for your setup. It is simply a configuration tool for the normal X keyboard mappings. The file ```` which is part of rhpl needs to be edited to add your keyboard.

Creating keyboard layouts for Mac

SIL has created a nice tools called Ukelele designed to create the XML files needed by the Macs keyboard system.