如何更改键盘布局(X11 API 解决方案)
我想通过编程改变Linux中的键盘布局, X11的什么API函数可以实现这个功能?
I want to change keyboard layout in Linux by programming,
What X11's API function does this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我找到了一个很好的解决方案。
这是由 Jay Bromley 编写的 C++ 类,我可以将其添加到我的应用程序中并使用它。
源代码
使用非常简单:
您可以阅读源代码并发现其他一些有用的功能。
要编译独立版本,您需要取消注释“XKeyboard.cpp”中存在的“int main”函数(或编写您自己的 main.cpp)并使用如下内容:
I found one good solution.
It's a c++ class wrriten by Jay Bromley, that I can add to my app and using it.
source code
It's very easy to use:
you can read source code and found some another useful functions.
for compiling standalone version you need to un-comments "int main" function present in "XKeyboard.cpp" (or write your own main.cpp) and use somethings like this:
我不确定 X11 库函数是什么,但 setxkbmap 是我用来实现它的 bash 命令。也许沿着这些线搜索会找到你想要的东西(或者在紧要关头你可以只执行 bash 命令)。
示例
编辑:
经过一系列 setxkbmap 没有发现任何有用的信息后,我建议只调用:
I'm not sure what the X11 library function is but setxkbmap is the bash command I use to achieve it. Maybe searching along these lines will find what you want (or at a pinch you could just execute the bash command).
Example
EDIT:
After a strace of setxkbmap didn't turn up anything useful I suggest just calling:
纯 X11 API 解决方案应如下所示:
使用
-lX11
标志进行编译这将为英语(美国)qwerty 布局打印类似于
pc+us+inet(evdev)
的内容,pc+ru+us:2+inet(evdev)
用于俄语 йцукен 布局,pc+us(dvorak)+us:2+inet(evdev)
用于英语 dvorak布局。A pure X11 API solution should look something like this:
Compile with
-lX11
flagThis will print something like
pc+us+inet(evdev)
for English (USA) qwerty layout,pc+ru+us:2+inet(evdev)
for Russian йцукен layout,pc+us(dvorak)+us:2+inet(evdev)
for English dvorak layout.昨天我试图将 Google 的 xsecurelock 自动布局切换器设置为 EN。我尝试为 X11 api 找到一些现有的解决方案,但是...
所以我决定在 S. Razi 的帮助下编写自己的解决方案。
这是代码:(使用 gcc -lX11 运行)
在这里,您可以将 char* temp = "English" 更改为布局组的名称(例如:"Russian"),这个简单的代码将切换您当前的布局:)
Yesterday I was trying to make auto layuout switcher to EN for Google's xsecurelock. I tryed to find some existing solutions for X11 api, but...
So I decided to write my own with some help from S. Razi.
Here is the code: (run with gcc -lX11)
Here you can change char* temp = "English" to name of the group of your layout (exmp: "Russian"), and this simple code will switch your current layout :)