Есть ли способ узнать, КОГДА была смонтирована файловая система?

При запуске xmodmap он вызывает XChangeKeyboardMapping один раз для каждой изменяемой клавиши, что генерирует события MappingNotify. В некоторых конфигурациях (включая мою) этот всплеск событий приводит к зависанию системы на некоторое время.

У меня возникла эта проблема при создании пользовательской раскладки клавиатуры, и мой (уродливый) обходной путь заключался в написании программы, которая генерирует исходный код C, который будет применять все модификации, вызывая XChangeKeyboardMapping только один раз, тем самым вызывая MappingNotify только один раз.

Перед запуском этого кода вы должны применить свою карту, так как она получит текущую раскладку клавиатуры.

#include <stdlib.h>
#include <stdio.h>
#include <X11/XKBlib.h>

int main(void) {
    Display* display;
    int min, max, i, j, k;
    int keysyms_per_keycode;
    KeySym* keysyms;

    display = XOpenDisplay(NULL);
    XDisplayKeycodes(display, &min, &max);
    keysyms = XGetKeyboardMapping(display, min, max-min, &keysyms_per_keycode);
    printf("#include <stdlib.h>\n");
    printf("#include <stdio.h>\n");
    printf("#include <X11/XKBlib.h>\n\n");
    printf("int main(void) {\n");
    printf("    int first_keycode = %d;\n", min);
    printf("    int keysyms_per_keycode = %d;\n", keysyms_per_keycode);
    printf("    int num_of_keycodes = %d;\n", max-min);
    printf("    KeySym keysyms[%d] = {", ((max-min) * keysyms_per_keycode) + 1);
    for (k = 0, i = 0; i < (max-min); i++) {
        for (j = 0; j < keysyms_per_keycode; j++) {
            printf("%ld,", keysyms[k++]);
        }
    }
    printf("0};\n");
    printf("    Display* display = XOpenDisplay(NULL);\n");
    printf("    XChangeKeyboardMapping(display,first_keycode,keysyms_per_keycode,keysyms,num_of_keycodes);\n");
    printf("    XCloseDisplay(display);\n");
    printf("    return 0;\n");
    printf("}\n");

    XFree(keysyms);
    XCloseDisplay(display);

    return 0;
}

Скомпилируйте с помощью gcc -lX11.

1
09.01.2017, 19:40
1 ответ

Как прокомментировал Эндрю Хенле, на этот вопрос уже был дан ответ в этом вопросе superuser.com:

Определение времени последнего монтирования файловой системы

0
28.01.2020, 01:04

Теги

Похожие вопросы