Как сделать клавишу Caps Lock третьей клавишей Shift?

19

Как сделать так, чтобы клавиша Caps Lock работала так же, как другая клавиша Shift?

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

Раскладка клавиатуры / Caps Поведение ключа блокировки не поможет, я не понимаю, как переназначить его в CCSM.

Я сейчас использую британскую клавиатуру, но я научился печатать на американской клавиатуре, меньшая левая клавиша Shift - DRIVING ME NUTS.

Том Броссман
источник
1
@ Дэвид, твой друг ОП специально сказал, xmodmapчто не работает.
Странник
1
В xkb это как-то связано с картами совместимости, которые переводят определенные комбинации клавиш в действия, а не в символы. Это займет больше времени на исследования и тестирование, чем у меня есть на данный момент. Если я получу шанс, я углублюсь в это дальше, если не, возможно, эта хлебная крошка приведет кого-то еще в правильном направлении.
Старейшина Гик

Ответы:

14

Расширяя ответ @ Zacharee1:

сделать резервную копию с cp /usr/share/X11/xkb/symbols/pc ~/pckeybak

затем отредактируйте с помощью gksu gedit /usr/share/X11/xkb/symbols/pcили вашим любимым редактором.

Найдите строку (22), которая говорит:

key <CAPS> { [ Caps_Lock ] };

и изменить его на

key <CAPS> { [ Shift_L ] };

и строка (36), которая говорит:

modifier_map Lock { Caps_Lock };

и изменить его на

//modifier_map Lock { Caps_Lock }; (который должен закомментировать это фактически отключая блокировку)

Тестирование показывает, что Num Lockвсе еще работает, как ожидалось. Дальнейшее тестирование показывает, что световые индикаторы клавиатуры кажутся немного дислексичными в 16.04 даже на неизмененной системе. Индикатор Scroll Lock включен при входе в систему, но Scroll Lock выключен, и Num Lock выключен, но Num Lock включен. Касание левой Ctrlклавиши, кажется, решает эту проблему, и я не уверен, связано ли это с моим использованием KVM-переключателя (что возможно)

Примечание. Дальнейшее тестирование показывает, что индикатор NumLock является слабым даже без KVM-переключателя, и его необходимо дважды нажать, чтобы вернуться в синхронизацию с NumLock. Если вы всегда оставляете его включенным, вы можете игнорировать индикатор или, если он вам мешает, вы можете нажать на него. дважды, чтобы вернуть его в синхронизацию. Почему это происходит, вероятно, является основой для нового вопроса ...

Другим простым решением вашей исходной проблемы было бы просто получить недорогую клавиатуру США и использовать раскладку клавиатуры США.

Источники: @ Zacharee1 ответ и анализ /usr/share/X11/xkb/symbols/pcи проб и ошибок тестирования

Старейшина Гик
источник
Таким образом, вы должны были отключить эту строку 36 вещь? Shift_LОдного изменения было достаточно, чтобы полностью отключить capslock для меня.
Странник
@ Zacharee1 Я подумал, что это может быть причиной воздействия на Numlock, которое Том Броссман упомянул в комментарии к вашему сообщению и вынул его только по этой причине.
Старейшина Гик
Хм. Это может быть так. Я смотрю, смогу ли я заставить Занну протестировать виртуальную машину, так как у нее есть британский совет.
Странник
@ Zacharee1 Это было бы здорово, поскольку у меня нет этого оборудования для тестирования, и я часто полагаюсь на логику в тех случаях, когда полное тестирование невозможно.
Старейшина Гик
Это наконец-то сделано, протестировано и работает (пока, по крайней мере). Странно, что индикатор Num Lock на моей клавиатуре не горит, но дополнительные цифровые клавиши включены по умолчанию, когда я вхожу в систему, и это то, что я хотел. Благодарность!
Том Броссман
10

Добиться этого можно, адаптировав Как изменить ключ CapsLock для получения «а»? (например).

Удалите Lockмодификатор (= Caps Lock) из Caps Lockключа и объявите, что этот ключ отправляет Shift_Lkeyym.

remove Lock = Caps_Lock
keysym Caps_Lock = Shift_L

Кроме того, вы можете удалить Lockмодификатор и добавить Shiftмодификатор.

remove Lock = Caps_Lock
add Shift = Caps_Lock

В любом случае, эти строки идут в файл ~/.Xmodmap. Проверьте, загрузив его xmodmap ~/.Xmodmap; файл читается автоматически, когда вы входите в среду по умолчанию (или, по крайней мере, это было в дни Gnome).

