То, каковы точные шаги к переотображению японцев, включает японскую клавиатуру в xkb?

Я пытаюсь повторно отобразить ключи, которые, как находят на японской клавиатуре, были Высоким звуком, Супер, Возвратом и Сдвигом. Вот хорошее описание вида клавиатуры, которую я использую. (Я на самом деле использую японскую клавиатуру Filco Majestouch 2 TKL). Идея состоит в том, чтобы иметь совершенно нормальную английскую клавиатуру, где дополнительные ключи под ползунками повторно отображаются на Высоком звуке, Возврате, и т.д. Я делаю это использование xkb в соответствии с Ubuntu.

Нижний ряд клавиатуры похож на это:

<LCTL> <LWIN> <LALT> <MUHE> <SPCE> <HENK> <HKTG> <RALT> <MENU> <RCTL>

Я хотел бы, чтобы это было похоже на это:

<LCTL> <LALT> <LWIN> <LALT> <SPCE> <RALT> <RTRN> <MENU> <RALT> <RCTL>

Переотображение LWIN, LALT, RALT, и MENU обработанный, но переотображение MUHE, HENK, и HKTG не имеет.

Вдобавок к этому я пытался повторно отобразиться AB11 кому: Shift_R и AE13 кому: BackSpace. Результат - это AB11 ничего не делает точно так же, как MUHE, HENK, и HKTG, но AE13 действительно становился повторно отображенным на BackSpace и работы, как предназначено.

До сих пор я использовал basic коды клавиши определили (как я понимаю) в /usr/share/X11/xkb/keycodes/xfree86. Из-за этого, файл символов моей раскладки клавиатуры, запущенный как это:

default
xkb_symbols "basic" {

С тех пор MUHE, HENK, HKTG, AB11, и AE13 определяются в /usr/share/X11/xkb/keycodes/evdev, Я предположил, что должен изменить это на evdev, но это не помогло:

default
xkb_symbols "evdev" {

Есть ли что-либо еще, что я должен сделать для использования MUHE и т.д.? Я должен удостовериться, что некоторая другая часть входной системы использует evdev? Я не уверен, как сделать это. Я нахожусь на 32-разрядной Ubuntu 14.04, но то же поведение происходит на 18,04 64-разрядных.

Вот полный код, который я использую для переотображения тех ключей (я опустил несвязанные части расположения):

default
xkb_symbols "evdev" {
    // Swap Caps Lock and Escape.
    key <CAPS> {        [       Escape  ]       };
    // key <ESC>  {        [     Caps_Lock    ]       };
    key <ESC> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };

    key <LWIN> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Alt_L ]
    };

    key <LALT> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Super_L ]
    };

    key <MUHE> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Alt_L ]
    };
    // placeholder for <SPCE>

    key <HENK> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Alt_R ]
    };

    key <HKTG> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Return ]
    };

    key <RALT> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Menu ]
    };

    key <MENU> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Alt_R ]
    };

    // LSGT is the extra key in the European layout that is found between the
    // left Shift and Z.
    key <LSGT> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Super_L ]
    };


// Japanese keyboard bottom row:
// <LCTL> <LWIN> <LALT> <MUHE> <SPCE> <HENK> <HKTG> <RALT> <MENU> <RCTL>
// Desired bottom row:
// <LCTL> <LALT> <LWIN> <LALT> <SPCE> <RALT> <RTRN> <MENU> <RALT> <RCTL>

// Other extra Japanese keys:

// Between / and right shift: <AB11>
    key <AB11> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        Shift_R ]
    };

// Between = and Backspace: <AE13>
    key <AE13> {
        type[Group1]="ONE_LEVEL",
        symbols[Group1]=[        BackSpace ]
    };

// Modifier numbers:
// Mod1 = Alt
// Mod2 = Num_Lock
// Mod4 = Super
// Mod5 = ISO Level3 Shift
// Shift = Shift

// <AB11> is Shift
    modifier_map Shift { Shift_L, Shift_R };
// <LALT> is Super, <LSGT> is Super too
    modifier_map Mod4 { Super_L, Super_R };
// <MENU> is Alt, <LWIN> is Alt too
    modifier_map Mod1 { Alt_L, Alt_R };
