Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

So I have an IBM Thinkpad X31, running natty and xmonad as the window manager. The keyboard is Italian. I wish to use an American English keyboard mapping, all the time. How do I do this?

share|improve this question

2 Answers 2

Here is one way to connect XMonad and multiple keyboard layouts.

Step 1. Create a script that will switch between your layouts. For the sake of example, let's say we will support English (US), Italian and French.

/home/you/bin/layout_switch.sh:

#!/bin/zsh
# LICENSE: PUBLIC DOMAIN
# switch between my layouts

# If an explicit layout is provided as an argument, use it. Otherwise, select the next layout from
# the set [us, it, fr].
if [[ -n "$1" ]]; then
    setxkbmap $1
else
    layout=$(setxkbmap -query | awk 'END{print $2}')
    case $layout in
        us)
                setxkbmap it
            ;;
        it)
                setxkbmap fr
            ;;
        *)
                setxkbmap us
            ;;
    esac
fi

Test this script - run it and see if the keyboard layout cycles between the layouts. If it does, proceed to the next step.

Step 2. Customize XMonad settings to support custom key binding that will switch the layout.

In your home directory, create a directory named ".xmonad" (if it does not exist).

/home/you/.xmonad/xmonad.hs:

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
import System.IO

main = do
  xmonad $ defaultConfig
     {
        terminal = "gnome-terminal"
     } `additionalKeys`
     [ (( mod1Mask             , xK_Escape), spawn "/home/you/bin/layout_switch.sh")
     ]

Now, restart XMonad by pressing Mod+q. Your layout switcher should be fully functional.

Reference: http://zuttobenkyou.wordpress.com/tag/setxkbmap/

share|improve this answer
    
This works fine, but restarting XMonad was not enough, I had to logout and in (I am on Ubuntu, with its login manager). –  Gauthier Oct 15 at 7:59

To change your keyboard mapping to American English, you run the command setxkbmap us. To integrate it with Xmonad, you add it to the startup hook.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.