我有一台带瑞典键盘布局的笔记本电脑,键盘上一切都运行良好。由于受伤,我使用外部人体工学 USB 键盘,这是我遇到困难的地方。
外接键盘没有Control_R
或 的键ALT-GR
(我猜是ALT_R
),这会带来麻烦,因为在瑞典语键盘布局中输入@
、$
和€
或{}
都[]
使用。ALT-GR
更新::事实并非如此。键盘配有两个控制键,但由于自定义重新映射而出现问题,请阅读如何解决该问题这里。完全重置后,我发现外部键盘也有Alt-GR
(由 xev 显示ISO_Level3_Shift
)(尽管反引号很难找到)。::更新结束
键盘具有内置重新映射功能以及宏功能,但无法将按键从板载键盘重新映射到外部键盘(据我所知)
我想将外接键盘上的某个键设置为新的键码(例如Control_R
或ALT_R
,然后将其重新映射到充当ALT-GR
- 这可能吗?我不想要键码的原因Control_L
是,如果我重新映射它,那么另一个 Control 键也会被重新映射。
使用 xev,我检查了单击ALT-GR
板载键盘上的 键会触发什么键码,即keycode 108 (keysym 0xfe03, ISO_Level3_Shift)
。经过一番研究,我注意到这不是该ALT-GR
键的预期功能,但该键的工作方式与我预期的一样。
使用 xev 我还检查了我希望使用的外部键盘上的键的输出ALT-GR
:keycode 105 (keysym 0xffe3, Control_L)
。
外部键盘上的另一个键输出完全相同的内容,该键是我使用的键Control_L
,我希望它是ALT_GR
多余的。
我尝试过 xmodmap 看看是否能得到我需要的东西,但遗憾的是,没有成功。以下是一些场景。
xmodmap -e "keycode 105 = Alt_R"
#=> 这将禁用两个控制键,并且不起作用ALT-GR
,实际上该键不起作用。
xmodmap -e "keycode 105 = ISO_Level3_Shift"
#=> 与上相同
有办法解决这些问题吗?
设置:
- Ubuntu 13.10
- 外接 USB 键盘 (Kinesis 优势专业版)
答案1
切换到虚拟控制台(CTRL++ )并运行ALTF1
showkey -s
这将打印出按键的扫描码,因此只需按下左右CTRL键并查看它们是否具有相同的扫描码。验证后,等待 10 秒,不要按任何键,这样showkey
程序就可以返回。然后切换回 X ( ALT+ F7)。
如果扫描码不同,那么就有希望以不同的方式重新映射这些键(因为内核认为它们不同),如果扫描码相同,那么就没有办法进行不同的重新映射。
答案2
如果有两个键具有相同的扫描码,则将这些键重新映射到另一个操作将同时重新映射这两个键。如果两个键具有相同的扫描码,则无法区分这两个不同的键(据我所知)。
showkey -s
正如@falconer 所建议的,您可以通过在虚拟控制台中检查来查看两个键实际上是不同还是相同。记住如何切换回 X ( ALT+ F7),这样您就不会卡在虚拟控制台中。
如果您按下两个希望以不同方式映射的键,并且这两个键在这里给出相同的输出,那么您需要寻找另一种解决方案。
您所说的外部键盘确实有一些键,其扫描码映射到您建议的操作,而这些操作缺失(Control_L
和Control_R
) - 我建议您将键盘重置为其默认设置,然后再次使用 xev 检查按键的输出。
确保您以正确的操作系统设置开始,在您的键盘上它们是:
=++w适用于窗户。
=++p适用于 PC(非 Windows)。
=++m适用于 Mac。
在开始重新映射之前进行设置,可以让您获得所需的所有扫描码。
至于问题Alt-GR,ISO_Level3_Shift
应该是此键的正确操作(据我所知)。具有该操作的键会Alt-GR正确触发行为。
此外,在篡改扫描代码和操作时,最好使用类似这样的软件基蒙它会告诉您正在按下哪个键或组合键。