Как перманентно переназначить заглавные буквы на esc в X11?

9

Я хочу переназначить блокировку заглавных букв, чтобы скрыться в X11 (т.е. нажатие кнопки блокировки физической заглавной буквы будет интерпретироваться приложениями как esc, и поведение esc не изменится). Решение должно пережить перезапуск X . xmodmap и setxkbmap являются приемлемыми решениями (как и аналогичные программы). Я не хочу иметь дело с графическим интерфейсом, так как я хочу, чтобы решение было переносимым и частью моих точечных файлов. Если мне не хватает лучшего / более простого / более очевидного решения, пожалуйста, сообщите мне, хотя учтите, что я не использую DE (пробую i3wm).

До сих пор я пытался использовать xmodmap и setxkbmap с небольшим успехом.

Вот моя попытка использования xmodmap:

# ~/.xinitrc
xmodmap ~/.xmodmap

а также

# ~/.xmodmap
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Запуск $ xmodmap ~/.xmodmapиз командной строки работает и делает то, что я хочу. Проблема в том, что он сбрасывается каждый раз, когда x перезапускается. Вот где я ожидаю, что xinitrc войдет - разве он не должен загружаться каждый раз, когда x запускается и запускает команду xmodmap? Если команда работает, почему она ничего не делает при чтении из файла?

Я попробовал пару вещей с setxkbmap, ни одна из которых не сработала. Две попытки ниже были в файле в разное время.

# ~/.xinitrc
setxkbmap -option caps:esc     # attempt 1
setxkbmap -option esc:nocaps   # attempt 2

Ни одна из команд не сделала ничего заметного из командной строки, поэтому я предполагаю, что я неправильно понял команду. Мне нравится идея этого решения, потому что оно однострочное и не требует ничего в каком-то другом файле. Если бы это только сработало.

Является ли .xinitrc неправильным файлом для использования? Я знаю, что startx загружается из ~ / .xinitrc.

Я прошу, чтобы возможные решения содержали весь файл (ы), а не только одну строку (если в файле требуется более одного), чтобы я не испортил какой-либо промежуточный шаг. Например, если мне нужно что-то в .xinitrc и что-то в .xcapsrebind, пожалуйста, покажите и файлы, и все необходимое содержимое (я также могу обработать указание добавить что-то в конец, но если может потребоваться & или подобное, Скажите мне, пожалуйста).

ethanmad
источник
2
В .xinitrc:setxkbmap -option caps:escape
jasonwryan
1
Запуск xmodmapв .xinitrcдолжны работать. Это то, что я делаю. Может быть, отобразить что-то необычное, чтобы убедиться, что оно действительно работает, когда вы запускаете x? Кроме того, какой оконный менеджер / окружение рабочего стола вы используете? KDE периодически «исправляет» мои раскладки клавиатуры, не сообщая об этом. Возможно, проверьте настройки своего рабочего стола, чтобы убедиться, что xmodmapза вашей спиной ничего не работает .
Йеллоантфил
jasonwryan: пробовал это в обоих .xinitrc; не работал Это работает из командной строки! Так что есть начало. Я думаю, что Йелантфил прав ~/.xinitrc- не убежит. Я сейчас использую i3wm и не DE, хотя то же самое происходило в Пантеоне, когда я пытался. Насколько я могу судить, i3 не связывается с xinitrc и не загружает его самостоятельно (но я нуб, так что я знаю?).
Этанмад
Вы также можете попробовать включить его Option "XkbOptions" "caps:escape"в Xконфигурационный файл клавиатуры, например,/etc/X11/xorg.conf.d/10-keyboard.conf
don_crissti

Ответы:

5

РЕДАКТИРОВАТЬ: Как отметил полезный пользователь, мое первоначальное решение не выдержит обновления. Его решение в комментариях должно работать. Если вы предпочитаете менять местами Caps Lock и Escape, я бы рекомендовал добавить следующие команды из вашего .xinitrc или из конфигурации i3:

.xinitrc:

xmodmap -e "clear lock"
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
xmodmap -e "keycode 66 = Escape NoSymbol Escape"

Файл конфигурации i3 (обычно находится в .config / i3 / config или в .i3 / config)

