xkb: используйте ключ для изменения уровня сдвига без появления в качестве модификатора

Я хотел бы настроить XKB на использование Caps Lock как способ создания разных ключей, но я не хочу, чтобы он отображался как модификатор. Например:

  • F1 производит нажатие клавиши F21
  • Caps Lock + F1 производит нажатие клавиши F1 (то есть без модификаторов)
  • Shift + Caps Lock + F1 производит нажатие Shift + F1 (только Shift учитывается как модификатор)

Я частично преуспел в этом, назначив Caps Lock для Hyper_R , но проблема в том, что это работает только в том случае, если Hyper_R также задан как модификатор, например Mod3 . Это означает, что Shift + Caps Lock + F1 на самом деле производит Shift + Mod3 + F1 поэтому любые горячие клавиши, прослушивающие Shift + F1 , не работают, потому что им не нравится Mod3 .

Есть ли способ использовать Caps Lock для изменения их поведения определенных ключей, не имея при этом приложения X в качестве ключа-модификатора?

Документы, которые я прочитал, подсказывают, что это возможно с расширенной конфигурацией XKB, но я не могу найти никаких подробностей.

  • Приложения XForwarding из OSX
  • Отладка клавиатуры и мыши после возобновления сна
  • Проблема с клавиатурой с тестированием Debian и gdm3
  • Как закрыть X Server, чтобы избежать ошибок при обновлении драйвера nVidia?
  • Несколько графических карт в X
  • Разрешение экрана изменилось и не может вернуться в Linux Mint
  • X не применяется к устройству?
  • Как я могу получить свою карту памяти NVIDIA, оптимизированную для Optimus, для предоставления вывода через xrandr?
  • One Solution collect form web for “xkb: используйте ключ для изменения уровня сдвига без появления в качестве модификатора”

    Извините, это древний, но, возможно, даже если вам слишком поздно, кто-то может найти этот подсказку полезной:

    В ваших types добавьте:

     type "CapsShiftSpecial" { modifiers= Shift+Hyper; map[Shift]= Level2; preserve[Shift]= Shift; map[Hyper]= Level3; map[Shift+Hyper]= Level4; preserve[Shift+Hyper]= Shift; level_name[Level1]= "Base"; level_name[Level2]= "Shift"; level_name[Level3]= "Hyper"; level_name[Level4]= "Shift Hyper"; }; 

    Затем в файле symbols есть что-то вроде

     key <FK01> { type[group1]="CapsShiftSpecial", symbols[group1]=[ F21, F21, F1, F1 ]}; 

    Программа, отслеживающая нажатия клавиш (например, xev или emacs ), будет видеть нажатия клавиш, как если бы вы нажали F21 , Shift + F21 , F1 и Shift + F1 .

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