// we map a bunch of keys to ISO Level3 Shift
    modifier_map Mod5 { ISO_Level3_Shift };
};

Править: оказывается кодом, который я отправил выше, (главным образом?) корректный, однако некоторый механизм в xkb, который предназначен для включения "мультимедийных" ключей и других "необычных" ключей, ударяет отображения выше. Кнопки нижнего ряда работают теперь, но AB11 ключ все еще не работает как дополнительное Shift ключ. Однако, это - некоторый прогресс.

Вот описание этого "inet", ударяющего случай. Упоминающие ниже шоу, что это происходит в моем случае, также:

$ setxkbmap ef -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+ef+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

Отметьте бит, который говорит: xkb_symbols { include "pc+ef+inet(evdev)" };. Это означает, что сначала применяет нормальное pc расположение (американский QWERTY), затем безотносительно расположения я выбрал (здесь названный ef, хотя я не назвал его, что, я предполагаю, что это - просто имя переменной, это снова используется для всех разметок), и затем inet(evdev) применяется. Внутри symbols/inet, можно найти этот блок:

xkb_symbols "evdev" {
    key <HKTG>   {      [ Hiragana_Katakana     ]       };
    key <HENK>   {      [ Henkan                ]       };
    key <MUHE>   {      [ Muhenkan              ]       };

и по-видимому это применяется, потому что моя клавиатура "inet клавиатура"; в rules/base можно найти это:

! $inetkbds = acer_c300 acer_ferrari4k acer_laptop \
...
              pc105 \
...

а также далее вниз этот блок:

  $inetkbds     =       +inet(%m)

Таким образом, теперь вопрос состоит в том, как заставить мою клавиатуру не рассматриваться как inet клавиатура?

Или альтернативно, это могло быть тем, что вызывает его? Внутри rules/evdev, существует этот блок:

! model     =   symbols
  $evdevkbds    =   +inet(evdev)+inet(%m)
  applealu_jis  =   +inet(evdev)+macintosh_vndr/jp(alujiskeys)
  *             =   +inet(evdev)

Последняя строка была бы по-видимому средний что, какую клавиатуру Вы имеете при базировании раскладки клавиатуры на evdev путем выполнения xkb_symbols "evdev" {, Вы всегда добираетесь inet(evdev) добавленный в конце, переопределяя Ваши символы.

Я не знаю, что xkb достаточно хорошо знает, который имеет место, таким образом, некоторое руководство значительно ценилось бы.

Я все еще не знаю, почему я не могу повторно отобразиться AB11. Что-то все еще отсутствует? Я определяю AB11 как Shift_R и затем дайте его Shift способность через modifier_map Shift { Shift_L, Shift_R };. Все же в xev, когда я нажимаю эту кнопку, это действительно становится распознанным как Shift_R, но состояние тихо 0x0 (никакие модификаторы), а не 0x1 (Сдвиг), которым это должно быть:

KeyPress event, serial 38, synthetic NO, window 0xdc00001,
    root 0x1ef, subw 0x0, time 1701230053, (441,592), root:(444,729),
    state 0x0, keycode 97 (keysym 0xffe2, Shift_R), same_screen YES,
    XKeysymToKeycode returns keycode: 62
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

Кажется, нет ничего переопределяющего этот ключ (или любой другой ключ с тем же кодом клавиши) в inet(evdev).

0
задан 23 September 2018 в 21:24

1 ответ

Спасибо за указание на меня к правильному направлению. Наконец после лужения xkb в течение половины дня я могу заставить его работать. Это - моя конфигурация, корректируйтесь согласно своей потребности:

Это в в символах/нас:

xkb_symbols, "основной" {

    ...
    key <AE13>   {[ BackSpace, BackSpace  ]};
    key <AB11>   {[ backslash,    bar     ]};
    key <BKSL>   {[ Return]};

};

Это находится в symbols/inet:

key <HKTG>   {      [ space         ]       };
key <HENK>   {      [ space         ]       };
key <MUHE>   {      [ space         ]       };

С наилучшими пожеланиями, победитель

0
ответ дан 27 October 2019 в 10:14

Другие вопросы по тегам:

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