get current active keyboard layout(language) in linux
Asked Answered
A

1

11

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)

Abortive answered 31/1, 2014 at 14:57 Comment(2)
There is a risk that there is no common standard for this. Did you read: nabble.documentfoundation.org/…Ribal
Or maybe this: #7021611Ribal
W
10

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.

Walther answered 13/11, 2015 at 9:41 Comment(2)
works for me, but I noticed it only shows "system" (RU,EN in my case) languages, ignoring ibus Chinese.Abortive
yes, print "%s %n" shows ru Russian for Russian, en English for English, and en English for Chinese.Abortive

© 2022 - 2024 — McMap. All rights reserved.