Можно ли переназначить всю систему клавиш CapsLock так, чтобы при нажатии кнопки CapsLock она действовала как клавиша выхода, а при нажатии другой клавиши она действовала как клавиша управления?
Можно ли переназначить всю систему клавиш CapsLock так, чтобы при нажатии кнопки CapsLock она действовала как клавиша выхода, а при нажатии другой клавиши она действовала как клавиша управления?
Ответы:
Я нашел очень хорошее решение под названием xcape . Из README:
xcape работает как демон и перехватывает управляющий ключ. Если клавиша управления нажата и отпущена сама по себе, она генерирует событие клавиши Escape.
Это имеет больше смысла, если вы переназначили свою клавишу Caps Lock на Control. Будущие версии этой программы могут сделать это для вас, но сейчас это то, что вы должны сделать сами.
Я сопоставил Caps с Escape, чтобы мне было удобнее печатать на Vim. Я использовал xmodmap
и вставил это ~/.Xmodmap
.
clear Lock
keycode 0x42 = Escape
Для применения: xmodmap ~/.Xmodmap
. Вы можете поместить это в файл, такой как ~ / .bash_profile (я вставил в ~ / .xinitrc, потому что я не использую менеджер входа в систему.
Чтобы отобразить CapsLock + [другой ключ], рассмотрите возможность использования xbindkeys
.
Единственное решение Linux для переназначения ключей в масштабе всей системы - написать простое правило udev. Он не будет зависеть от X, будет работать на любом терминале или приложении и переносится между любыми недавними установками Linux, просто копируя два файла.
Вам нужно написать 2 файла: один, содержащий правило udev, которое сообщает ядру о необходимости переназначения ключей, и другой, содержащий фактические сопоставления, которые вам нужны.
Используя этот метод, я переназначил всю свою клавиатуру, может быть, код полезен для вдохновения http://git.adirat.com/carpalx-keyboard
Специально для этой цели я создал инструмент на C, который решает многие проблемы с решением xcape / xmodmap :
Я столкнулся с другим вопросом в AskUbuntu, на который был дан хороший ответ , но мне пришлось немного изменить его, чтобы он работал на моих системах.
В соответствии с комментариями Луи и Сергея, я придумал это решение, которое работает для меня на Ubuntu 16.04 (Xenial), и я перенесу его с собой в другие системы Linux, которые я использую.
Я установил xcape и поместил следующие строки кода в мой .profile
файл в моем домашнем каталоге.
Из-за того, что различные дисплеи (gdm / kdm / sddm / etc) ведут себя странным образом и сбрасывают setxbmap
после приостановки / возобновления или блокировки / разблокировки, я обнаружил, как установить параметры таким образом, чтобы они наследовали его и не Сбросить это все время. Поскольку я приостанавливаю и возобновляю много, мне нужно было убедиться, что я не получил много копий xcape
работы, что решено в новом скрипте ниже.
Сначала измените конфигурацию клавиатуры с помощью sudo gedit /etc/default/keyboard
и установите, XKBOPTIONS="ctrl:nocaps"
а затем ~/.xprofile
вставьте одну строку ниже.
ps aux | grep -i '[x]cape' && killall -9 xcape; hash xcape 2>&1 >/dev/null && xcape -e 'Control_L=Escape' -t 100 &
Надеемся, что различные разделы скрипта сэкономят вам время / проблемы и предотвратят застревание логинов. Сначала он проверяет, есть ли уже запущенный экземпляр, и убивает его, поскольку единственное, что xcape
нужно сделать, это сопоставить Ctrl с Esc, это безопасно, затем hash
часть гарантирует, что вы xcape
установили, иначе ваша система может зависнуть при попытке входа в систему, потому что все запускаются ожидается, что скрипты завершатся чисто.
setxkbmap -option 'caps:ctrl_modifier'; xcape -e '#66=Escape'
Сергий:
Я использовал gnome-tweak-tool для привязки Caps Lock к Ctrl, поскольку в Системных настройках Ubuntu 14.04 нет раскладки клавиатуры. Тогда xcape -e 'Control_L = Escape' не работал, но после использования xcape -d я обнаружил, что Caps Lock генерирует код клавиши 66 и переназначает его соответственно: xcape -e '# 66 = Escape'. - Сергей Белозёров 4 сентября '14 в 10:08
Луи:
Согласно этому сообщению в блоге, это можно сделать только с помощью xcape: setxkbmap -option 'caps: ctrl_modifier'; xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier'; xcape -e 'Caps_Lock = Escape; Control_L = Escape; Control_R = Escape' - Луи Симоне 4 августа '15 в 10:06