기능키를 더 많이 활용하려고 합니다. 창 관리자에서 기능을 할당할 수 있도록 물리적 F1키가 F12나타나기를 원합니다 (예: 을 누를 때마다 활성 채팅 창으로 전환 ).F21
F32
F21
F22
하지만 여전히 일반 기능 키에 액세스하고 싶기 때문에 물리적 Caps Lock키를 누른 상태에서 키 누르기 F1를 생성 할 수 있기를 원합니다. F1
다른 수정자에 관한 한 동일하게 유지되면 좋을 것이므로 Shift+ 는 (가 아님 ) F1을 산출합니다 . 간단히 말해서:Shift + F1
Shift + F21
- F1->
F21
- Caps+ F1->
F1
- Shift+ F1->
Shift + F1
(변경되지 않음) - Alt+ F1->
Alt + F1
(변경되지 않음) - 등.
따라서 처음 두 점만 기본 레이아웃을 변경하면 됩니다.
다음 XKB 조각으로 이것을 시작하려고 시도했는데 F21
F 키를 생성하는 동안 F1누르고 있으면 원래 F 키가 생성되지 않습니다.Caps Lock
partial
xkb_types "hyper" {
virtual_modifiers Alt,Hyper;
type "HYPER" {
modifiers= Hyper+Control+Alt;
map[Hyper]= Level2;
map[Control+Alt]= Level3;
level_name[Level1]= "Extra";
level_name[Level2]= "Normal";
level_name[Level3]= "Normal+Ctrl+Alt";
};
};
partial function_keys
xkb_symbols "hyper_f21" {
replace key <FK01> {
type= "HYPER",
symbols[Group1]= [ F21, F1, XF86Switch_VT_1 ]
};
replace key <FK02> {
type= "HYPER",
symbols[Group1]= [ F22, F2, XF86Switch_VT_2 ]
};
...
};
partial modifier_keys
xkb_symbols "caps_hyper" {
replace key <CAPS> {
[ Hyper_L, Hyper_L ]
};
modifier_map Lock { <KPDL> }; # Not sure how to clear modifiers, so assign an unused key
modifier_map Mod3 { <CAPS> };
};
로드하려고 하면 다음 경고가 표시됩니다.
Warning: Type "HYPER" has 3 levels, but <FK01> has 5 symbols
Ignoring extra symbols
<FK01>
기본적으로 5개의 레벨이 있지만 3개만 재정의했기 때문에 왜 오류가 발생하는지 정말 이해가 되지 않습니다 .
F21
이 구성을 테스트했을 때 물리적 키를 눌렀을 F1때 Hyper_L
(및 Mod3
) 설정이 되었는지 확인했습니다 Caps Lock. 그러나 Caps Lock+를 누르면 대신 F1가 생성됩니다 .Mod3 + F21
F1
답변1
언제나 그렇듯, 이 문제는 문제가 게시된 직후에 수정되었습니다. 문제는 간단했습니다. Hyper_L
에 할당된 기본값을 사용하고 있었습니다. 반대로 Mod4
변경하면 작동했습니다. 그러나 실제 수정자가 여전히 필요하기 때문에 여전히 바인딩되어야 합니다 .Caps LockHyper_R
Mod3
이제 원하는 동작을 생성하는 업데이트된 구성은 다음과 같습니다.
partial
xkb_types "hyper" {
virtual_modifiers Alt,Hyper;
type "HYPER" {
modifiers= Shift+Control+Alt+Hyper;
map[Shift]= Level2;
preserve[Shift]= Shift;
map[Control]= Level2;
preserve[Control]= Control;
map[Shift+Control]= Level2;
preserve[Shift+Control]= Shift+Control;
map[Alt]= Level2;
preserve[Alt]= Alt;
map[Shift+Alt]= Level2;
preserve[Shift+Alt]= Shift+Alt;
map[Control+Alt]= Level3;
preserve[Control+Alt]= Control+Alt;
map[Shift+Control+Alt]= Level2;
preserve[Shift+Control+Alt]= Shift+Alt;
map[Hyper]= Level2;
level_name[Level1]= "Extra";
level_name[Level2]= "Normal";
level_name[Level3]= "Ctrl+Alt";
};
};
partial function_keys
xkb_symbols "hyper_f21" {
replace key <FK01> {
type= "HYPER",
symbols[Group1]= [ F21, F1, XF86Switch_VT_1 ]
};
replace key <FK02> {
type= "HYPER",
symbols[Group1]= [ F22, F2, XF86Switch_VT_2 ]
};
...
};
partial modifier_keys
xkb_symbols "caps_hyper" {
replace key <CAPS> {
[ Hyper_R ]
};
# Remove Hyper (Hyper_L/Hyper_R) from Mod4, was added by "pc" layout
modifier_map none { <HYPR> };
# Now make physical caps lock (mapped to Hyper_R above) control Mod3. Mod3 is
# associated with the virtual modifier "Hyper" because the existing XKB config
# links Hyper_L and Hyper_R with this virtual modifier. Therefore Mod3 becomes
# the virtual modifier "Hyper" because they both share the same keysym Hyper_R.
modifier_map Mod3 { <CAPS> };
};
다시 말하면 다음과 같습니다.
- F1->
F21
- Caps+ F1->
F1
- Shift+ F1->
Shift + F1
(변경되지 않음) - Alt+ F1->
Alt + F1
(변경되지 않음) - 기타 - 나머지는 변경되지 않음