【问题标题】:Detect keyboard layout in *nix in Python在 Python 中检测 *nix 中的键盘布局
【发布时间】:2013-09-23 08:18:56
【问题描述】:

我正在使用 pykeylogger 并希望通过添加有关当前所选键盘布局的信息来稍微扩展它(现在您可以从日志中知道假设美国 qwerty 按下了哪些按钮)。

windows系统是这样的:

def get_locale(self):
        if os.name == 'nt':
            w = user32.GetForegroundWindow() 
            tid = user32.GetWindowThreadProcessId(w, 0) 
            return hex(user32.GetKeyboardLayout(tid))

获取布局的十六进制代码(如 0x409409),这对我来说很好,因为我基本上想区分一种布局。

如果您能给我一个 posix(例如 ubuntu)系统的解决方案,我将不胜感激。

【问题讨论】:

  • 试试/etc/default/keyboard/
  • @DanielB 你的意思是我可以从 /etc/default/keyboard 读取,从而获得当前应用程序的布局吗?对我来说,sudo cat /etc/default/keyboard 命令为任何当前布局返回相同的内容

标签: python ubuntu posix keyboard-events


【解决方案1】:

setxkbmap -打印

xkb_keymap {
xkb_keycodes  { include "evdev+aliases(qwerty)" };
xkb_types     { include "complete"  };
xkb_compat    { include "complete"  };
xkb_symbols   { include "pc+gb+gr(simple):2+inet(evdev)+terminate(ctrl_alt_bksp)"   };
xkb_geometry  { include "pc(pc105)" };
};

xkb_keycodes { 包括 "evdev+aliases(qwerty)" };

xkb_symbols { 包括 "pc+gb+ gr (简单):2+inet(evdev)+terminate(ctrl_alt_bksp)" };

【讨论】:

  • yes setxkbmap -print 给了我已安装布局的列表,但我如何才能检测到哪个布局现在处于活动状态?
  • 如果你想知道现在有什么动作,你可以使用 xkb-switch。 link。例如:xkb-switch --> gr(simple), xkb-switch --> gb
  • 我会检查一下。谢谢!
  • 好吧,它不在 python 中,但你可以制作一个小脚本,将它解压到 cd 中并构建它。然后你可以popen调用它。不确定这是否是最好的解决方案,但它会起作用。
【解决方案2】:

我发现以下对我有用:

  1. 编译 xkblayout-state 并将可执行文件移动到 PATH 中的目录
  2. get_locale改写为
import os
if os.name == 'posix':    
    from subprocess import check_output
elif os.name == 'nt':
    import win32api, win32con, win32process
    from ctypes import windll
    user32 = windll.user32

def get_locale(self):
    if os.name == 'nt':
        w = user32.GetForegroundWindow() 
        tid = user32.GetWindowThreadProcessId(w, 0) 
        return hex(user32.GetKeyboardLayout(tid))
    elif os.name == 'posix':
        return check_output(["xkblayout-state", "print", "%s"])

现在 get_locale 在 Ubuntu 中返回当前语言环境的漂亮字母代码(即 'us' 代表 qwerty)。

是的,每个操作系统的输出都不一样,我以后一定会重写这个函数。但是现在我已经实现了能够检测 Windows 和 Unix 机器上的键盘布局的目标。

另一种选择是使用xset 实用程序,如xset -q | grep -A 0 'LED' | cut -c59-67(有关详细信息,请参阅this question),但我认为这有点可疑,特别是如果您有两个以上的布局(就像我一样) - 滚动 LED 亮除默认布局外的所有布局。

【讨论】:

    猜你喜欢
    • 2011-02-28
    • 2017-12-04
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2020-07-29
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多