我最近为我的 OpenSuSE 15.2 配备了 KDE 5 和 Sun Type 7 键盘,现在想使用其左侧边缘的功能键来实现各种系统范围的快捷键。唯一的问题是,在 KDE 控制中心的快捷方式列表中,其中一些键被简单地忽略:
帮助、剪切、复制、粘贴和打开键被识别为这样,而取消、重做、撤消、属性、前景和查找则不然,我不知道为什么。它们都发出自己的扫描码,并将xkb
它们映射到相应的按键符号。例如,以下是 Properties 键发出的内容(来自 的输出xev
):
KeyPress event, serial 40, synthetic NO, window 0x7800001,
root 0x561, subw 0x0, time 3103717, (-256,541), root:(1374,570),
state 0x10, keycode 138 (keysym 0x1005ff70, SunProps), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
这些键有什么问题吗?这是我的xkb
配置供您参考:
╭─jacek@epica ~
╰─➤ setxkbmap -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules: evdev
model: pc102
layout: de
variant: pl
options: terminate:ctrl_alt_bksp,altwin:meta_win,lv3:ralt_switch,compose:menu
Trying to build keymap using the following components:
keycodes: evdev+aliases(qwertz)
types: complete
compat: complete
symbols: pc+de(pl)+inet(evdev)+terminate(ctrl_alt_bksp)+altwin(meta_win)+level3(ralt_switch)+compose(menu)+terminate(ctrl_alt_bksp)
geometry: pc(pc102)
更新:我查看了当前的xkb
配置,发现该symbols/inet
文件中有一个完整的块专用于专有的 Sun Type 6/7 功能键:
partial alphanumeric_keys
xkb_symbols "evdev" {
key <MUTE> { [ XF86AudioMute ] };
key <VOL-> { [ XF86AudioLowerVolume ] };
key <VOL+> { [ XF86AudioRaiseVolume ] };
key <POWR> { [ XF86PowerOff ] };
key <STOP> { [ Cancel ] }; // KDE ignores me!
key <AGAI> { [ Redo ] }; // KDE ignores me!
key <PROP> { [ SunProps ] }; // KDE ignores me!
key <UNDO> { [ Undo ] }; // KDE ignores me!
key <FRNT> { [ SunFront ] }; // KDE ignores me!
key <COPY> { [ XF86Copy ] };
key <OPEN> { [ XF86Open ] };
key <PAST> { [ XF86Paste ] };
key <FIND> { [ Find ] };
key <CUT> { [ XF86Cut ] };
key <HELP> { [ Help ] };
key <LNFD> { [ Linefeed ] };
};
这意味着键码和符号已注册在xkb
正确的方式注册的,但不幸的是,它是 KDE 的控制中心,它忽略了 Sun 特定的键符号(请参阅上面的评论)。这是否意味着我必须向 KDE 人员提交票据?
答案1
默认情况下为 Sun 7 键盘提供了两个选项
- 默认的 Sun 7 映射使用您发现 KDE 和 Gnome 都无法识别的键绑定Cancel Redo SunProps Undo SunFront
- 该
suncompat
选项将所有左键绑定到功能键,但与顶行功能键重叠,并绑定到KDE 和 Gnome 都无法识别的XF86AudioMute XF86AudioLowerVolume XF86AudioRaiseVolume XF86PowerOff前缀符号。Sun
因此,这两种默认配置都以不同的方式存在错误。对此有 3 种可能的修复方法:
- 使用
xmodmap
正确地重新映射键,但这已经过时了,并且被 KDE / Gnome 中的多个东西踩踏 - 创建一个新的正确的 xkb 绑定并将其作为错误补丁提交(我一直想这样做,但还没有抽出时间——也许很快,如果我这样做的话,我会在这里更新内容)
- 提交 KDE 和 Gnome 的错误报告以识别丢失的符号
答案2
在收到一些好的提示(谢谢!)后,我发现它是Evdev Standardized Keycodes
文件部分中的关键符号symbols/inet
导致了 KDE 的问题:大多数符号,这确实不是以 , 开头XF86
,由于某种神秘的原因(可能是一个错误?)被 KDE 忽略,所以我只是用一些已经存在的 XF86 键符号替换它们,这最适合我的需要。例如,我将键码Cancel
的键符号替换<STOP>
为XF86Stop
.然后,KDE 的热键定义对话框会识别该键。