Disclaimer: this article refers to using Linux with an American keyboard to type Portuguese (pt-br) text, using the ‘us-intl’ keyboard layout.
One of the things that bothered me when upgrading between Ubuntu versions a while back (Feisty for Gutsy? Hardy? I can’t remember) is the changed behavior for inputting the Cedilla ‘ç’ symbol using American keyboards.
Ok, in fact, this behavior changed twice over the time, so I can remember at least three ways of doing that:
- Press the the single-quote (‘) key, then letter ‘c’ (
'thenc). In the us-intl keyboard layout, the single quote is a dead-key commonly used to insert an acute sign over vowels: á, é, í, ó, ú. Pressing the single-quote twice produces the single quote itself. A few years ago, the Cedilla sign was inputted by combining the single-quote dead key with the letter ‘c’ itself. This behavior changed: now,'thencproduces ć – maybe to support languages that require this symbol (after all we’re abusing the us-international layout) or simply a question of consistency. - Combining the Right-Alt key with the comma (,) symbol (
Ralt+,). After the change in the above item was introduced, the us-intl layout was tuned to allow many other types of symbols (Can you say UTF-8?). The Right-Alt key came to be what is called a Level-3 modifier (that is, a key modifier that works just like Shift, Ctrl and Alt/Meta – that is not a dead-key). With this modifier, one could produce several other symbols commonly used in western languages other than English itself, i.e.: ¡, ß, æ, ñ, ø etc. Also, the Level-3 modifier also allow us to input commonly used symbols that are outside the English alphabet: ², ³, ©, ®, ¢, § etc. - Combining Right-Alt with the comma (,) symbol as dead-key, then pressing letter ‘c’ (
Ralt+,thenc). This is the the behavior introduced with newer versions of the us-intl keyboard layout. Just like before, you use the Right-Alt key as a Level-3 modifier, but instead of inserting the symbol directly, this key combination acts like a dead-key, waiting for the next key-press to determine what symbol is being inputted. In fact, this behavior was introduced with the ‘alt-intl’ layout which is said to mimic the previous behavior of us-intl (first item above) – well, at least for me it doesn’t exactly mimics the former behavior, and I personally prefer the second option.
Choosing between the second and the third options above is pretty straightforward if you’re using a relatively recent Linux distribution with Gnome 2.x and Xorg. Just use gnome-keyboard-properties to choose between USA International (with dead keys) or USA Alternative International (former us_intl) for the behavior found in item 2 and 3 above respectively. You can also have both configured and change between layouts using the Keyboard Indicator gnome applet:
In case you are not using Gnome and prefer to configure it directly in Xorg’s configuration, edit the InputDevice section at the X.org server configuration file, usually /etc/X11/xorg.conf, to look like below:
- Cedilla not as dead-key (behavior 2 above):
Section "InputDevice" Identifier "Generic Keyboard" Driver "kbd" Option "XkbRules" "xorg" Option "XkbModel" "pc105" Option "XkbLayout" "us" Option "XkbVariant" "intl" # Option "XkbOptions" "lv3:ralt_switch" EndSection
- Cedilla as dead-key (behavior 3 above):
Section "InputDevice" Identifier "Generic Keyboard" Driver "kbd" Option "XkbRules" "xorg" Option "XkbModel" "pc105" Option "XkbLayout" "us" Option "XkbVariant" "alt-intl" # Option "XkbOptions" "lv3:ralt_switch" EndSection
The line with “XkbOptions” “lv3:ralt_switch” was indifferent to (at least) the Cedilla behavior, thus I commented it (I have a feeling that the ralt_switch behavior is included anyway for both variants).
Troubleshooting
If even after doing the above you can’t get the desired behavior, check the following:
- Your window manager configuration usually precedes your X server configuration – That is, if you configured your keyboard layout using Gnome or KDE tools, the settings in your xorg.conf are probably being ignored. Within gnome, you can use gconf-editor and browse to /desktop/gnome/peripherals/keyboard/kdb to check the current effective configuration. Leave a comment if you know how to override this.
- Your X server may have been automagically configured by HAL and friends. You can check that by opening the X server log (usually /var/log/Xorg.0.log) and looking for the evdev module. There should be a couple of messages showing which model/layout/variant was chosen:
(**) Option "xkb_rules" "evdev" (**) AT Translated Set 2 keyboard: xkb_rules: "evdev" (**) Option "xkb_model" "pc102" (**) AT Translated Set 2 keyboard: xkb_model: "pc102" (**) Option "xkb_layout" "us" (**) AT Translated Set 2 keyboard: xkb_layout: "us" (**) Option "xkb_variant" "alt-intl" (**) AT Translated Set 2 keyboard: xkb_variant: "alt-intl" (**) Option "xkb_options" "lv3:ralt_switch" (**) AT Translated Set 2 keyboard: xkb_options: "lv3:ralt_switch"
In this case, you can either:
- Disable auto-detection from the X.org side, adding an “AutoAddDevices” “off” option to your ServerLayout section (at the xorg.conf file):
Section "ServerLayout" Identifier "Default Layout" Screen "Default Screen" InputDevice "Synaptics Touchpad" Option "AutoAddDevices" "off" EndSection
- Create a policy at the HAL side, by creating a .fdi file, e.g.: /etc/hal/fdi/policy/10-keyboard.fdi, that reads:
<?xml version="1.0" encoding="UTF-8"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.keys"> <merge key="input.x11_options.XkbVariant" type="string">intl</merge> <merge key="input.xkb.variant" type="string">intl</merge> </match> </device> </deviceinfo>(Change the variant from intl for alt-intl according to your choice). Remember to restart the HAL daemon (hald) for the changes to take effect
- Disable auto-detection from the X.org side, adding an “AutoAddDevices” “off” option to your ServerLayout section (at the xorg.conf file):
- More information about HAL and the evdev module can be found at this blog post.
I hope this post was useful to shed some light into this (somewhat common) problem among pt-br users that don’t necessarily use Brazilian keyboards or run their systems in that locale. Leave a comment if you find this post useful, have questions, comments, corrections, anything
-Klaus
