- Вопрос или проблема
- Сбор информации о клавиатуре
- Обновление отображения скан-кода на код клавиши
- Ответ или решение
- Использование setxkbmap
- Способы постоянного переключения
- 1. Использование dconf-editor
- 2. Конфигурация через .profile
- 3. Использование xmodmap
- 4. Изменение конфигурационного файла X
- 5. Использование localectl
- Заключение
Вопрос или проблема
Как я могу навсегда поменять функции клавиш Caps Lock и Esc в Saucy? Я могу использовать эту команду для временной замены (до перезагрузки):
/usr/bin/setxkbmap -option "caps:swapescape"
Я пытался добавить эту команду в Запуск приложений, но она, похоже, ничего не делает.
Другой способ сделать это — через dconf-editor
. Этот метод имеет несколько дополнительных шагов по сравнению с gnome-tweak-tool
, но полезен, если вы не хотите использовать зависимости инструмента настройки.
Это позволит вам использовать синтаксис caps:swapescape
и автоматически сделать изменение постоянным.
sudo apt-get install dconf-tools
На Ubuntu >20.04 вам нужно выполнить следующее – см. этот пост:
sudo apt install dconf-cli dconf-editor
После запуска dconf-editor
перейдите в org >> gnome >> desktop >> input-sources
Добавьте нужные вам параметры в xkb-options
. Строки опций заключены в одинарные кавычки и разделены запятыми. Будьте осторожны, чтобы не удалить скобки на концах.
Вы можете использовать этот метод, чтобы ввести большинство традиционных опций xkb, которые больше недоступны в Системные настройки >> Ввод текста. Исключение составляют настройки для переключения раскладок клавиатуры, которые в настоящее время не работают из-за ошибки.
Для списка опций и синтаксиса используйте man 7 xkeyboard-config
в терминале.
Еще одной распространенной опцией, которая может быть использована, является terminate:ctrl_alt_bksp
, чтобы разрешить ctrl+alt+backspace завершить сеанс X.
Решение, которое должно работать для большинства дистрибутивов linux:
setxkbmap -option caps:swapescape
Другие опции тоже возможны:
caps:none
для деактивацииcaps:escape
для добавления дополнительного эскапаcaps:super
для добавления дополнительной клавиши супер (windows).
Чтобы это работало при запуске, вы можете поместить это в ~/.profile
, так как это будет выполняться только после интерактивного входа.
Если переключение не сохраняется между входами (например, при приостановке компьютера), вы также можете создать файл .xinitrc
в вашем домашнем каталоге и поместить его туда. Linux mint 20 на ноутбуке работает безупречно с этой опцией.
Если вышеуказанное не сохраняется, используйте /etc/X11/xorg.conf.d/00-keyboard.conf (см. man xorg.conf
DESCRIPTION для всех доступных путей). Это должно работать с Bluetooth-клавиатурами, которые переподключаются после сна.
Section "InputClass"
MatchIsKeyboard "on"
Option "XkbOptions" "caps:escape"
EndSection
Смотрите man xkeyboard-config
Хорошо, я нашел способ сделать это с помощью gnome-tweak-tool.
Из терминала выполните
sudo apt-get install gnome-tweak-tool -y && gnome-tweak-tool
Вы можете найти опцию для замены Caps Lock и Esc в “Печать -> Поведение клавиши Caps Lock”.
Обновление: В Ubuntu 18.04 и 20.04 это можно найти в Клавиатура и мышь > Дополнительные параметры раскладки > Поведение Caps Lock (Спасибо за комментарий Adracus ниже)
Вы можете использовать xmodmap в терминале, чтобы поменять Caps Lock и Esc:
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock" #это заставит Esc работать как Caps Lock
xmodmap -e "keycode 66 = Escape NoSymbol Escape" #это заставит Caps Lock работать как Esc
Чтобы сохранить это изменение для каждой сессии, после того как вы выполнили предыдущие команды, создайте файл под названием .xmodmap
с новыми ключевыми карты, используя следующую команду:
xmodmap -pke > ~/.xmodmap
Затем создайте файл с именем .xinitrc
в вашем домашнем каталоге, содержащий следующую строку/команду:
xmodmap .xmodmap
Похожий на ответ @Radu ответ, но совместимый с 14.04 (см. также этот ответ).
xmodmap -e "remove Lock = Caps_Lock"
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
xmodmap -e "keycode 66 = Escape NoSymbol Escape"
xmodmap -pke > ~/.xmodmap
Если это не работает, замените:
xmodmap -e "remove Lock = Caps_Lock"
на:
xmodmap -e "clear Lock"
Перейдите к значку настроек в правом верхнем углу экрана и выполните следующее:
-
Нажмите Системные настройки → Раскладка клавиатуры → Опции… (в правом нижнем углу) → Поведение клавиши Caps Lock (четвертый сверху).
-
Затем прокрутите вниз и выберите Поменять местами ESC и Caps Lock.
Готово!
Ответ Раскладка клавиатуры с Переключить Escape и Capslock выше больше не актуален на Ubuntu 16.04 и позже (было ли это ранее? не знаю).
Чтобы избежать хлопот с разрешениями и т.д., просто переключитесь на пользователя root, прежде чем начинать выполнять следующие шаги, запустив su
в терминале и введя пароль root. Затем:
-
Запустите:
cd /etc/default/ vim keyboard
-
Там вы увидите строку:
XKBOPTIONS=""
Измените ее на:
XKBOPTIONS="caps:swapescape"
-
Выйдите из Vim с сохранением:
:wqa
-
Перезагрузите.
И это будет постоянным, обещаю. 🙂
Выполните эту команду один раз в терминале. dconf
должен уже быть установлен с gnome 3.
dconf write "/org/gnome/desktop/input-sources/xkb-options" "['caps:swapescape']"
Для Ubuntu 18.04 и Gnome 3.30 это работает для меня:
gsettings set org.gnome.desktop.input-sources xkb-options "['caps:swapescape']"
Я создал инструмент на C специально для этой цели, который решает многие проблемы с решением xcape/xmodmap:
Он делает немного больше, так как также превращает CAPSLOCK как Esc и CTRL.
Я опаздываю с ответом, но обычный способ поменять местами Esc и Ctrl — это следующие строки в файле ~/.Xmodmap
:
clear Lock
keysym Caps_Lock = Escape
keysym Escape = Caps_Lock
add Lock = Caps_Lock
Это должно работать со всеми рабочими средами (KDE, Gnome) на большинстве распространенных дистрибутивов (семья Ubuntu и Debian, семья Fedora и RH).
Это можно сделать через настройку системы “Раскладка клавиатуры”. Нажмите “опции” для раскладки, которую вы используете, затем в разделе “Поведение клавиши Caps Lock” выберите “менять местами Escape и Capslock”.
Предполагая, что вы используете раскладку us с моделью и вариантом по умолчанию, вы можете использовать эту команду:
sudo localectl --no-convert set-x11-keymap us "" "" "caps:swapescape"
В отличие от ~/.Xmodmap
, который применяется после входа, эта команда изменяет раскладку системы по умолчанию и применяется к экрану входа, что полезно, если вы используете альтернативную раскладку, такую как dvorak.
Для получения дополнительной информации/примеров команды смотрите эту статью в вики arch: https://wiki.archlinux.org/title/Xorg/Keyboard_configuration#Using_localectl
Если кто-то ищет эквивалент KUbuntu, он находится по адресу:
Системные настройки -> Устройства ввода -> Клавиатура -> Вкладка “Дополнительно” -> Поведение Caps Lock -> Сделать Caps Lock дополнительным Esc
Примечание: Это не меняет местами, только отображает caps lock на esc. (Это было достаточно для моего использования vim.)
Для ubuntu 16:04 (с окружением i3):
создайте файл ~/.xsessionrc с содержимым
xmodmap -e "clear lock" #деактивировать переключатель caps lock
xmodmap -e "keysym Caps_Lock = Escape" #установить caps_lock как escape
В графическом интерфейсе KDE это можно сделать через Раскладку клавиатуры в Системных настройках. Нажмите “Устройства ввода”. В верхнем левом углу нажмите Клавиатура. Затем нажмите вкладку “Дополнительно”. В разделе “Поведение клавиши Caps Lock” выберите “менять местами Escape и Capslock”.
Для Ubuntu 18.04:
Создайте файл ~/.xmodmaprc
xmodmap -e "clear lock"
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
xmodmap -e "keycode 66 = Escape NoSymbol Escape"
Подключите этот файл, чтобы привязать ключи к вашей текущей сессии:
$ . "$HOME/.xmodmaprc"
Добавьте эту команду в ~/.bashrc, чтобы ключи были связаны каждый раз, когда вы входите в систему.
Этот ответ похож на ответ Гилли, но с маленькой буквой “l” в “clear lock”.
Другой подход — изменить отображение от скан-кодов к кодам клавиш с помощью udev. Мне нужно было это более низкоуровневое изменение, чтобы заставить мой capslock-escape работать в VS Code. Этот ответ основан на https://wiki.archlinux.org/title/Map_scancodes_to_keycodes
Сбор информации о клавиатуре
Сначала определите устройство клавиатуры. Я использовал cat /proc/bus/input/devices
, который выводит:
I: Bus=0011 Vendor=0001 Product=0001 Version=ab83
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input3
U: Uniq=
H: Handlers=sysrq kbd event3 leds
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fbfffffffffffffe
B: MSC=10
B: LED=7
Обратите внимание на eventX
здесь. Затем мы можем получить модальный идентификатор устройства с помощью cat /sys/class/input/event3/device/modalias
:
input:b0011v0001p0001eAB83-e0,1,4,11,14,k71,72,73,74,75,76,77,79,7A,7B,7C,7D,7E,7F,80,8C,8E,8F,9B,9C,9D,9E,9F,A3,A4,A5,A6,AC,AD,B7,B8,B9,D9,E2,ram4,l0,1,2,sfw
Позже мы будем использовать идентификатор input:b0011v0001p0001eAB83
.
Теперь мы хотим выяснить, какой скан-код мы хотим сопоставить с каким кодом клавиши. Мой пример будет отображать capslock на escape (скан-код может зависеть от аппаратного обеспечения клавиатуры). Запустите evtest /dev/input/event3
, а затем нажмите клавишу (например, capslock):
Event: time 1732003836.156077, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3a
Event: time 1732003836.156077, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0
Event: time 1732003836.156077, -------------- SYN_REPORT ------------
Мы записываем значение MSC_SCAN
, в этом случае скан-код равен 3a
.
В моем примере целевой код клавиши — это esc
, здесь есть список других кодов клавиш.
Обновление отображения скан-кода на код клавиши
Имеется файл отображения по умолчанию в /usr/lib/udev/hwdb.d/60-keyboard.hwdb
. Создайте новый файл с более высоким номером, например /usr/lib/udev/hwdb.d/70-keyboard-custom.hwdb
:
# evdev:<modalias identifier>*
# KEYBOARD_KEY_<scancode>=<target keycode>
evdev:input:b0011v0001p0001eAB83*
KEYBOARD_KEY_3a=esc
После сохранения файла выполните systemd-hwdb update
и udevadm trigger
, чтобы пересобрать и перезагрузить индекс аппаратной базы данных.
Теперь, когда нажатие capslock дает скан-код 3a, udev преобразует его в код клавиши esc
. Фактически, у нас теперь есть две клавиши escape. Чтобы добиться обратного сопоставления (escape на capslock), выполните те же шаги, чтобы определить скан-код escape и сопоставить его с кодом клавиши capslock
.
В Linux Mint 19.3 из меню:
Параметры
Клавиатура
Раскладки
Опции
Поведение Caps Lock
Поменять местами ESC и Caps Lock
Ответ или решение
Для того чтобы навсегда поменять местами функции клавиш Caps Lock и Esc на системе, подобной Ubuntu (в том числе и Saucy), существуют несколько методов. Рассмотрим их подробно.
Использование setxkbmap
Первый шаг – использование команды, которая временно переключает клавиши:
/usr/bin/setxkbmap -option "caps:swapescape"
Однако данный метод не сохраняет изменения после перезагрузки системы. Для того чтобы изменения были постоянными, нужно применить другие подходы.
Способы постоянного переключения
1. Использование dconf-editor
Если вы предпочитаете изменить системные настройки через графический интерфейс, вы можете воспользоваться dconf-editor
, который можно установить с помощью команды:
sudo apt-get install dconf-tools
Для систем на базе Ubuntu версии 20.04 и выше выполните:
sudo apt install dconf-cli dconf-editor
После установки запустите dconf-editor
и выполните следующие шаги:
- Перейдите в путь:
org > gnome > desktop > input-sources
. - Найдите опцию
xkb-options
и добавьте строку'caps:swapescape'
, убедившись, что вы не удаляете квадратные скобки в начале и в конце.
2. Конфигурация через .profile
Вы можете добавить команду setxkbmap
в файл ~/.profile
, чтобы она выполнялась при каждом входе в систему:
echo "/usr/bin/setxkbmap -option 'caps:swapescape'" >> ~/.profile
3. Использование xmodmap
Еще один способ реализовать это состоит в использовании xmodmap
:
- Выполните следующие команды в терминале:
xmodmap -e "clear Lock" xmodmap -e "keysym Caps_Lock = Escape" xmodmap -e "keysym Escape = Caps_Lock"
- Создайте файл
~/.xmodmap
с этими командами:xmodmap -pke > ~/.xmodmap
- Обновите файл
~/.xinitrc
, добавив строку:echo "xmodmap .xmodmap" >> ~/.xinitrc
4. Изменение конфигурационного файла X
Для постоянного изменения вы можете редактировать файл конфигурации X:
- Создайте файл, если он не существует:
/etc/X11/xorg.conf.d/00-keyboard.conf
. - Добавьте следующий код:
Section "InputClass" MatchIsKeyboard "on" Option "XkbOptions" "caps:swapescape" EndSection
5. Использование localectl
Если вы хотите изменить настройки на уровне системы, вы можете использовать localectl
:
sudo localectl set-x11-keymap us "" "" "caps:swapescape"
Эта команда применит изменения даже на экране входа в систему.
Заключение
Выбор подходящего способа зависит от ваших предпочтений и потребностей. Можете пользоваться как графическими утилитами, так и командной строкой. Главное – убедиться, что изменения сохраняются при перезагрузке системы. Используя описанные методы, вы сможете легко и эффективно переключить функции клавиш Caps Lock и Esc на вашей системе.