Как сделать дополнительные ключи на моей клавиатуре Sun Type 7 в Kubuntu 18.04?

Я прошу и отвечаю на свой вопрос здесь, если это полезно для кого-то другого, так как это затронуло меня долгое время, чтобы придумать решение !

У меня есть клавиатура Sun Microsystems типа 7, которая имеет набор из 11 дополнительных клавиш с правой стороны, и я хотел бы иметь возможность программировать их, чтобы сделать что-то полезное в Kubuntu. Но когда система системных настроек ожидает нажатия клавиши к программе, ничего не происходит для большинства клавиш, когда я нажимаю их. Исключение разрезается, копирование и вставка: эти три я могу назначить Ctrl + X, Ctrl + C и Ctrl + C, и они обычно работают в приложениях (и, когда я нажимаю их в системных настройках, правильное имя ключа даже отображается).

Итак, как получить распознавание других специальных ключей?

0
задан 7 February 2021 в 19:27

1 ответ

Сначала я заметил, что различные клавиатуры 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. Поэтому, когда я в конце концов обновлюсь, я все равно буду использовать эту технику.

0
ответ дан 18 March 2021 в 23:36

Другие вопросы по тегам:

Похожие вопросы: