Измените caps-lock для управления в виртуальной консоли в Ubuntu 17

10

Я хотел бы изменить поведение Caps Lock в виртуальных терминалах (например, tty CtrlAltF3), чтобы он действовал как модификатор Control. В идеале, я бы хотел, чтобы он действовал как Escape, когда нажимается один, но просто получить поведение Control оказывается трудным.

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

Я написал файл caps_control.kmap, который отображает заглавные буквы для контроля,

keymaps 0-255
keycode  58 = Control

Если я запускаю loadkeys caps_control.kmapс виртуальной консоли, это работает. Теперь я хочу, чтобы он загружался автоматически при загрузке / входе в систему / что угодно ...

Я нашел ссылки на использование , /etc/rc.localчтобы сделать это, но моя система не имеет такого файла, хотя у него есть несколько каталогов , например /etc/rc0.d/, /etc/rc1.d/...

Похоже, так как Ubuntu 17 использует sytemd, я должен использовать localectlдля управления такими вещами, но мне не ясно, как это сделать. Например,

$ localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: n/a
      X11 Layout: us
       X11 Model: pc105
$ localectl list-keymaps
Couldn't find any console keymaps.

Страница localectlсправочника для упоминаний /etc/locale.confи /etc/vconsole.confни одна из которых не существует в моей системе.

Я в полном недоумении. Может кто-то указать мне верное направление?

иван
источник
Вам нужно, чтобы это изменение было активным для всех пользователей или только для ваших собственных?
Acer
@acer В любом случае меня устроит, так как я действительно единственный пользователь на этой машине.
иван
Хм ... Вы добавляете в ~ / .profile строку, loadkeys caps_control.kmapкоторая будет выполняться при входе в систему.
Acer
@acer Вызов loadkeysиз ~ / .profile кажется проблематичным. Когда я вхожу в систему, я получаю сообщение об ошибке «Не удалось получить дескриптор файла, ссылающийся на консоль».
иван

Ответы:

11

Чтобы включить Caps Lock в дополнительный модификатор Ctrl, который также эффективен в консолях tty, откройте его /etc/default/keyboardдля редактирования и установите:

XKBOPTIONS=ctrl:nocaps

Если вы уже XKBOPTIONSустановили, добавьте ctrl:nocapsк его существующему значению запятую для разделителя, например:

XKBOPTIONS="terminate:ctrl_alt_bksp,ctrl:nocaps"

Должен быть активен после следующей перезагрузки или выдачи setupconкоманды.

Опция должна присутствовать при запуске localectl status:

$ localectl status | grep caps
     X11 Options: ctrl:nocaps

А в сеансе X еще один способ убедиться, что он установлен:

$ gsettings get org.gnome.desktop.input-sources xkb-options
['ctrl:nocaps']
Гуннар Хьялмарссон
источник
1
другой вариант XKB есть "ctrl:nocaps". в X разница невелика: с помощью этой ctrlопции xevдругие инструменты будут видеть Control_Lсимвол при нажатии клавиши CapsLock, в то время как эта capsопция все равно будет показывать Caps_Lockклавиатуру. Я не уверен, что это различие преобразуется в раскладку виртуальной консоли.
донкихотский
@quixotic: Спасибо за упоминание ctrl:nocaps. Я добавил это в свой ответ.
Гуннар
Есть идеи, почему это не работает для меня? Это на самом деле одна из первых вещей, которые я попробовал, и мне нравится подход. К сожалению, это не влияет на мою систему.
иван
1
@ivan: Я только что проверил себя и обнаружил, что мое первое предложение ( caps:ctrl_modifier) неэффективно в tty. Однако для меня (17.10) ctrl:nocapsэто. Пожалуйста, смотрите мой отредактированный ответ.
Гуннар
1
@GunnarHjalmarsson Я не слишком хорошо знаком с методом перевода карт XKB на консольные карты в Debian / Ubuntu ( ckbcompя думаю, что он включает в себя ?). я не помнил caps:ctrl_modifierвариант, который вы впервые упомянули, поэтому посмотрел его, чтобы сравнить с тем, который ctrl:nocapsя обычно использую, и подумал, что здесь стоит упомянуть разницу. рад, что это было полезно.
донкихотский