Жиль "ТАК - перестань быть злым"
источник
2
Отлично, это сработало. Я сделал новый пустой документ в моем домашнем каталоге с именем .Xmodmap и вставил в него ваш первый пример. Затем я набрал 'xmodmap ~ / .Xmodmap' в терминале, чтобы он сразу вступил в силу. Оба объяснены в связанном ответе. Спасибо.
Том Броссман
Второй набор команд у меня не работает, но первый работает отлично. Нажатие Caps Lock даже не включает подсветку клавиатуры, поэтому она даже не запускает мою скрытую OCD.
Вальдир Леонсио
Хороший ответ, Жиль! Просто чтобы добавить к вашему ответу, это также можно сделать одной единственной командой: xmodmap -e "clear Lock" -e "keysym Caps_Lock = Shift_L" и отменить ее setxkbmap -option , которая не записывает в ~/.Xmodmapфайл, но может использоваться при необходимости и добавляться в Startup Applications. Очень хороший ответ!
Сергей Колодяжный
7

Не обращая внимания на мои предыдущие попытки ответить неудачно, я обнаружил что-то, что полностью превращает капслок в левое смещение. Не переключаться, я думаю, что это постоянно, и это довольно просто.

Во-первых, я бы порекомендовал сделать резервную копию, прежде чем я представлю, как ее изменить.

Бегать sudo cp /usr/share/X11/xkb/symbols/pc ~/pckeybak

Теперь, когда есть резервная копия, давайте перейдем к редактированию.

Используйте ваш любимый текстовый редактор для редактирования этого файла как root:

/usr/share/X11/xkb/symbols/pc

Найдите сегмент, который выглядит следующим образом (он для меня ближе к вершине, строка 22):

key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
key <RTRN> {    [ Return                ]   };

key <CAPS> {    [ Caps_lock             ]   };
key <NMLK> {    [ Num_Lock              ]   };

редактировать

key <CAPS>  {   [ Caps_lock             ]   };

быть

key <CAPS> {    [ Shift_L, Caps_Lock    ]   };

вместо. ( Caps_LockПосле Shift_L,может быть ненужным.)

Перезапустите менеджер дисплеев (обычно sudo service lightdm restart), и колпачок теперь будет сдвигаться влево. ( Примечание: моя тестовая машина использует GNOME, поэтому мне пришлось перезагрузить компьютер gdm. Однако, это вызвало странное мерцание в резервном TTY и gdmникогда не перезапускалось. Мне пришлось полностью перезагрузиться.)

Этот я действительно смог протестировать и могу подтвердить, что он работает.

Адаптировано из Постоянного xmodmap в Ubuntu 13.04

Странник
источник
Спасибо, но это мешает Num Lock, который я оставляю на постоянной основе. В моем раннем устранении неполадок изменение Caps_lock> Shift_L в /usr/share/X11/xkb/symbols/capslockтакже мешало Num Lock. В 16.04 есть что-то другое, например, индикатор Num Lock раньше горел при загрузке, но теперь он гаснет при входе в LightDM. Когда я тестирую ваше решение, оно изменяет Caps Lock на Shift, но при первом нажатии Caps Lock Num Lock отключается, и мне приходится нажимать Num Lock ДВАЖДЫ, чтобы снова включить его (только в первый раз). Bizarre. Очень ценю помощь до сих пор, хотя.
Том Броссман,
Возможно, мне нужно задать новый вопрос "Как предотвратить повторное вмешательство Caps Lock с Num Lock 16.04?" но я бы хотел найти здесь причину. Либо это, либо пришло время открыть клавиатуру и внести в нее некоторые физические изменения ...
Том Броссман,
Это странно. Работает ли numlock снова, если вы запускаете xkbset nullify lock?
Странник
@ TomBrossman Я не знаю, изменит ли это что-нибудь для вас, но это работает для меня. Вместо того, чтобы просто Shift_Lвставить Shift_L, Caps_Lock. Убедитесь, что скобки совпадают.
Странник
1
@ TomBrossman Мне нравится использовать sudo, если это не опасно, просто чтобы быть уверенным: с. Когда я редактировал файл, буква L для смены была заглавной, как и заглавные буквы. Weird. NumLock тоже странная вещь, так как она отлично работает для меня. Все это странно: p
TheWanderer
3

За 14.04

Однострочник:

xmodmap -e 'keycode 66=Shift_L'

НО , в неожиданном случае 66неправильный код клавиши, сначала запустите xevв консоли и нажмите CapsLock. Тогда вы увидите что-то вроде:

KeyPress event, serial 27, synthetic NO, window 0x1200001,
    root 0x101, subw 0x0, time 6417361, (340,373), root:(342,393),
    state 0x0, keycode XX (keysym 0x0207, Caps_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

Правильный код ключа указан в XX.

Старейшина Гик
источник
1
Посмотрите на сообщение баунти: Xmodmap trick no longer works and xkb handles this now..
Странник
Боже мой! это из-за 16.04? Работает на моем 14.04. Комментарий к награде, похоже, не указан.
Я не сделал награду, поэтому я действительно не знаю.
Странник
Извините, это для новой версии 16.04. Левая или правая клавиша Shift будет в порядке, я выбрал левую для вопроса, потому что она смежна и xevвидит их как разные клавиши.
Том Броссман