重新映射生成多个扫描代码的密钥


33

我有一台ThinkPad W540。在其键盘上,数字键盘上方有四个多媒体键。这些键中的两个键生成对应于键Win_L+ LWin_L+ 组合的键代码(显然还有扫描代码)E。换句话说,对于生成Win_L+ 的键L
showkey --scancodes返回以下内容:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

setkeycodes命令需要单字节未转义的或转义的两个字节的序列来表示扫描代码,并且showkey为我提供了更多的方式,因此我无法通过简单的方式将该键重新映射到系统中的空闲键码之一setkeycodes <scancode> <keycode>

我非常感谢有任何提示可以将键重新映射到其他东西,而这些东西不能简单地复制键盘上现有的一个键组合。


1
您可能需要看一下:与键盘布局无关的快捷键
terdon

1
我认为这可能很棘手:至少在较旧的Thinkpad上,这种映射是由板载控制器而不是操作系统完成的。
mirabilos 2014年

1
我有一个Microsoft All-in-One媒体键盘,它也有同样的问题,您能找到解决方案吗?
osolmaz 2015年

5
不久前,我在Thinkpad t61上进行了类似的操作/etc/acpi/events ,方法是使用acpid包装中的键映射键,并在按下这些功能键时定义一个动作。
cesar

2
您是否将Win_L设置作为X窗口中的修改器?这是我的默认设置。
mcr

Answers:


1

您可以分两步执行此操作:

  1. 捕捉按键组合
  2. 模拟键入不同的键。

您可以使用xchainkeys1[xdotool][2]2

要创建模拟的新键xdotool,选项--clearmodifierskey可以中和原有的模拟调节剂按是很重要的:

xdotool key --clearmodifiers Shift+a

这应该输入一个大写字母A作为测试。

在in的配置xchainkeys~/.config/xchainkeys/xchainkeys.conf,我们可以将命令绑定到组合键:

W-l :exec xdotool key --clearmodifiers Shift+a

现在,组合键WinlWin左或右的作用相同),以及生成Win_L + L的键,应创建一个大写字母A

(这两个部分都有许多其他程序可用。首先,可以使用桌面环境的热键配置,但我更喜欢使其不依赖于DE。)


2
如果我没记错的话,此解决方案的问题与简单地使用所述键组合来触发一个动作相同-该动作不会仅由该键来触发,只需按下产生相同键的实际组合即可代码也会产生相同的结果。换句话说,它不满足“将键重新映射到不简单地复制现有键组合之一的其他键”的条件。但是我很感谢您的努力。
moonwalker

3
是的,确实如此-我现在不知道您所说的那句话是什么意思。但是看起来您的按键会在硬件中(即键盘固件中)产生两个按键代码-因此,我看不到有任何争执,除了您可以检测到人工按下按键的时间(“修饰键向下”,“其他按键”, “修改器”。嗯...也许涉及焊接的解决方案更简单;)
Volker Siegel

1
@moonwalker您可以尝试重新映射Win_L而不是另一个键,并检查它是否也重新映射另一个人的修饰符吗?
Volker Siegel

1
嗯,我会不会失去Win_L + R,Win + Break,Win + L,Win +等组合。在这种情况下?
moonwalker

1
不,我不这么认为。Win-L是,Win-Shift-l但是您也可以将键组合链映射到命令。喜欢Win-a和之后b。没有时Win-ab行为正常。xchainkeys我认为,这是迄今为止最有用的功能,而且非常独特。
Volker Siegel

-2

这是我在Thinkpad Yoga上所做的操作,以便将反斜杠/竖线键重新绑定到正确的键。因为由于某些原因,在每个Linux虚拟机中,它将反斜杠\管道(\ |)键解释为小于(<)键。

首先执行命令: xev

按所需的键以获取要重新绑定的键的键码:

xev KeyPress事件输出

在此示例中,键码为94,操作为“少”,但我们希望它具有反斜杠和小节(也称为“ pipe”)的操作

将键码94重新映射到反斜杠和Bar键,也称为“ pipe”:

xmodmap -e 'keycode 94 = backslash bar'

现在让它持久化:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

将以下内容返回到文件~/.Xmodmap

keycode  94 = backslash bar backslash bar

然后,您必须创建以下文件以使其持久化:

echo "xmodmap .Xmodmap" > ~/.xinitrc

1
反斜杠/竖线键生成单个扫描代码,该主题涉及重新映射生成多个扫描代码的键。
Moonwalker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.