tapper
— Включалка раскладок клавиатуры для Иксов и Вайланда.
tapper
[опция]… [назначение]…где назначение — это (в нотации РБНФ):
=
", [ действия ];,
", действие };@
", раскладка );Таппер работает в фоновом режиме, и при ударе по назначенной клавише Таппер включает соответствующую этой клавише раскладку клавиатуры. Назначенная клавиша всегда включает ту же самую раскладку: Таппер никогда не переключает раскладки, каждая раскладка должна иметь выделенную для её включения клавишу. Особенность Таппера заключается в использовании клавиш-модификаторов (таких, как Shift
, Ctrl
или Alt
) для включения раскладок без потери функций модификаторов.
В дополнение к включению раскладок, Таппер умеет эмулировать удары по клавишам. Это позволяет делать некоторые полезные трюки.
Обычно Таппер настраивается путём его запуска с опцией --dconf-editor
, и добавляется в автозапуск при помощи опции --autostart
. Также Таппер может быть настроен при помощи командной строки с опцией --save-settings
и добавлен в автостарт с использованием графических приложений: в Гноме — «Доп. настройки GNOME» (англ. GNOME Tweaks), в Кедах — «Параметры системы» (англ. System Settings).
Для того чтобы опознавать удары по клавишам, Таппер следит за событиями ввода (англ. input events) (клавиша нажата, клавиша отпущена, и т. д.). Компонент Таппера, который следит за событиями, называется «слухач» (англ. listener). Таппер имеет несколько слухачей:
libinput — это низкоуровневая библиотека для взаимодействия с устройствами ввода. Слухач «libinput» использует эту библиотеку и может работать как в Иксах, так и в Вайланде, но требует дополнительных разрешений (англ. permissions): процесс Таппера должен иметь input
group identity. (Для выполнения этого условия Таппер должен быть правильным образом установлен.)
См. также раздел «Безопасность» ниже.
XRecord — это расширение Иксов. Слухач «XRecord» использует это расширение и, очевидно, работает только в Иксах и не работает в Вайланде, но зато не требует дополнительных разрешений.
Это не настоящий слухач, а указание Тапперу выбрать подходящий слухач самостоятельно. Таппер проверяет переменную окружения XDG_SESSION_TYPE
: если значение переменной равно x11
, Таппер выбирает слухач «XRecord», иначе выбирает слухач «libinput».
Таппер имеет несколько слухачей, пречисленных выше, но для работы нужно выбрать один из них. Слухач выбирается либо ключом listener
в настройках, либо опцией --listener
в командной строке.
Компонент Таппера, который управляет раскладками клавиатуры (выдаёт список раскладок, доступных для использования, включает указанную раскладку и т. д.) называется «раскладчик» (англ. layouter). Таппер имеет несколько раскладчиков:
Этот раскладчик выдаёт команду Агизму (это расширение Гнома), Агизм, в свою очередь, вызывает методы Гнома для выполнения работы. На практике это означает, что раскладчик «GNOME» отлично работает в Гноме: обновляет индикатор раскладки клавиатуры и управляется со всеми раскладками, сконфигурированными в Гноме, сколько бы их не было.
Также раскладчик «GNOME» следит за сессией Гнома. Если сессия становится неактивной (например, когда пользователь переключается с текущей сессии на другую), раскладчик переводит Таппер в пассивный режим: Таппер продолжает слушать события ввода, но не выполняет никаких действий (не включает раскладки и не эмулирует удары по клавишам). Когда сессия становится активной опять, раскладчик переводит Таппер назад в обычный режим. Такое поведение предотвращает нежелательное воздействие одной сессии на другую (которое возможно в случае использования слухача «libinput» и/или ударника «libevdev»).
Важное замечаение: Раскладчик «GNOME» требует, чтобы Агизм (расширение Гнома) был установлен и включен.
Этот раскладчик взаимодействует с Кедами через шину D-Bus, собственно работу по включению раскладок делают сами Кеды.
Замечание: Ракладчик «KDE» не умеет издавать звуки, так что опция командной строки --bell
не будет иметь эффекта, если выбран раскладчик «KDE».
Xkb — расширение Иксов. Обратите внимание на ограничение: Xkb позволяет загрузить до 4 раскладок (в технической документации на Иксы они называются «группами») и затем включать одну из этих заранее загруженных раскладок (в технической документации это называется «залочить группу»).
Раскладчик «Xkb» использует Xkb, чтобы включить раскладку. Очевидно, что этот раскладчик зависит от Иксов и не работает в Вайланде. Однако, он работает в отличных от Гнома рабочих столах, запущенных в Иксах, например, в Корице (Циннамоне), и3, Кедах, ЛХДЕ, ЛХКт, Мате и Крысе (Хфце).
Это заглушка, которая ничего не делает. Она выдаёт пустой список раскладок и не занимается их включением, не умеет издавать звуки. Заглушка полезна, когда управление раскладками не требуется.
Это не настоящий раскладчик, а указание Тапперу выбрать подходящий раскладчик самостоятельно. Если включать раскладки не требуется, Таппер выбирает раскладчик «dummy»; в противном случае Таппер проверяет переменную окружения XDG_SESSION_DESKTOP
: если значение переменной равно gnome
, gnome-classic
, gnome-xorg
, ubuntu
или ubuntu-wayland
, Таппер выбирает раскладчик «Гном», если значение равно KDE
, Таппер выбирает раскладчик «KDE», иначе Таппер выбирает раскладчик «Xkb».
Замечание: В родном рабочем столе Убунты занчение переменной окружения XDG_SESSION_DESKTOP
равно ubuntu
, т. е. дистрибутив Убунту использует рабочий стол Убунту. Однако, рабочий стол Убунту на деле является Гномом с парой расширений, поэтому раскладчик «GNOME» пригоден для использования на рабочем столе Убунту.
Таппер имеет несколько раскладчиков, перечисленных выше, но для работы нужно выбрать один из них. Раскладчик выбирается ключом layouter
в настройках и опцией --layouter
в командной строке.
Компонент Таппера, эмулирующий удары по клавишам (или, что то же самое, генерирующий события ввода), называется «ударник» (англ. emitter). Таппер имеет несколько ударников:
libevdev — это низкоуровневая библиотека, которая управляет устройствами ввода. Ударник «libevdev» использует эту библиотеку, чтобы создать виртуальную клавиатуру и в дальнейшем генерировать события ввода, исходящие из этой клавиатуры. Этот ударник работает и в Иксах, и в Вайланде, но требует дополнительных разрешений (англ. permissions): процесс Таппера должен обладать root
user identity. (Для выполнения этого условия Таппер должен быть правильным образом установлен.)
См. также раздел «Безопасность» ниже.
XTest — это расширение Иксов. Ударник «XTest» использует это расширение и, очевидно, требует Иксов и не работает в Вайланде, зато он не требует дополнительных разрешений.
Это не настоящий ударник, а заглушка, которая ничего не делает. Она используется, когда эмуляция не требуется.
Это не настоящий ударник, а указание Тапперу выбрать подходящий ударник самому. Если эмуляция нажатия клавиш не требуется, Таппер выбирает ударник «dummy»; в противном случае Таппер анализирует переменную окружения XDG_SESSION_TYPE
: если её значение равно x11
, Таппер выбирает ударник «XTest», иначе выбирается ударник «libevdev».
Таппер имеет несколько ударников, перечисленных выше, но для работы нужно выбрать только один. Ударник выбирается ключом emitter
в настройках и опцией --emitter
в командной строке.
Клавиша может быть указана её кодом (целое число без знака, например, 29
) или её символическим названием (например, LCTL
или KEY_LEFTCTRL
).
В качестве кодов клавиш Таппер всегда использует коды событий ввода ядра Линукса независимо от выбранного слухача и ударника.
Таппер преобразует названия клавиш в коды с помощью выбранного слухача в начале работы, и в дальнейшем оперирует только с кодами клавиш. Если указанное название клавиши неизвестно выбранному слухачу, это считается ошибкой.
Запустите Таппер с опцией --list-keys
, чтобы увидеть список клавиш, известных автоматически выбранному слухачу. Используйте опцию --list-keys
в комбинации с опцией --listener
, чтобы получить список клавиш, известных указанному слухачу. Есть ещё один метод: Запустите Таппер с опцией --show-taps
, и ударяйте по интересующим вас клавишам, чтобы узнать их коды и названия.
Термин «удар» (англ. tap) означает, что клавиша нажата и быстро отпущена, при этом:
Замечание: Оба условия должны быть выполнены. Если клавиша нажата в комбинации с любой другой клавишей (одной или несколькими), это не считается ударом. Если клавиша удерживалась в нажатом состоянии слишком долго (более половины секунды), это тоже не считается ударом.
Таппер обращается к выбранному раскладчику, чтобы узнать задержку автоповтора. Раскладчик «Гном» берёт задержку из настроек Гнома; раскладчик «KDE» читает конфигурационные файлы Кед; раскладчик «Xkb» берёт задержку из Иксов. Таппер определят задержку только однажды, в начале работы; если вы измените задержку после того, как Таппер начал работу, Таппер не будет использовать новую задержку. Вам нужно перезапустить Таппер, чтобы он использовал новое значение задержки.
Кнопка (англ. button) — это клавиша, расположенная на устройстве ввода, отличном от клавиатуры, например, мышь, джойстик, тачпад и т. д.
Таппер наблюдает и за клавишами, и за кнопками. Нужно это для того, чтобы корректно определять удары по клавишам. Например, давайте рассмотрим Ctrl
+щелчок по левой кнопке мыши. Технически, это действие пользователя порождает 4 события ввода: (1) нажатие на клавишу Ctrl
, (2) нажатие на левую кнопку мыши, (3) отпускание левой кнопки мыши, (4) отпускание клавиши Ctrl
. Если Таппер не наблюдает за кнопками мыши, Таппер услышит только два события: нажатие на клавишу Ctrl
и её последующее отпускание, что будет некорректно интерпретировано как удар по клавише Ctrl
.
Таппер обрабатывает кнопки точно так же, как и клавиши (для примера, вы можете включать раскладки клавиатуры щелчками по кнопкам мыши). Опция --list-keys
показывает кнопки в одном списке с клавишами. В случае раскладчика «libinput» названия клавиш начинаются с префикса KEY_
, а названия кнопок начинаются с префикса BTN_
. В случае раскладчика «XRecord» названия кнопок начинаются с префикса BTN
.
Раскладка клавиатуры (англ. keyboard layout) может быть указана её индексом (целым числом без знака: 1
, 2
, 3
, и т. д.) или её названием (например, Английская (США)
или Русская (машинописная)
).
Раскладки зависят от выбранного раскладчика. В случае, если выбран раскладчик «Гном», раскладки — это гномьи «источники ввода», в случае раскладчика «Xkb» раскладки — это иксовые «группы». Таппер нумерует раскладки начиная с индекса 1.
В самом начале работы Таппер преобразует названия раскладок в соответствующие им индексы, используя выбранный раскладчик, и в дальнейшем оперирует только с индексами. Если в командной строке указано неправильное название раскладки, это вызовет ошибку.
Запустите Таппер с опцией --list-layouts
, чтобы увидеть список раскладок, доступных для использования автоматически выбраным раскладчиком. Используйте --list-layouts
в комбинации с опцией --layouter
, чтобы посмотреть список раскладок, известных указанному раскладчику.
Действие (англ. action) — это элементарная команда, которую Таппер может исполнить. Есть два типа действий:
@
раскладкаВключить указанную раскладку. Таппер никогда не загружает раскладки в Гном, Кеды или Иксы, Таппер только включает (делает активной, или текущей) одну из уже загруженных раскладок. Говоря техническим языком, раскладчик «GNOME» посредством шины D-Bus вызывает метод из Агизма (расширения Гнома); раскладчик «KDE» посредством той же шины D-Bus вызывает метод из Кед; раксладчик «Xkb» вызывает функцию XkbLockGroup
. (В свою очередь, Гном, работающий в Иксах, может (пере)загружать раскладки во время работы, чтобы преодолеть иксовое ограничение на 4 одновременно загруженных раскладки).
Эмулировать удар по указанной клавише путём генерации двух событий ввода: нажатия на клавишу и её отпускания.
Заметьте, что индекс раскладки, используемый в действии, должен иметь префикс @
, чтобы Таппер мог отличить индексы раскладок от кодов клавиш: 1
— это команда эмулировать удар по клавише Esc
, в то время как @1
— это команда включить первую раскладку. Названия раскладок тоже должны иметь префикс: @Английская (США)
.
Назначение (англ. assignment) выделяет клавишу для выполнения серии действий.
Назначения делаются ключом assignments
в настройках и аргументами назначение в командной строке. Обратите внимание на разницу: в настройках нельзя использовать названия клавиш и раскладок, там допустимы только коды клавиш и индексы раскладок. Командная строка чуть более гибкая: в ней допускаются и коды/индексы, и названия.
Серия действий состоит из одной команды включить раскладку (например, LCTL=@1
). В таком случае, назначение выделяет клавишу для включения раскладки. Когда Таппер опозна́ет удар по этой клавише (LCTL
), он включит соответствующую этой клавише раскладку (1
).
Клавиша может быть назначена только однажды, использование клавиши повторно в другом назначении (например, LCTL=@1 LCTL=@2
) является ошибкой. В противоположность этому, та же самая раскладка может быть привязана к нескольким разным клавишам (например, LCTL=@1 LFSH=@1
), в этом случае раскладка будет включаться при ударе по любой из выделенных ей клавиш.
Пустой список действий (например, LCTL=
) разрешается. Такое назначение освобождает клавишу. Это может быть использовано в командной строке, чтобы отменить назначения, сделанные в настройках.
Серия действий может быть произвольной последовательностью разделённых запятыми действий (например, LCTL=@1,BTN1,BTN1,@2
). Когда Таппер опозна́ет удар по этой клавише (LCTL
), он выполнит все указанные действия в порядке их перечисления (включит первую раскладку, сэмулирует щелчок по первой клавише мыши (два раза), включит вторую раскладку).
Список действий может быть произвольной смесью команд включения раскладок и команд эмуляции ударов по клавишам, но есть ограничения:
Таппер не может скрыть события ввода от других программ. Для примера, давайте рассмотрим назначение LCTL=BTN1
: когда Таппер опознает удар по левой клавише Ctrl
, он эмулирует щелчок по первой кнопке мыши. Другие программы увидят (или услышат) и нажатие на левую клавишу Ctrl
, и щелчок по первой кнопке мыши.
Генерируемые Таппером события ввода видимы всем программам, включая самого Таппера. Рекурсивные назначения вида LCTL=LCTL
или LCTL=RCTL RCTL=LCTL
вызовут бесконечный цикл, как только первый удар по клавише LCTL
будет обнаружен Таппером. (Если вам повезёт, вы сможете убить процесс Таппера не повесив всю систему.)
Таппер инициирует включение раскладки, но само включение происходит асинхронно в Гноме, Кедах или Иксах. Примерно такие же дела происходят с событиями ввода: Таппер генерирует события, которые затем асинхронно направляются через ядро и/или Иксы. Из-за этой асинхронности результат действий разного типа может проявляться в порядке, отличном от исходного. Например, результат серии действий @1,30,@2,31
может быть таким же, как результат @1,@2,30,31
, или @1,30,31,@2
или 30,31,@1,@2
. Однако, результат действий одного типа должен появляться в порядке их следования: в предыдущем примере программы всегда будут видеть нажатие на клавишу с кодом 30
раньше, чем нажатие на клавишу с кодом 31
.
Несмотря на эти ограничения, эмуляция нажатия клавиш позволяет проделывать полезные трюки, см. раздел “Расширенное использование” в секции “Примеры”.
Таппер может издавать звук («звонить в колокольчик», англ. ring the bell) когда включает раскладку. Фактический звук зависит от настроек рабочего стола, может отсутствовать или даже иметь визуальный эффект.
Звук включается и выключается ключом bell
в настройках и опциями --bell
и --no-bell
в командной строке.
Заметка: Раскладчик «KDE» не умеет издавать звуки, так что опция --bell
не будет иметь эфекта если выбран раскладчик «KDE».
Настройки (англ. settings) Таппера включают:
Таппер хранит настройки в базе GSettings.
По умолчанию Таппер загружает настройки; используйте опцию --no-load-settings
, чтобы запретить загрузку настроек. Таппер объединяет загруженные настройки с опциями и назначениями из командной строки, чтобы получить конфигурацию для работы. В случае конфликтов, командная строка имеет приоритет над загруженными настройками. Если опция --save-settings
присутствует в командной строке, Таппер сохраняет рабочую конфигурацию в базе GSettings и завершает работу.
Таким образом, вы можете редактировать настройки Таппера при помощи опции --save-settings
. Если вы предпочитаете графический интерфейс, используйте опцию --dconf-editor
— Таппер откроет свои настройки в приложении «Редактор dconf» (англ. dconf Editor, команда dconf-editor
). Настройки Таппера также могут быть просмотрены или отредактированы в приложениях gsettings
и dconf
. Схема (англ. schema) настроек Таппера — io.sourceforge.kbd-tapper
, путь (англ. path) — /io/sourceforge/kbd-tapper/
.
Длинные опции можно сокращать до тех пор, пока сокращения остаются однозначными. Например, --save-options
может быт сокращена до --save
или даже до --sa
(но не до --s
, т. к. получится неоднозначность: --s
может быть сокращением от --save-settings
, --syslog
или --show-taps
).
Порядок опций в командной строке не имеет значения. Даже если вы напечатаете --save-settings
--load-settings
--bell
, Таппер сначала загрузит настройки, потом включит звук, и только затем сохранит настройки.
--listener=
слухачСлухач, который будет использоваться при работе, один из: libinput
, xrecord
, auto
(это выбор по умолчанию).
--libinput
То же, что и --listener=libinput
.
--xrecord
То же, что и --listener=xrecord
.
--layouter=
раскладчикРаскладчик, который будет использоваться, один из: gnome
, kde
, xkb
, dummy
, или auto
(это выбор по умолчанию).
--gnome
То же, что и --layouter=gnome
.
--kde
То же, что и --layouter=kde
.
--xkb
То же, что и --layouter=xkb
.
--emitter=
ударникУдарник, который будет использоваться при работе, один из: libevdev
, xtest
, dummy
или auto
(это выбор по умолчанию).
--libevdev
То же, что и --emitter=libevdev
.
--xtest
То же, что и --emitter=xtest
.
--bell
Издавать звук при включении раскладок.
--no-bell
Не издавать звуков при включении раскладок (это выбор по умолчанию).
--dconf-editor
Запустить приложение «Редактор dconf» для редактирования настроек и закончить работу.
--load-settings
Загрузить настройки из базы GSettings (это выбор по умолчанию).
--no-load-settings
Не загружать настройки из базы GSettings.
--reset-settings
Сбросить все настройки в начальные значения и закончить работу.
--save-settings
Сохранить рабочую конфигурацию в базе GSettings и закочить работу.
--autostart
Организовать автозапуск Таппера при старте графической сессии и закончить работу. Опция работает для рабочих столов, соответствущих Desktop Application Autostart Specification.
--no-autostart
Отменить автозапуск Таппера при старте графической сессии и закончить работу.
--lay-off
Разобрать опции и назначения в командной строке, загрузить настройки (если не запрещено), распечатать рабочую конфигурацию и закончить работу. Опция существует для целей тестирования.
--no-default-assignments
Не использовать назначения по умолчанию. Таппер использует назначения по умолчанию, если никаких назначений не сделано ни в настройках (если загрузка настроек разрешена), ни в командной строке. Опция существует, главным образом, для целей тестирования.
--quiet
Не печатать начальное сообщение, содержащее копирайт и рабочую конфигурацию.
--syslog
Копировать ошибки и предупреждения в системный лог. (Ошибки, возникшие при разборе командной строки, в системный лог не копируются.)
--x
То же, что и --xrecord --xkb --xtest
.
--help
Распечатать справку и закончить работу.
--list-keys
Вывести список клавиш, известных выбранному слухачу, и закончить работу.
--list-layouts
Вывести список раскладок, известных выбранному раскладчику, и закончить работу.
--show-taps
Запустить Таппер в режиме показа ударов: как только удар будет обнаружен, Таппер напечатает код и название нажатой клавиши. Этот режим подразумевает опцию --emitter=dummy
не разрешает делать назначения в командной строке, выбор ударника и назначения, сделанные в настройках, игнорируются.
--usage
Распечатать очень короткую справку и закончить работу.
--version
Вывести короткое сообщение, содержащее версию, копирайт и лицензию, и закончить работу.
0
если всё в порядке,2
в случае ошибок в командной строке,3
в случае ошибок во время работы.Вывести список клавиш, известных автоматически выбранному слухачу:
$ tapper --list-keys
Вывести список клавиш, известных слухачу «libinput»:
$ tapper --libinput --list-keys
Узнать коды клавиш (ударяйте по интресующим вас клавишам, потом нажмите Ctrl
+C
, чтобы остановить Таппер):
$ tapper --show-taps
Вывести список раскладок, известных автоматически выбранному раскладчику:
$ tapper --list-layouts
Вывести список раскладок, известных раскладчику «GNOME»:
$ tapper --gnome --list-layouts
Вывести список раскладок, известных раскладчику «KDE»:
$ tapper --kde --list-layouts
По умолчанию, если настройки не были изменены, удар по левой клавише Ctrl
включает первую раскладку, а удар по правой клавише Ctrl
включает вторую раскладку:
$ tapper
То же самое + включить звук:
$ tapper --bell
В дополнение к назначениям из настроек (левая и правая клавиши Ctrl
, удар по левой клавише Shift
включает третью раскладку, а удар по правой клавише Shift
— четвёртую (подразумеваются Иксы):
$ tapper LFSH=@3 RTSH=@4
То же самое, но клавиши указаны кодами вместо названий, так что это годится и для Иксов, и для Вайланда:
$ tapper 42=@3 54=@4
Освободить назначенные в настройках клавиши Ctrl
, и вместо них использовать левую клавишу Shift
для включения первой раскладки, и правую клавишу Shift
— для второй:
$ tapper LCTL= RCTL= LFSH=@1 RTSH=@2
Полностью игнорировать существующие настройки, если они есть, и указать новую конфигурацию: левая клавиша Shift
включает первую раскладку, правая клавиша Shift
— вторую. Остальные настройки сброшены в состояние по умолчанию: слухач, раскладчик и ударник выбираются автоматически, звук выключен. Эта команда предназначена для Иксов, т. к. используются иксовые названия клавиш:
$ tapper --no-load-settings LFSH=@1 RTSH=@2 --save-settings
То же самое для Вайланда:
$ tapper --no-load-settings KEY_LEFTSHIFT=@1 KEY_RIGHTSHIFT=@2 --save-settings
То же самое, но используются коды клавиш вместо имён, поэтому команда годится и для Иксов, и для Вайланда:
$ tapper --no-load-settings 42=@1 54=@2 --save-settings
Включить звук:
$ tapper --bell --save-settings
Сбросить все настройки в исходное состояние:
$ tapper --reset-settings
Проверить настройки с помощью программы gsettings
:
$ gsettings list-recursively io.sourceforge.kbd-tapper
Редактировать настройки Таппера в графическом приложении «Редактор dconf» (англ. dconf Editor):
$ tapper --dconf-editor
Запустить Таппер, использовать настройки:
$ tapper
Запустить Таппер с сохранёнными настройками, но выключить звук:
$ tapper --no-bell
Организовать автоматический запуск Таппера при старте графической сессии:
$ tapper --autostart
Клавиша-модификатор вроде клавиши Ctrl
выполняет свою функцию только будучи нажатой вместе с другой клавишей (одной или несколькими): нажатие модификатора самого по себе не имеет эффекта. Таппер даёт клавишам-модификаторам вторую функцию: удар по назначенному модификатору приобретает смысл — это включает раскладку клавиатуры.
Давайте рассмотрим клавишу альтернативных символов (англ. Alternate Characters Key) и клавишу Compose. («Клавиша альтернативных символов» — это термин Гнома, в Иксах это называется «клавиша выбора третьего уровня» (или регистра).) И клавиша альтернативных символов и клавиша Compose — это названия функций, а не реальные клавиши на клавиатуре. Функция «клавиша альтернативных символов» часто назначается на правую клавишу Alt
, «клавиша Compose» — на Menu
. Клавиша альтернативных символов является модификатором: она имеет значение только если нажата в комбинации с другой клавишей, нажатие на клавишу альтернативных символов саму по себе эффекта не имеет. Давайте назначим обе функции, и клавишу альтернативных символов, и клавишу Compose на клавишу Menu
:
Сконфигурируйте ваш рабочий стол, чтобы использовать клавишу Menu
как клавишу альтернативных символов.
Выберите клавишу, отсутствующую на вашей клавиатуре (например, F14
с кодом 184
), и сконфигурируйте ваш рабочий стол, чтобы использовать её как клавишу Compose.
Запустите Таппер:
$ tapper 127=184 # 127 — это код клавиши Menu
Вуаля! Клавиша Menu
, нажатая в комбинации с другой клавишей, исполняет роль клавиши альтернативных символов, удар по клавише Menu
выполняет роль клавиши Compose; теперь правая клавиша Alt
освободилась и вы можете использовать её как обычную клавишу Alt, чтобы иметь две симметричных клавиши (подобно клавишам Shift
и Ctrl
).
Другой вариант — использовать правую клавишу Alt
как клавишу альтернативных символов и клавишу Compose, а клавише Menu
вернуть её исходную функцию — показывать контекстное меню.
(Вернее, для тех вимеров, у которых письменность родного языка не основана на латинице.)
Сначала сконфигурируйте ваш рабочий стол, чтобы освободить клавишу Caps Lock
, затем:
$ tapper 58=1,@1 # 58 — код клавиши Caps Lock, 1 — код Esc
Теперь удар по клавише Caps Lock
эмулирует удар по клавише Esc
, который включает нормальный режим в Виме, и включает первую раскладку (предполагается, что это Английская (США)
), т. к. большинство команд Вима набираются латинскими буквами.
Замечание: С появлением в Таппере раскладчика «KDE» этот трюк устарел, но он (трюк) демонстрирует технику, которая может с успехом применяться в других случаях.
Кеды позволяют выделить клавишу (или комбинацию клавиш) для включения раскладки, но Кеды не позволяют использовать для включения раскладок клавиши-модификаторы, наример, Ctrl
. Таппер может помочь обойти это ограничение:
$ tapper KEY_LEFTCTRL=KEY_F14 KEY_RIGHTCTRL=KEY_F15
Теперь запустите приложение «Параметры системы» (англ. System Settings), проследуйте по цепочке «Устройства ввода» (англ. Input Devices) → «Клавиатура» (англ. Keyboard) → «Раскладки» (англ. Layouts) и добавьте клавиши для раскладок, используя левую и правую клавиши Ctrl
— но теперь при помощи Таппера они будут опознаваться Кедами как клавиши «Launch (7)» и «Launch (8)».
Важное замечание: Использование Таппера в многопользовательской среде может быть небезопасно, см. детали ниже. Не устанавливайте отладочную версию Таппера, так как она может быть использована в качестве кейлоггера (англ. key logger) (программы, записывающей все нажимаемые пользователем клавиши; такие программы могут использоваться для кражи аккаунтов и паролей).
Слухач «libinput» читает файлы устройств в каталоге /dev/input
. Эти файлы не могут быть прочитаны обычным пользователем, только члены группы input
(и пользователь root
) могут делать это. Ударник «libevdev» имеет ещё бо́льшие требования: он пишет в файл устройства /dev/uinput
, такие действия разрешены только пользователю root
.
Таким образом, чтобы выполнять все свои заявленные функции, Таппер must be run with the root
user identity. Вплоть до версии 0.7.0, это достигалось установкой бита set-user-id
на исполняемый файл Таппера, принадлежащего пользователю root
. Однако, Тапперу не нужны все способности (англ. capabilities) пользователя root
, для работы вполне достаточно двух способностей: cap_setuid
и cap_setgid
. Этот подход с урезанием способностей Таппера был реализован в версии 0.7.1.
В любом случае, Таппер всё ещё имеет очень много власти в системе: слухач «libinput» слышит все события ввода (нажатия и отпускания клавиш, перемещения мыши, и т. д.) в системе, даже если эти события исходят от другого пользователя. Например, один пользователь может не завершить, а только запереть («залочить», англ. to lock) свою сессию, а другой пользователь в это время может начать свою сессию, но запущенный первым пользователем Таппер будет слышать всё, что вводит второй пользователь (а отладочная версия Таппера ещё и покажет все события первому пользователю). Генерируемые ударником «libevdev» события ввода влияют на всех пользователей системы.
Однако, Таппер стремится вести себя ответственно:
cap_setuid
и cap_setgid
в самом начале работы, чтобы получить root
user and input
group identities, и затем избавляется от всех способностей (после чего их невозможно получить обратно).root
user identity как только ударник «libevdev» открывает файл /dev/uinput
, или как только становится понятно, что ударник «libevdev» не будет использоваться.input
group identity всё время, пока используется слухач «libinput», потому что новые файлы устройств могут появляться в каталоге /dev/input
во время работы Таппера (например, если пользователь подключит клавиатуру или мышь), и libinput будет пытаться открывать новые файлы, соответствующие только что подключенным устройствам. Однако, Таппер избавляется от input
group identity как только становится известно, что слухач «libinput» не будет использоваться.Также, Таппер — свободная программа, её исходные коды доступны. Вы можете изучить их, чтобы убедиться что Таппер вас не обманывает.
Раскладчик «GNOME» в Таппере 0.5.0 (и более ранних версиях) использует метод Eval
из Гнома, чтобы управлять раскладками. В Гноме 41 метод Eval
признан небезопасным (вполне обоснованно) и выключен: метод всё ещё присутствует может быть вызван, но ничего не делает. Соответственно, Таппер не может включать раскладки.
В качестве временного костыля вы можете установить одно из перечисленных расширений Гнома:
Эти расширения включают «небезопасный режим» (англ. Unsafe Mode) в Гноме, после чего метод Eval
начинает работать. Оба расширения считаются небезопасными и исключены из GNOME Shell Extensions, так что вам придётся загружать и устанавливать их самостоятельно.
Раскладчик «GNOME» в Таппере 0.6.0 (и более поздних версиях) не использует метод Eval
. Вместо него используется Агизм, расширение Гнома, которое даёт приложениям возможность управлять раскладками в Гноме. Агизм должен быть установлен и включен, чтобы Таппер работал. Агизм работает в любой версии Гнома, начиная с 3.28.
Раскладчик «Xkb» не работает в Гноме 3.18 (поставлялся в Федоре 23). Строго говоря, раскладчик работает — он включает требуемую раскладку, но Муттер (гномий оконный менеждер) немедленно переключает её обратно. Такое поведение было добавлено в Муттер разработчиками Убунты, чтобы починить переключение раскладок в Убунте… и сломать переключение раскладок в Федоре. Детали можно найти здесь:
Сломанный Муттер был починен в Федоре 24, но потом сломанный Муттер опять появился в Федоре. Сломанный Муттер может поставляться и в других дистртбутивах ГНУ/Линукса.
Однако, сейчас это уже не важно: Просто не используйте раскладчик «Xkb» в Гноме, используйте раскладчик «GNOME», сделанный специально для Гнома.
Если даже Муттер не сломан (например, в Федоре 24), раскладчик «Xkb» может вести себя в Гноме странно:
Так как Гном не в курсе, что Таппер переключает раскладки за спиной Гнома, индикатор раскладки клавиатуры может показывать раскладку, не соответствующую текущей.
Если в Гноме сконфигурировано более четырёх раскладок, Гном (пере)загружает раскладки в процессе работы, чтобы обойти иксовое ограничение на 4 одновременно загруженных раскладки. Раскладчик «Xkb» всегда включает одну из уже загруженных раскладок по её индексу, но в таких условиях один и тот же индекс не обозначает ту же самую раскладку всё время. Например, удар по правой клавише Ctrl
включает вторую раскладку, но вот какой именно окажется эта вторая раскладка в таких условиях неизвестно.
Решение этой проблемы простое: Не используйте раскладчик «Xkb» в Гноме, используйте раскладчик «GNOME», сделанный специально для Гнома.
If you are a newbie, read Simon Tatham’s essay “How to Report Bugs Effectively”. The essay is available in several languages.
A bug report or help request must include:
Brief description of your system. Run the following commands and show me their exact output:
$ cat /etc/os-release
$ uname -m
How you installed Tapper:
rpm -q tapper
.In case of build problem: Exact build commands and their exact output.
In case of run time problem: Run the following commands and show me their exact output (omit the third command in case of non-GNOME desktop (Ubuntu is the GNOME desktop)):
$ echo $XDG_SESSION_TYPE
$ echo $XDG_SESSION_DESKTOP
$ gnome-extensions show agism@agism.sourceforge.io
$ gsettings list-recursively io.sourceforge.kbd-tapper
Then run Tapper from the terminal and show me exact command you type and its exact output; also describe your actions, the actual Tapper behavior, and your expectations.
Collect all the requested information and send the bug report to van.de.bugger@gmail.com.
Copyright 🄯 2014, 2016—2017, 2019—2023 Van de Bugger. Лицензия GPLv3+: GNU GPL версии 3 или новее https://gnu.org/licenses/gpl.html.
Это свободное ПО: вы можете изменять и распространять его. Нет НИКАКИХ ГАРАНТИЙ в пределах действующего законодательства.