Переключение <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 и наоборот .

  • Как я могу добиться эффекта удаленного рабочего стола MS в Linux?
  • Как изменить порог перетаскивания в Linux? (Я использую Gnome 3)
  • ssh -X foo @ host, затем su bar, а затем запустите приложение X с локальным дисплеем, в то время как бар также войдет в систему?
  • Не работает ThinkPad Helix DisplayPort
  • «Протокол не указан» при запуске Xorg через lightdm, но работает при запуске напрямую
  • Есть ли способ получить сглаженные значки в X, под управлением Linux?
  • Как сделать экран черно-белым?
  • Получение лучшего разрешения с использованием X на OpenBSD с VMWare Fusion
  • xrandr, xorg test screen error - по умолчанию используется только допустимый режим
  • Приложения Qt4 не работают в Xephyr
  • отправить нажатие клавиши для обработки
  • Interesting Posts

    читать запись файла по записи и делать преобразование в последующую запись на основе вышеуказанной записи и записывать в другой файл

    Ярлыки каталогов в буфере emacs

    Как скомпилировать драйвер дерева вне дерева для Fedora для исправления сверх медленных Wi-Fi?

    linux / solaris + проверить дублирующий действительный IP-адрес из файла

    Сценарий с использованием пользовательского ввода для расчета старой даты

    Разрешить пользователям, не являющимся администраторами, устанавливать пакеты через apt или rpm?

    Является ли PAM методом аутентификации пользователей?

    pacman-key -init занимает слишком много времени и не выходит

    Проблемы с ssh только при подключении с удаленного IP-адреса

    проверка аргумента для сценария bash – это строка из всех цифр

    Сообщения из syslogd, что они означают и что мне делать?

    FreeBSD xfce не работает

    Поддерживать настройки ссылок ip во время перезагрузки

    Почему команда `users` возвращает разных пользователей в зависимости от того, ssh я или открываю новый терминал?

    Как удалить существующие элементы из массива и впоследствии добавлять новые элементы

    Linux и Unix - лучшая ОС в мире.