Я пытаюсь переназначить клавишу Scroll Lock так, чтобы она выдавала код любой из клавиш Windows.
Прежде всего, я сбрасываю текущую раскладку клавиатуры:
xkbcomp $DISPLAY original-dump
Затем найдите коды интересующих меня клавиш:
cat original-dump | grep SCLK
<SCLK> = 78;
cat original-dump | grep LWIN
<LWIN> = 133;
Теперь я вывожу названия компонентов в файл:
setxkbmap -print > original-components
Отредактируйте файл, чтобы добавить мою модификацию кода ключа:
xkb_keymap {
xkb_keycodes {
include "evdev+aliases(qwerty)"
// Remap Scroll-lock to the keycode of LWIN(133)
<SCLK> = 133;
};
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
Сохраните файл выше как modified-components и запустите:
xkbcomp modified-components $DISPLAY
Снова дамп:
xkbcomp $DISPLAY original-dump
Проверьте коды клавиш:
cat another-dump | grep SCLK
<SCLK> = 133;
Пока все хорошо, но когда я запускаю xev
, код клавиши Scroll Lock по-прежнему78.
Если я запущу:
xmodmap -e "keycode 78 = Super_L"
ксеввсе еще показывает мне78, но по крайней мере ярлыки, которые я создал в XFCE для LWIN и RWIN, работают.
Я хотел бы знать, что я делаю не такхкб. Спасибо.
решение1
Попробовал следующий новый подход (успешно)
Создал новый файл с именем sclkfile
в /usr/share/X11/xkb/symbols/
каталоге и добавил следующее содержимое:
// Make the Scroll Lock key a left Super.
xkb_symbols "sclk_super" {
replace key <SCLK> { [ Super_L ] };
modifier_map Mod4 { <SCLK> };
};
Добавлено новое правило в /usr/share/X11/xkb/rules/evdev
:
sclkoption:sclk_super = +sclkfile(sclk_super)
И описания правила в /usr/share/X11/xkb/rules/evdev.lst
:
! option
sclkoption Scroll Lock behaviour
sclkoption:sclk_super Scroll Lock is Super
Здесь тоже /usr/share/X11/xkb/rules/evdev.xml
:
<configItem>
<name>sclkoption</name>
<description>Scroll Lock behaviour</description>
</configItem>
<option>
<configItem>
<name>sclkoption:sclk_super</name>
<description>Scroll Lock is Super</description>
</configItem>
</option>
Наконец запустите:
$ setxkbmap -option sclkoption:sclk_super
Ошибок нет, и когда я печатаю компоненты моего макета:
$ setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)+sclkfile(sclk_super)" };
xkb_geometry { include "pc(pc105)" };
};
Новое правило есть.
Теперь, если я запущу xev
:
keycode 78 (keysym 0xffeb, Super_R)
Код клавиши по-прежнему 78, но символ клавиши — Super_R.Успех.