2

Я пытаюсь переназначить Caps Lock на Control. Перед тем, как что-то изменить, xev сообщает следующее для пресс-релиза Caps Lock:

KeyPress event, serial 73, synthetic NO, window 0x2600001,
    root 0x290, subw 0x0, time 50243576, (82,130), root:(1365,612),
    state 0x0, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

PropertyNotify event, serial 73, synthetic NO, window 0x2600001,
    atom 0x17c (XKLAVIER_STATE), time 50243577, state PropertyNewValue

PropertyNotify event, serial 73, synthetic NO, window 0x2600001,
    atom 0x17c (XKLAVIER_STATE), time 50243579, state PropertyNewValue

KeyRelease event, serial 73, synthetic NO, window 0x2600001,
    root 0x290, subw 0x0, time 50243680, (82,130), root:(1365,612),
    state 0x2, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Я запускаю следующее для переназначения:

xmodmap -e 'remove Lock = Caps_Lock'
xmodmap -e 'keysym Caps_Lock = Control_L'
xmodmap -e 'add Lock = Caps_Lock'
xmodmap -e 'clear Lock'
xmodmap -e 'keycode 66 = Control_L'

Теперь для прессы / релиза по Caps Lock xev сообщает:

KeyPress event, serial 80, synthetic NO, window 0x2600001,
    root 0x290, subw 0x0, time 50785441, (11,140), root:(1294,622),
    state 0x0, keycode 66 (keysym 0xffe3, Control_L), same_screen YES,
    XKeysymToKeycode returns keycode: 37
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 80, synthetic NO, window 0x2600001,
    root 0x290, subw 0x0, time 50785521, (11,140), root:(1294,622),
    state 0x0, keycode 66 (keysym 0xffe3, Control_L), same_screen YES,
    XKeysymToKeycode returns keycode: 37
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Это кажется нормальным, но ключ все еще функционирует как Caps Lock во всех других приложениях. Я заметил, что когда я нажимаю «настоящую» левую управляющую клавишу, XKeysymToKeycode отсутствует, но я понятия не имею, что это означает.

Вот события для реального нажатия / отпускания левой клавиши Ctrl:

KeyPress event, serial 37, synthetic NO, window 0x2600001,
    root 0x290, subw 0x0, time 57111640, (176,176), root:(188,272),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x2600001,
    root 0x290, subw 0x0, time 57111736, (176,176), root:(188,272),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

0