LINUX.ORG.RU

XKB, смена группы


0

0

Есть /etc/xorg.conf и написанное в нём:

Option "XkbLayout" "us,ru(typewriter),gr(bare)" Option "XkbOptions" "grp:rctrl_toggle,ctrl:nocaps,grp_led:caps"

Скажите, можно ли менять группы не последовательно (us -> ru -> gr -> us), а в произвольном порядке? Может есть какая-то утилита, чтобы делать как-то так:

$ xkb_magic_tool --set-group 0 $ xkb_magic_tool --set-group 2

Да, вариант включить что-то там в "Центре управления" KDE не сработает - в качестве рабочего стола опенбокс. Как быть?


Понятно. Не придумал ничего лучше, чем написать этот xkb_magic_tool:

#include <stdio.h>
#include <stdlib.h>
#include <sysexits.h>

#include <X11/Xlib.h>
#include <X11/XKBlib.h>

int
main (int argc, char** argv)
{
    Display*     dpy;
    char*        error;
    int          ret_code = 0;
    unsigned int group;

    if (argc != 2) {
        fprintf (stderr, "Usage: %s group\n", argv [0]);
        return EX_USAGE;
    }

    group = (unsigned int) strtoul (argv [1], &error, 0);
    if (*error != '\0' || group > 3) {
        fprintf (stderr, "Invalid group %s\n", argv [1]);
        return EX_DATAERR;
    }

    dpy = XOpenDisplay (NULL);
    if (dpy == NULL) {
        fprintf (stderr, "Unable to open display\n");
        return EX_OSERR;
    }

    /* XkbQueryExtension */

    if (XkbLockGroup (dpy, XkbUseCoreKbd, group) != True) {
        fprintf (stderr, "Request wasn't sent\n");
        ret_code = EX_OSERR;
    }

    XCloseDisplay (dpy);

    return ret_code;
}

undet
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.