10

Прежде всего, извините за мое незнание X и XKB; Я пытался собрать решение в надежде достичь того, чего я хочу, не требуя его детального понимания.

Я пытаюсь создать карту клавиатуры XKB в Ubuntu 12.04, которая позволяет мне указать, какая из двух клавиш Shift является модификатором Level2. В частности, клавиша 4 должна генерировать только $ когда удерживается правое смещение, а не левая.

Мое чтение до сих пор:

Я попытался определить пользовательский тип, а затем явно обратиться к нему в карте символов:

/usr/share/X11/xkb/types/mbfisher:

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher:

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

Затем я выбираю карту с помощью Ubuntu Keyboard Layout GUI.

Это, очевидно, отключает буквенно-цифровую клавиатуру, кроме клавиши 4 , но знак доллара все еще можно набрать любой клавишей Shift.

Я собираюсь написать огромный вопрос с большим количеством бесполезной информации, поэтому я остановлюсь здесь; пожалуйста, спросите обо всем, что я пропустил.

Есть идеи?

2 ответа2

2

Я не знаю, если это решение, которое вы хотите, но одна возможность отключить левую клавишу Shift будет использовать xmodmap. Создать файл ~/.Xmodmap с содержимым

clear shift
add shift = Shift_R

и запустите xmodmap ~/.Xmodmap .


Смотрите комментарии / чат:

Вы можете столкнуться с проблемами, если в xkbmap будут внесены какие-то другие изменения, сделанные какой-либо другой программой, поэтому может потребоваться сброс к xkbmap по умолчанию с помощью чего-то вроде setxkbmap us .

Если вы хотите, чтобы некоторые клавиши реагировали только на одну клавишу Shift, вы можете получить текущую раскладку клавиатуры с помощью xmodmap -pke > .Xmodmap это дает вам .Xmodmap со списком всех ваших ключей в виде keycode XX = functions . В этом назначении каждый код клавиши может иметь несколько функций с правой стороны. Каждому соответствует свой модификатор + этот ключ. Вы можете затем вставить команду clear + add сверху и добавить что-то вроде add mod5 = Shift_L . Правая клавиша Shift будет соответствовать mod2, а левая - mod5. Вы можете затем перейти и переместить функции mod2 клавиш, которые вы хотите вызвать, с помощью левой клавиши Shift в mod5, просто вставив NoSymbol и пробелы, пока не достигнете правого столбца (keycode 57 = n N -> keycode 57 = n NoSymbol NoSymbol NoSymbol N).

2

Вот что наконец сработало! Я использовал xmodmap и ~/.Xmodmap а не конфигурация xkb.

~/.Xmodmap:

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

2 прокомментированные строки (начиная с !) показать заголовки столбцов до и после моих изменений. Это позволило мне указать столбец 2 как Shift_L и столбец 3 как Shift_R, так как я сопоставил shift_R как Mode_switch.

Изменения вносятся путем запуска:

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap us устанавливает карту США по умолчанию, чтобы вы работали с чистого листа, а xmodmap добавляет к ней пользовательские изменения.

Когда реализовано ! Символы @ , # , $ и % можно набирать только правой клавишей Shift, а символы ^ , & , * , ( и ) можно вводить только левой клавишей Shift.

Теперь я могу продолжить, сопоставив все клавиши на левой стороне клавиатуры, которые будут изменены только правой клавишей Shift (то есть буквенные символы и их модификации в верхнем регистре), и наоборот; это решение означает, что мне нужно только переназначить левую сторону.

Другие полезные ссылки, найденные по пути:

Большое спасибо @Trudbert за то, что он дал мне большую часть пути к ответу!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .