无法用rasp

时间:2017-05-14 06:48:11

标签: c linux keyboard raspberry-pi xlib

我有两个使用键盘的线程。每个线程可能会更改键盘映射,另一个必须通过此更改通知。为了识别键盘语言的变化,我编写了以下函数:

char getKeyboardLang(Display *dpy)
{
    int baseEventCode, baseErrorCode, opcode;
    int groupCount;
    int major = XkbMajorVersion;
    int minor = XkbMinorVersion;


    XkbQueryExtension(dpy, &opcode, &baseEventCode, &baseErrorCode, &major,
            &minor);
    XkbDescRec* kbdDescPtr = XkbAllocKeyboard();

    if (kbdDescPtr == NULL) {
        printf("Failed to get keyboard description.\n");
        return -1;
    }

    kbdDescPtr->dpy = dpy;
    kbdDescPtr->device_spec = XkbUseCoreKbd;

    XkbGetControls(dpy, XkbAllControlsMask, kbdDescPtr);
    XkbGetNames(dpy, XkbSymbolsNameMask, kbdDescPtr);
    XkbGetNames(dpy, XkbGroupNamesMask, kbdDescPtr);

    if (kbdDescPtr->names == NULL) {
        printf("Failed to get keyboard description.\n");
        return -1;
    }

    // Get the group names.
    const Atom* tmpGroupSource = kbdDescPtr->names->groups;

    //printf("%c\n", XGetAtomName(dpy, kbdDescPtr->names->groups[0])[0]);
    return XGetAtomName(dpy, kbdDescPtr->names->groups[0])[0] ;
}

此函数在Ubuntu 14和16中完美运行。这意味着在命令setxkbmap us之后,此函数返回字符“E”(英语版),在命令setxkbmap ir之后返回“P” (波斯语)。但是在raspbian(Raspberry pi板的修改后的debian)中,即使执行了setxkbmap ir,该函数也会返回'E'!

在我运行setxkbmap ir时在Ubuntu中,键盘语言更改为波斯语,setxkbmap -query的输出为:

  

规则:evdev

     

型号:pc105

     

布局:ir

在raspbian中的奇怪之处在于,在setxkbmap ir之后,键盘的语言变为波斯语,但setxkbmap -query的输出表明它是英语我们:

  

规则:evdev

     

型号:pc105

     

布局:我们

这样我就不知道怎样才能在C程序中检测出raspbian中当前的键盘语言?

0 个答案:

没有答案