xkeymap - X Window System keyboard mapping utility for Allegro by Michael Bukin, modified by Elias Pschernig 0. Quickstart - Make sure you have an appropriate "keyboard=" entry in your allegro.cfg. - Run xkeymap, and click on the "Setup key mappings" button. - Select Allegro scancodes from the list, and hit corresponding keys on your keyboard. - "Save and exit", and paste the generated file xkeymap.cfg into your allegro.cfg. - If Allegro's keyboard mapping is still broken, reading on probably won't help - in this case you can write to the mailing lists or the web forum on allegro.cc. 1. Why it is needed To achieve maximum portability, Allegro does its own key-mapping, directly reading in raw scancodes from the keyboard. While on some platforms, like DOS, Windows or QNX, it is possible to directly read in these scancodes, on other platforms, like X, this is not possible. In X, Allegro can only read in virtual keycodes produced by X, which already depend on the keyboard layout specifications. Because of that, you have to provide a keyboard configuration which maps the X virtual keycodes back to the raw scancodes. This utility makes it easy to create the right configuration, by giving you a selection of Allegro keycodes and asking you to press the corresponding key on your keyboard, so the X virtual keycode can be detected. Note that X may completely block some keys which, therefore, can't be detected at all by user programs. (For me, this is the case for the left control key and the menu key.) 2. How to use it Make sure your standard allegro.cfg (either ./allegro.cfg, ~/allegro.cfg, ~/.allegrorc, /etc/allegro.cfg, or /etc/allegrorc) contains the right "keyboard=" line for your keyboard layout, for example "keyboard=es" for a Spanish layout - before running the program. Alternatively, you can click on the button labelled "Default" to directly load a keyboard layout file. Some layouts ship with Allegro and can be found in the "resources/keyboard" folder. Or you can create your own with the keyconf utility. Now click on the "Setup key mappings" button. It shows you a list containing all Allegro keycodes. Select any keycode with the mouse or cursor keys, and hit return (or double-click, or click the button below it). Then press the key on your keyboard whose X code should be seen by Allegro as the selected key. Normally, you want to ignore the "KEY_" name of the key, and only look at the letters displayed below the "Produces:" button, which tell what characters are produced when hitting the key, or Shift+key or AltGr+key combinations. For example, if you have "keyboard=de" in your allegro.cfg, the key KEY_Y will show "z Z", and you should press the key labelled 'Z' on your keyboard, not 'Y'. The "Done" button takes you back to the main menu, where you can test the current mapping with the "Test key mappings" button. Use "Save and exit" to write the X mappings into a file called "xkeymap.cfg", the contents of which you should paste into your allegro.cfg. 3. Example from my current system I'm using a Debian-Linux-i386 version with XFree86 4.2.1 and a PC keyboard, and the following standard keyboard layout is specified in /etc/X11/XF86Config (for a german keyboard layout): Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" Option "XkbKeycodes" "xfree86" Option "XkbTypes" "default" Option "XkbCompat" "default" Option "XkbSymbols" "en_US(pc105)+de" Option "XkbGeometry" "pc(pc105)" EndSection My allegro.cfg is in /etc/allegro.cfg, and contains this: [system] keyboard = de language = de Using the xkeymap utility, and typing in all keys which were not working before, produced the following xkeymap.cfg for me. I just pasted it at the beginning of my /etc/allegro.cfg - and now have a 100% working keyboard in Allegro programs :) [xkeymap] keycode20 = 12 keycode21 = 13 keycode29 = 21 keycode34 = 26 keycode35 = 27 keycode47 = 39 keycode48 = 40 keycode49 = 41 keycode51 = 43 keycode52 = 44 keycode59 = 51 keycode60 = 52 keycode61 = 53 keycode64 = 56 keycode94 = 214 keycode113 = 184 keycode115 = 219 keycode116 = 220