# swap caps lock and escape
exec_always --no-startup-id xmodmap -e "clear lock"
exec_always --no-startup-id xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
exec_always --no-startup-id xmodmap -e "keycode 66 = Escape NoSymbol Escape"

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

После того, как у меня возникли аналогичные проблемы с некоторыми не загруженными DE ~/.xinitrc, я вообще избежал xmodmap, пошел /usr/share/X11/xkb/symbolsи изменил отображение символов key => напрямую.

Для этого я отредактировал файл конфигурации для моей клавиатуры, расположенный по адресу /usr/share/X11/xkb/symbols. Для большинства клавиатур это должен быть pcфайл.

После открытия файла я вручную переключил Escape и Caps_Lock для их соответствующих клавиш, результат показан ниже). Поскольку это влияет на то, как X отображает оборудование на ключ Symbol, оно должно работать независимо от того, используете ли вы GNOME, i3 или что-то подобное.

Фрагмент моего получившегося файла выглядит следующим образом:

default  partial alphanumeric_keys modifier_keys

xkb_symbols "pc105" {

    key <ESC>  {        [ Caps_Lock             ]       };

    // The extra key on many European keyboards:
    key <LSGT> {        [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {        [ backslash,    bar     ]       };
    key <SPCE> {        [        space          ]       };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {        [ BackSpace, BackSpace  ]       };

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

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

    key <LFSH> {        [ Shift_L               ]       };
    key <LCTL> {        [ Control_L             ]       };
    key <LWIN> {        [ Super_L               ]       };

    key <RTSH> {        [ Shift_R               ]       };
    key <RCTL> {        [ Control_R             ]       };
    key <RWIN> {        [ Super_R               ]       };
    key <MENU> {        [ Menu                  ]       };

Это сработало как обаяние для меня.

Просматривая связанные файлы, я обнаружил неоднократные упоминания и частичные реализации какого-либо типа флага, используемого для переключения определенных клавиш, таких как переключение Escape и Caps Lock. Я предполагаю, что это то, что используют Gnome Tweak Tool и setxkbmap; однако я не мог понять, как сохранить эти флаги с помощью оконного менеджера i3. Вышеуказанное решение должно работать нормально.

Надеюсь, это решит проблему!

capsloch
источник
в вашем конфиге i3:exec --no-startup-id setxkbmap -layout whatever -variant whatever -option caps:escape
quixotic
отметить изменения в системный ...xkb/symbols/pcфайл будет перезаписан в следующий раз xkeyboard-configили xkb-dataпакеты обновления.
quixotic
1

Две возможности:

1) .xinitrcне запускается - он используется xinit, startx и некоторыми другими методами для запуска сеансов X, но не поддерживается повсеместно - возможно, вы используете диспетчер отображения, который его не запускает. Добавление чего-то в .xinitrc, например, touch /tmp/xinitrc-was-runможет помочь определить, так ли это.

2) Xorg автоматически сбрасывает настройки по умолчанию, когда клиенты не подключены - если .xinitrc завершает работу до того, как оконный менеджер или что-либо еще запускается, изменения xmodmap или setxkbmap будут потеряны.

Если уже определена опция XKB, которую вы хотите использовать, вместо того, чтобы запускать программы для изменения настроек при каждом запуске Xorg, вы можете просто попросить Xorg запустить с правильными настройками. Например, чтобы включить клавиши Ctrl-Alt-Backspace для уничтожения моего сервера Xserver, я установил файл с именем /etc/X11/xorg.conf.d/90-zap.conf:

# This configuration snippet enables the Ctrl-Alt-Backspace server kill key
# 
# To use it, link or copy into /etc/X11/xorg.conf.d/
#
# Note that only the last XkbOptions setting seen for a device will be used,
# so to use multiple options, copy this file and add options into the Option
# string, such as "terminate:ctrl_alt_bksp,ctrl:swapcaps"

Section "InputClass"
    Identifier "keyboard zap by default"
    MatchIsKeyboard "on"

    Option "XKbOptions" "terminate:ctrl_alt_bksp"
EndSection

Вы можете прочитать больше об этом в документации X.Org на https://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html .

alanc
источник