![键盘布局改变时 Xbindkeys 不会触发某些按键](https://linux22.com/image/984887/%E9%94%AE%E7%9B%98%E5%B8%83%E5%B1%80%E6%94%B9%E5%8F%98%E6%97%B6%20Xbindkeys%20%E4%B8%8D%E4%BC%9A%E8%A7%A6%E5%8F%91%E6%9F%90%E4%BA%9B%E6%8C%89%E9%94%AE.png)
我用绑定键将一些鼠标按钮与按键进行映射。
但是,当我更改键盘布局时,xbindkeys 不会在新布局上模拟一些已分配的键。当我更改为以前的布局时,它可以正常工作。
停止工作的组合是:
# Present desktops
"xte 'key Super_L'"
b:10 + release
# Zoom
"xte 'keydown Super_L' 'keydown Alt_L' 'key 8' 'keyup Super_L' 'keyup Alt_L'"
b:13 + release
在两种不同的布局中,所有的键都位于相同的位置。
我检查了一下xbindkeys -n -v
,它仍然可以识别鼠标按钮,但xbindkeys
不会触发相关的键。
布局如下en
:
Button release !
e.xbutton.button=10
e.xbutton.state=16
"xte 'key Super_L'"
Release + m:0x0 + b:10 (mouse)
got screen 0 for window d3
Start program with fork+exec call
更改布局后es
:
Button press !
e.xbutton.button=10
e.xbutton.state=16
Button release !
e.xbutton.button=10
e.xbutton.state=8208
答案1
这是 xbindkeys 中的一个错误。您需要下载最新源代码 (1.8.6) 并应用补丁 (fix_layout.patch)。讨论的错误这里。
修复布局.补丁
From d4a943caa3d700a5edb18d5ab528e8cf7f6d54c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alberto=20S=E1nchez=20Molero?= <[email protected]>
Date: Mon, 10 Feb 2014 21:11:05 +0100
Subject: Fix keyboard layout problems - Ignore 13th and 14th bits of button
state
Author: Alberto Sanchez Molero <[email protected]>
---
xbindkeys.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/xbindkeys.c b/xbindkeys.c
index b0adef9..5b1b86b 100644
--- a/xbindkeys.c
+++ b/xbindkeys.c
@@ -377,7 +377,7 @@ event_loop (Display * d)
printf ("e.xbutton.state=%d\n", e.xbutton.state);
}
- e.xbutton.state &= ~(numlock_mask | capslock_mask | scrolllock_mask
+ e.xbutton.state &= 0x1FFF & ~(numlock_mask | capslock_mask | scrolllock_mask
| Button1Mask | Button2Mask | Button3Mask
| Button4Mask | Button5Mask);
@@ -409,7 +409,7 @@ event_loop (Display * d)
printf ("e.xbutton.state=%d\n", e.xbutton.state);
}
- e.xbutton.state &= ~(numlock_mask | capslock_mask | scrolllock_mask
+ e.xbutton.state &= 0x1FFF & ~(numlock_mask | capslock_mask | scrolllock_mask
| Button1Mask | Button2Mask | Button3Mask
| Button4Mask | Button5Mask);
--
cgit v1.0