Переключение <esc> и <caps lock> таким образом, который сохраняется с помощью внешних клавиатур

У меня есть файл с именем ~ / .speedswapper, который содержит следующее:

! Swap caps lock and escape remove Lock = Caps_Lock keysym Escape = Caps_Lock keysym Caps_Lock = Escape add Lock = Caps_Lock 

… когда я запускаю xmodmap ~/.speedswapper , он переключает ключи esc и Caps Lock . У меня есть эта строка в моем ~ / .profile, так что всякий раз, когда я регистрирую эти ключи, переключаются.

Однако , если я подключаю внешнюю USB-клавиатуру, этот параметр, похоже, не сохраняется. Клавиатура моего ноутбука работает отлично, но мне нужно снова запустить команду, чтобы внешняя клавиатура переключила две клавиши. К счастью, это не влияет на клавиатуру моего ноутбука – похоже, они синхронизируются.

Одним из решений было бы найти способ запустить эту команду xmodmap всякий раз, когда внешняя клавиатура будет подключена, но я был бы открыт для другого решения для сбрасывания ключей, если бы он был более надежным. ОС – Ubuntu 13.04.

Учитывая комментарий justbrowsing, похоже, что этого можно добиться, написав правило udev – я думаю, что мне нужно использовать параметр RUN и что он должен запускаться на / dev / hidraw0 или / dev / hidraw1, которые являются устройствами, которые появляется, когда я подключаю свою клавиатуру … но я все еще пытаюсь обернуть голову вокруг концепции, поэтому я буду благодарен за любую помощь от кого-то, кто знает, что они делают с udev.

One Solution collect form web for “Переключение <esc> и <caps lock> таким образом, который сохраняется с помощью внешних клавиатур”

Поскольку у вас есть эта команда в ~/.profile , она будет выполняться только один раз, когда вы входите в систему. Одно, а не очень элегантное решение – поместить команду в ваш ~/.bashrc чтобы она запускалась каждый время открытия терминала.

Лучшим решением было бы определить правило udev которое будет выполнять xmodmap при вставке вашей USB-клавиатуры (я использую значения, возвращаемые для моей USB-клавиатуры, вам нужно будет отредактировать это решение в соответствии с вашими потребностями):

  1. Получите информацию о вашей USB-клавиатуре. Запустите эту команду с подключенной клавиатуры:

     $ /lib/udev/findkeyboards | grep USB USB keyboard: input/event6 
  2. Чтобы написать udev rools, вам нужно знать, с чем они должны совпадать. Вы можете получить это, udevadm info --export-db поиск вывода udevadm info --export-db для записи event6 или просто проанализировав его прямо так:

     udevadm info --export-db | perl -ne 'BEGIN{$/="\n\n"}print if /event6/' 

    Это возвращает несколько строк текста, включая те, которые мы будем использовать:

     E: ID_MODEL_ID=0002 [...] E: ID_VENDOR_ID=1c4f 
  3. udev усложняется при использовании X-программ, таких как xmodmap , я даже не мог заставить его работать при экспорте $DISPLAY и $XAUTHORITY . Во всяком случае, я не мог заставить его работать с вашим методом, поэтому в моем решении вместо этого используется keymap . Во-первых, вам нужно будет узнать коды клавиш для Esc и Caps Lock , вы можете сделать это, выполнив

     sudo /lib/udev/keymap -i input/event6 

    а затем нажмите соответствующие клавиши. В моей системе это возвращает:

     scan code: 0x70029 key code: esc scan code: 0x70039 key code: capslock 
  4. Создайте новое правило клавиатуры, содержащее следующие строки:

     0x70029 capslock 0x70039 esc 

    и сохранить его как /lib/udev/keymaps/speedswap .

  5. Определите новое правило udev . Создайте файл с именем /etc/udev/rules.d/95-speedswap.rules и добавьте в него следующие строки:

     ACTION=="add", SUBSYSTEM=="input", ATTRS{idVendor}=="1c4f", ATTRS{idProduct}=="0002", RUN+="keymap $name speedswap" 

Это должно сделать это, по крайней мере, в моей системе, подключая мой внешний USB, вызывает Esc, чтобы действовать как Caps Lock и наоборот .

  • Как настроить Xorg для установки динамического двойного монитора
  • Потерял контроль над окнами, отправленными на монитор по HDMI, который xrandr не обнаруживает
  • Невозможно изменить настройки клавиатуры на Fedora 16
  • NVIDIA GLX не работает под ноутбуком Optimus
  • Как я могу клонировать конкретное рабочее пространство для других выходов?
  • Thinkpad x201 Tablet, вращающийся экран
  • Вина терпит неудачу с DirectX на Pinguy
  • Как открыть новое окно из оболочки с определенным размером и положением?
  • Нужен ли мне рабочий стол для запуска графического интерфейса?
  • Использовать только HDMI для аудиовыхода
  • FC16: невозможно войти в систему через LightDM или GDM (но «startx» отлично работает)
  • Linux и Unix - лучшая ОС в мире.