首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pyudev设置键盘布局

使用pyudev设置键盘布局
EN

Stack Overflow用户
提问于 2012-05-02 08:49:18
回答 1查看 1.6K关注 0票数 0

我编写这个脚本是为了在插件上自动更改usb键盘布局。

代码语言:javascript
复制
import pyudev                                                                   
from subprocess import call

monitor = pyudev.Monitor.from_netlink(pyudev.Context())
monitor.filter_by('usb')

def kbd_event(action, device):
    if action == 'add':
        call(["setxkbmap", "carpalx"])

observer = pyudev.MonitorObserver(monitor, kbd_event)
observer.start()

如果我在bash中输入setxkbmap carpalx,它就能工作,但是它不会改变上面代码中的布局。所以我在bash做了这个:

代码语言:javascript
复制
setxkbmap carpalx
xmodmap -pke > carpalx2

将上面的调用行更改为call(["xmodmap", "./carpalx2"]),现在脚本可以工作了。我有以下问题:

为什么xmodmap在代码中工作,而setxkbmap不工作,但是在bash?

  • Currently,kbd_event中这两种工作都是针对每个usb事件调用的,而call(["xmodmap", "./carpalx2"])是为我插入的每一个usb设备运行的。如何进一步过滤事件,使布局只在插入键盘时才会改变?

使用当前代码,每次插入鼠标时键盘布局都会发生变化:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-23 20:45:05

您可以通过检查ID_INPUT_KEYBOARD属性来筛选键盘:

代码语言:javascript
复制
if action == 'add' and device['ID_INPUT_KEYBOARD'] == '1':
    print('a keyboard was added')

关于直接调用setxkbmap和使用脚本之间的区别,我猜想X服务器也需要时间来初始化键盘。UDev在键盘完成udev处理后立即调用回调,但在X11服务器配置和初始化新键盘之前,这很容易。

检查X.org日志和setxkbmap可能打印的任何错误消息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10410462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档