get current active keyboard layout(language) in linux

keyboard-layout, linux

Solution

`setxkbmap -print` isn't helpful in this case, which was also my first idea. I have found a little tool, very easy to compile

sudo apt-get install git
mkdir -p `~/src`
cd `~/src`
git clone https://github.com/nonpop/xkblayout-state.git 
cd xkblayout-state
make

Now you can run the command `./xkblayout-state` to get the current layout, e.g.

./xkblayout-state print "%n"                          
German%

or list all installed layouts

./xkblayout-state print "%N"
German
English
English

In this case without a trailing `%`. I would have expected that, because I have not added a `\n`.

Problem

In my C/C++ program I want to know which language is user going to type. I mean the language whose ID is displayed in the corner of the task bar. Like EN or RU or ZH or FR or IT. I know how to get the list of possible layout: ``` $ setxkbmap -query | grep layout ``` output: ``` layout: us,ru ``` But how to know which one is selected right now? (for the current window)

Original source

Related problems