Вопрос или проблема
Я использую SharpKeys на своем компьютере с Windows 8, чтобы переназначить клавишу Caps Lock на F13, чтобы я мог использовать ее как горячую клавишу/модификатор в других программах. Это работает хорошо в приложениях Windows — например, http://keycode.info/ правильно сообщает, что я нажал F13, когда нажимаю Caps Lock.
Однако это, похоже, не работает в vcxsrv, который обрабатывает клавишу как KP_Enter
, то есть Enter на цифровой клавиатуре. Выходные данные от xev
идентичны, независимо от того, нажимаю ли я Caps Lock или настоящую клавишу Enter на цифровой клавиатуре. Это поведение не зависит от Num Lock, аргумента -keyhook
для vcxsrv или аргумента -xkbvariant nodeadkeys
для vcxsrv, которые я смог придумать сам. Насколько я могу судить, это единственная клавиша, которая не передается корректно.
Если это важно, я использую PuTTY для подключения по SSH к виртуальной машине Fedora 28, чтобы запускать X-приложения, которые я использую (например, xev
).
Я столкнулся с этой проблемой в x410 (который, вероятно, также является производным от vcxsrv). Следующее не является прямым ответом, но один из способов решения этой проблемы с помощью autohotkey:
В вашем AHK скрипте:
Используйте некоторые условия для контекстов, где вам могут понадобиться эти клавиши:
#HotIf WinActive("ahk_class X410_XAppWin") or WinActive("ahk_exe vncviewer.exe") or WinActive("ahk_exe nxplayer.bin") or ...
Внутри условия отправьте сырую клавишу так (и закройте блок):
*f13:: Send("{Blind}{vk7csc0b7}")
#HotIf
Теперь используйте xmodmap
, чтобы переназначить код клавиши — поместите это в файл и передайте его как аргумент для xmodmap
:
keycode 191 = F13 F13
Все это очень неаккуратно и использует коды клавиш, которые я имею из какого-то очень старого контекста, так что я даже не могу вспомнить, как я до этого дошел. Надеюсь, кто-то сможет найти какой-то лучший способ сделать все это и сделать более организованным.
Ответ или решение
Проблема, с которой вы столкнулись при использовании клавиши F13 в vcxsrv, весьма распространенная, и, к счастью, ее можно решить несколькими способами. Вот подробное руководство, которое поможет вам перенастроить клавишу F13 так, чтобы она работала корректно в X-системах.
1. Использование xmodmap
Первый способ — это использование xmodmap
для переназначения клавиши. Вам нужно создать файл для конфигурации и загрузить его в X-сессии.
-
Создайте файл
~/.Xmodmap
и добавьте в него следующую строку:keycode 191 = F13 F13
Здесь
191
— это код клавиши, который отвечает за F13. Вы можете узнать код вашей клавиши, воспользовавшись командойxev
и нажав клавишу Caps Lock. В выводеxev
найдите соответствующийkeycode
. -
После создания файла запустите
xmodmap
, чтобы применить изменения:xmodmap ~/.Xmodmap
Таким образом, xmodmap
переназначит вашу клавишу Caps Lock (что вы сделали с помощью SharpKeys) на F13.
2. Использование AutoHotkey
Если xmodmap
не решает вашу проблему, можно воспользоваться AutoHotkey для перенаправления клавиши в вашей системе Windows:
-
Установите AutoHotkey, если он еще не установлен.
-
Создайте новый скрипт AutoHotkey и добавьте в него следующий код:
#HotIf WinActive("ahk_class X410_XAppWin") or WinActive("ahk_exe vncviewer.exe") or WinActive("ahk_exe nxplayer.bin") *f13:: Send("{Blind}{vk7csc0b7}") #HotIf
Замените ahk_class X410_XAppWin
и другие значения на соответствующие вашим приложениям.
- Сохраните скрипт и запустите его. Теперь, когда вы активируете ваше приложение (например, vcxsrv), нажатие F13 будет отправлять нужный код.
3. Проверка параметров запуска vcxsrv
Убедитесь, что при запуске vcxsrv вы используете правильные параметры. Вот пример настройки:
vcxsrv -multiwindow -clipboard -host -xkb -nolock -keyhook
Заключение
Согласно вышеописанным методам, вы должны быть в состоянии перенастроить клавишу F13 так, чтобы она правильно работала в vcxsrv, как и ожидалось. Попробуйте сначала метод с xmodmap
, а если он не сработает, используйте скрипт AutoHotkey для более специфичной настройки в Windows. Если что-то пойдет не так или у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.