Я прошу и отвечаю на свой вопрос здесь, если это полезно для кого-то другого, так как это затронуло меня долгое время, чтобы придумать решение !
У меня есть клавиатура Sun Microsystems типа 7, которая имеет набор из 11 дополнительных клавиш с правой стороны, и я хотел бы иметь возможность программировать их, чтобы сделать что-то полезное в Kubuntu. Но когда система системных настроек ожидает нажатия клавиши к программе, ничего не происходит для большинства клавиш, когда я нажимаю их. Исключение разрезается, копирование и вставка: эти три я могу назначить Ctrl + X, Ctrl + C и Ctrl + C, и они обычно работают в приложениях (и, когда я нажимаю их в системных настройках, правильное имя ключа даже отображается).
Итак, как получить распознавание других специальных ключей?
Сначала я заметил, что различные клавиатуры Sun перечислены в Системных настройках/Устройствах ввода/Клавиатуре/Модели клавиатуры. Поэтому я выбрал свою, тип 7, с английской раскладкой.
Затем я использовал xev
и заметил, что при нажатии любой из специальных клавиш они распознаются, и отображается код клавиши, правильное название и клавишная комбинация.
Также, копаясь в различных клавиатурных файлах X11, становится ясно, что поддержка клавиатуры Sun определенно должна быть, по крайней мере, в X.
После множества ошибок, в конце концов, я использовал xmodmap
, чтобы присвоить специальным клавишам высокие значения функциональных клавиш. Я поместил команды в файл скрипта, который я вызываю sunkeys
, который содержит:
#!/bin/bash
# Assign F13 to F23 to the special extra Sun keyboard keys so that an action
# can be assigned to them. But Cut, Copy and Paste seem to work anyway.
if [[ -n "$1" ]]; then
sleep "$1"
fi
setxkbmap -option ctrl:ralt_rctrl # Right Alt === Right Ctrl
xmodmap -e "keycode 146 = F13" # Help
xmodmap -e "keycode 136 = F14" # Stop
xmodmap -e "keycode 137 = F15" # Again
xmodmap -e "keycode 138 = F16" # Props
xmodmap -e "keycode 139 = F17" # Undo
xmodmap -e "keycode 140 = F18" # Front
#xmodmap -e "keycode 141 = F19" # Copy
xmodmap -e "keycode 142 = F20" # Open
#xmodmap -e "keycode 143 = F21" # Paste
xmodmap -e "keycode 144 = F22" # Find
#xmodmap -e "keycode 145 = F23" # Cut
(Я сейчас приду в спящий режим)
Функциональные клавиши от F13 до F23 находятся не на клавиатуре, а в системе X, и kubuntu System Settings знает о них, и при их нажатии они позволяют назначить им что-то.
Строка setxkbmap
перепрограммирует правую клавишу AltGraph на правую клавишу управления.
Но хотя при запуске sunkeys
из командной строки программирует клавиши нормально, когда я ставлю sunkeys
в конце моего файла ~/.profile
, клавиши не программировались при перезагрузке. Оказывается, по каким-то причинам должна быть задержка перед запуском xmodmap
, следовательно, sleep
бизнес в скрипте выше. Таким образом, в конце моего ~/.профиля файл теперь у меня есть строка
~/bin/sunkeys 15 &
Это делает скрипт sunkeys сна в течение 15 секунд, прежде чем он делает xmodmap
команды. Скрипт и
в конце строки sunkeys
говорит оболочке продолжить загрузку, пока sunkeys
спит. Без и
введите пароль при входе в систему, после чего система будет казаться зависающей в течение 15 секунд.
Теперь у меня есть все дополнительные клавиши, выполняющие очевидные полезные функции. Я назначаю Ctrl+S (= сохранить в большинстве приложений) большой клавише справки. А Ctrl++ и Ctrl+- for soom in and out к неочевидным клавишам Front и Props, так как они находятся рядом друг с другом.
В качестве бонуса клавиша Compose на самом деле делает то, что должна, без дальнейших изменений: для входа в кафе c
I тип c
a
f
Compose
e
'
.
Обновление: Я выполнил быструю пробную загрузку с USB-накопителя kubuntu 20.04 и выяснилось, что System Settings видит большинство специальных клавиш и отображает их имена правильно, за исключением Front и Props. Поэтому, когда я в конце концов обновлюсь, я все равно буду использовать эту технику.