总结
我刚买了一个罗技 T630。这是一款蓝牙鼠标,支持多种键盘事件,通过手势(PDF)。这些手势很好,但我用处不大。我很难摆脱它们。
我想按照优先级从高到低的顺序执行以下操作:
- 禁用这些手势
- 重新映射手势(我认为,如果不破解固件或对 Windows/OS X 设备驱动程序进行逆向工程,这是不可能的)
我不想:
- 使用 Windows
- 禁用全部手势
欲了解更多信息,请继续阅读...
按钮和手势
十三个可能的鼠标事件是:
- 左键单击
- 中键单击
- 右键点击
- 向上滑动
- 向下滚动
- 向左滚动
- 向右滚动
- 向左滑动边缘
- 向右滑动边缘
- 双指向左滑动
- 双指向右滑动
- 双击
- 两指双击
前七个是按照操作系统映射方式的顺序排列的。
只有前三个是机械的,其余都使用触摸表面:
GUI 选项
设置在Ubuntu Trusty很轻松,但它对配置这些其他手势的支持很少。
这些手势与以下内容无关:
- 触摸板(
synaptics
未运行) - 可访问性
- 热角
- 标准鼠标手势
所有与这些相关的设置都已检查并且全部关闭。
命令行设置
lomoco
用于帮助配置 Logitech USB 鼠标特殊功能的实用lomoco
程序不适用。
xinput
我认为xinput
可能会提供一些帮助:
$ xinput --list | grep pointer
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Ultrathin Touch Mouse id=13 [slave pointer (2)]
$ xinput --list-props 13
Device 'Ultrathin Touch Mouse':
Device Enabled (144): 1
Coordinate Transformation Matrix (146): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (266): 0
Device Accel Constant Deceleration (267): 1.000000
Device Accel Adaptive Deceleration (268): 1.000000
Device Accel Velocity Scaling (269): 10.000000
Device Product ID (261): 1133, 45069
Device Node (262): "/dev/input/event11"
Evdev Axis Inversion (270): 0, 0
Evdev Axes Swap (272): 0
Axis Labels (273): "Rel X" (154), "Rel Y" (155), "Rel Horiz Wheel" (746), "Rel Vert Wheel" (265)
Button Labels (274): "Button Left" (147), "Button Middle" (148), "Button Right" (149), "Button Wheel Up" (150), "Button Wheel Down" (151), "Button Horiz Wheel Left" (152), "Button Horiz Wheel Right" (153), "Button Side" (1032), "Button Extra" (1033), "Button Unknown" (264), "Button Unknown" (264), "Button Unknown" (264), "Button Unknown" (264)
Evdev Middle Button Emulation (275): 0
Evdev Middle Button Timeout (276): 50
Evdev Third Button Emulation (277): 0
Evdev Third Button Emulation Timeout (278): 1000
Evdev Third Button Emulation Button (279): 3
Evdev Third Button Emulation Threshold (280): 20
Evdev Wheel Emulation (281): 0
Evdev Wheel Emulation Axes (282): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (283): 10
Evdev Wheel Emulation Timeout (284): 200
Evdev Wheel Emulation Button (285): 4
Evdev Drag Lock Buttons (286): 0
请注意这 13 个按钮标签:
$ xinput --get-button-map "Ultrathin Touch Mouse"
1 2 3 4 5 6 7 8 9 10 11 12 13
关掉它们也没有帮助:
$ xinput --set-button-map "Ultrathin Touch Mouse" 1 2 3 4 5 6 7 0 0 0 0 0 0
例如,尽管能将鼠标中键变为左键单击:
$ xinput --set-button-map "Ultrathin Touch Mouse" 1 1 3 4 5 6 7 0 0 0 0 0 0
xmodmap
类似于xinput
,结果相同:
$ xmodmap -e "pointer = 1 2 3 4 5 6 7 0 0 0 0 0 0"
inputkbd
elmicha 推荐以下,这是在内核级别工作的,试图使手势导致键盘事件为空。应该可以工作,但这里也没有运气,使用以下过程:
$ sudo input-kbd 4 > keymap # note the 4 is from /dev/input/event4
# edit the keymap to map any combination of keys to either 0 or 240 (KEY_UNKNOWN)
# e.g. change this:
# 0x700e0 = 29 # KEY_LEFTCTRL
# to this:
# 0x700e0 = 0 # KEY_LEFTCTRL
# or this:
# 0x700e0 = 240 # KEY_LEFTCTRL
$ sudo input-kbd -f keymap 4
$ sudo input-kbd 4 # should return the updated keymap
执行此操作后,键盘映射没有任何变化。
xkbcomp
这是由X
input hacker建议的彼得·胡特勒,他当然应该知道自己在做什么。然而,还是没有运气:
$ xkbcomp -xkb $DISPLAY t630.xkb
# edit the keyboard description and replace the definition of any key to NoSymbol or VoidSymbol
# e.g. change this:
# key <LCTL> { [ Control_L ] };
# to this:
# key <LCTL> { [ NoSymbol ] };
# or this:
# key <LCTL> { [ VoidSymbol ] };
$ sudo xkbcomp -i 8 t630.xkb $DISPLAY # here the 8 is the id in xinput, names don't work
$ xkbcomp -xkb -i 8 $DISPLAY - # should return the updated keyboard description
这样做之后,键盘描述没有任何变化。
Peter 认为,这可能是因为人们X
混淆了设备是键盘还是鼠标的性质,有点像这个错误有相反的问题。这也许可以解释为什么所有其他预期项目都不起作用。但是,他还表示,evdev
出于同样的原因,使用也不应该起作用。
evdev
乍一看似乎可行,但实际上却不行。它尝试利用通用输入驱动程序来X
设置按钮映射,方法是将以下内容附加到/usr/share/X11/xorg.conf.d/10-evdev.conf
或/etc/X11/xorg.conf.d/10-evdev.conf
:
# custom for Logitech Ultrathin Touch mouse
Section "InputDevice"
Identifier "Logitech bluetooth Touch Mouse"
Driver "evdev"
Option "Name" "Ultrathin Touch Mouse"
Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
EndSection
Section "InputClass"
Identifier "Ultrathin Touch Mouse"
Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
EndSection
这似乎在/var/log/Xorg.0.log
(使用grep EE
)中没有错误地工作,并xinput
确认了按钮映射,但它并没有产生预期的效果。
这是但已知它适用于 T631。
键盘事件
我认为问题在于这些手势会产生键盘事件:
$ sudo evemu-record /dev/input/event4 | grep "E: "
# swipe edge right
E: 0.000000 0004 0004 458976 # EV_MSC / MSC_SCAN 458976
E: 0.000000 0001 001d 0001 # EV_KEY / KEY_LEFTCTRL 1
E: 0.000000 0004 0004 458979 # EV_MSC / MSC_SCAN 458979
E: 0.000000 0001 007d 0001 # EV_KEY / KEY_LEFTMETA 1
E: 0.000000 0004 0004 458795 # EV_MSC / MSC_SCAN 458795
E: 0.000000 0001 000f 0001 # EV_KEY / KEY_TAB 1
E: 0.000000 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 0.002980 0004 0004 458976 # EV_MSC / MSC_SCAN 458976
E: 0.002980 0001 001d 0000 # EV_KEY / KEY_LEFTCTRL 0
E: 0.002980 0004 0004 458979 # EV_MSC / MSC_SCAN 458979
E: 0.002980 0001 007d 0000 # EV_KEY / KEY_LEFTMETA 0
E: 0.002980 0004 0004 458795 # EV_MSC / MSC_SCAN 458795
E: 0.002980 0001 000f 0000 # EV_KEY / KEY_TAB 0
E: 0.002980 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
# swipe edge left
E: 3.306977 0004 0004 458978 # EV_MSC / MSC_SCAN 458978
E: 3.306977 0001 0038 0001 # EV_KEY / KEY_LEFTALT 1
E: 3.306977 0004 0004 458979 # EV_MSC / MSC_SCAN 458979
E: 3.306977 0001 007d 0001 # EV_KEY / KEY_LEFTMETA 1
E: 3.306977 0004 0004 458866 # EV_MSC / MSC_SCAN 458866
E: 3.306977 0001 00c1 0001 # EV_KEY / KEY_F23 1
E: 3.306977 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 3.310979 0004 0004 458978 # EV_MSC / MSC_SCAN 458978
E: 3.310979 0001 0038 0000 # EV_KEY / KEY_LEFTALT 0
E: 3.310979 0004 0004 458979 # EV_MSC / MSC_SCAN 458979
E: 3.310979 0001 007d 0000 # EV_KEY / KEY_LEFTMETA 0
E: 3.310979 0004 0004 458866 # EV_MSC / MSC_SCAN 458866
E: 3.310979 0001 00c1 0000 # EV_KEY / KEY_F23 0
E: 3.310979 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
# two finger double tap
E: 10.225976 0004 0004 458983 # EV_MSC / MSC_SCAN 458983
E: 10.225976 0001 007e 0001 # EV_KEY / KEY_RIGHTMETA 1
E: 10.225976 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 10.229986 0004 0004 458983 # EV_MSC / MSC_SCAN 458983
E: 10.229986 0001 007e 0000 # EV_KEY / KEY_RIGHTMETA 0
E: 10.229986 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
# two finger swipe left
E: 27.934977 0004 0004 589828 # EV_MSC / MSC_SCAN 589828
E: 27.934977 0001 0113 0001 # EV_KEY / BTN_SIDE 1
E: 27.934977 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 27.937983 0004 0004 589828 # EV_MSC / MSC_SCAN 589828
E: 27.937983 0001 0113 0000 # EV_KEY / BTN_SIDE 0
E: 27.937983 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
# two finger swipe right
E: 32.513990 0004 0004 589829 # EV_MSC / MSC_SCAN 589829
E: 32.513990 0001 0114 0001 # EV_KEY / BTN_EXTRA 1
E: 32.513990 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 32.516994 0004 0004 589829 # EV_MSC / MSC_SCAN 589829
E: 32.516994 0001 0114 0000 # EV_KEY / BTN_EXTRA 0
E: 32.516994 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
至于键盘映射就此而言,这些是指:
$ sudo input-kbd 4 | grep -e KEY_LEFTCTL -e KEY_LEFTMETA -e KEY_TAB -e KEY_LEFTALT -e KEY_F23 -e KEY_RIGHTMETA -e BTN_SIDE -e BTN_EXTRA
0x700e2 = 56 # KEY_LEFTALT
0x700e3 = 125 # KEY_LEFTMETA
0x700e7 = 126 # KEY_RIGHTMETA
0x7002b = 15 # KEY_TAB
0x70072 = 193 # KEY_F23
0x700e2 = 56 # KEY_LEFTALT
0x700e3 = 125 # KEY_LEFTMETA
0x700e7 = 126 # KEY_RIGHTMETA
0x90004 = 275 # BTN_SIDE
0x90005 = 276 # BTN_EXTRA
双击似乎什么也没做。
其他参考
指出类似问题也可能会有所帮助漏洞上述鼠标不在gnome-bluetooth
密码数据库中。毋庸置疑,关于该主题的进一步评论与该错误报告无关,但参考资料可能有助于增加对该问题性质的一些看法。
这里这是 FWIW 的输出evemu-describe /dev/input/event4
。
蓝牙适配器
值得一提的是,我使用了两种不同的 USB 蓝牙适配器:
$ lsusb | grep Bluetooth
Bus 007 Device 010: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
$ lsusb | grep Bluetooth
Bus 007 Device 011: ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0
答案1
经过一番痛苦之后,我终于设法创建了一个可以做一些有用的事情的按键映射。
首先针对上一个答案提出几点说明(我暂时无法评论):
Mr back-up 提供的 fixMouse 脚本不起作用,因为有时鼠标的键盘输入在 xinput 中出现错误的名称,即在我的情况下显示:
⎡ Virtual core pointer id=2 [master pointer (3)] ... ⎜ ↳ Ultrathin Touch Mouse id=11 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ... ↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)]
另一方面,你可以使用 input-utils 中的 lsinput 来找到正确的 id:
lsinput 2>&1|grep -B5 "Ultrathin Touch Mouse" /dev/input/event12 bustype : BUS_BLUETOOTH vendor : 0x46d product : 0xb00d version : 1792 name : "Ultrathin Touch Mouse"
由于某种原因,在为鼠标转储地图时,一些代码是重复的(0x700e0 和 0x700e7 之间的代码),请小心查找并消除它们,否则您会发疯的。
将所有键码替换为 KEY_UNKNOWN 可防止随机字符的爆发,但会使特殊触摸操作变得毫无用处。我发现您可以将一些手势重新映射到有用的组合。特别是“从左侧向内滑动”发送代码 0x700e0+0x700e3+0x7002b,而“从右侧向内滑动”发送代码 0x700e3+0x700e3+0x70072。我将 0x700e3(两个手势共有)映射到 KEY_UNKNOW,以使其不受影响。然后我使用剩余的键码制作 CTRL+F8(桌面网格)和 ALT-F2(跑步者),但当然您可以生成任意两个键的任意组合。这是我的映射,复制/粘贴时要小心,不要留下空行和初始空格(它们会破坏输入关键帧):
0x700e3 = KEY_UNKNOWN 0x700e0 = KEY_LEFTCTRL 0x7002b = KEY_F8 0x700e2 = KEY_LEFTALT 0x70072 = KEY_F2 0x70004 = KEY_UNKNOWN 0x70005 = KEY_UNKNOWN 0x70006 = KEY_UNKNOWN 0x70007 = KEY_UNKNOWN 0x70008 = KEY_UNKNOWN 0x70009 = KEY_UNKNOWN 0x7000a = KEY_UNKNOWN 0x7000b = KEY_UNKNOWN 0x7000c = KEY_UNKNOWN 0x7000d = KEY_UNKNOWN 0x7000e = KEY_UNKNOWN 0x7000f = KEY_UNKNOWN 0x70010 = KEY_UNKNOWN 0x70011 = KEY_UNKNOWN 0x70012 = KEY_UNKNOWN 0x70013 = KEY_UNKNOWN 0x70014 = KEY_UNKNOWN 0x70015 = KEY_UNKNOWN 0x70016 = KEY_UNKNOWN 0x70017 = KEY_UNKNOWN 0x70018 = KEY_UNKNOWN 0x70019 = KEY_UNKNOWN 0x7001a = KEY_UNKNOWN 0x7001b = KEY_UNKNOWN 0x7001c = KEY_UNKNOWN 0x7001d = KEY_UNKNOWN 0x7001e = KEY_UNKNOWN 0x7001f = KEY_UNKNOWN 0x70020 = KEY_UNKNOWN 0x70021 = KEY_UNKNOWN 0x70022 = KEY_UNKNOWN 0x70023 = KEY_UNKNOWN 0x70024 = KEY_UNKNOWN 0x70025 = KEY_UNKNOWN 0x70026 = KEY_UNKNOWN 0x70027 = KEY_UNKNOWN 0x70028 = KEY_UNKNOWN 0x70029 = KEY_UNKNOWN 0x7002a = KEY_UNKNOWN 0x7002c = KEY_UNKNOWN 0x7002d = KEY_UNKNOWN 0x7002e = KEY_UNKNOWN 0x7002f = KEY_UNKNOWN 0x70030 = KEY_UNKNOWN 0x70031 = KEY_UNKNOWN 0x70032 = KEY_UNKNOWN 0x70033 = KEY_UNKNOWN 0x70034 = KEY_UNKNOWN 0x70035 = KEY_UNKNOWN 0x70036 = KEY_UNKNOWN 0x70037 = KEY_UNKNOWN 0x70038 = KEY_UNKNOWN 0x70039 = KEY_UNKNOWN 0x7003a = KEY_UNKNOWN 0x7003b = KEY_UNKNOWN 0x7003c = KEY_UNKNOWN 0x7003d = KEY_UNKNOWN 0x7003e = KEY_UNKNOWN 0x7003f = KEY_UNKNOWN 0x70040 = KEY_UNKNOWN 0x70041 = KEY_UNKNOWN 0x70042 = KEY_UNKNOWN 0x70043 = KEY_UNKNOWN 0x70044 = KEY_UNKNOWN 0x70045 = KEY_UNKNOWN 0x70046 = KEY_UNKNOWN 0x70047 = KEY_UNKNOWN 0x70048 = KEY_UNKNOWN 0x70049 = KEY_UNKNOWN 0x7004a = KEY_UNKNOWN 0x7004b = KEY_UNKNOWN 0x7004c = KEY_UNKNOWN 0x7004d = KEY_UNKNOWN 0x7004e = KEY_UNKNOWN 0x7004f = KEY_UNKNOWN 0x70050 = KEY_UNKNOWN 0x70051 = KEY_UNKNOWN 0x70052 = KEY_UNKNOWN 0x70053 = KEY_UNKNOWN 0x70054 = KEY_UNKNOWN 0x70055 = KEY_UNKNOWN 0x70056 = KEY_UNKNOWN 0x70057 = KEY_UNKNOWN 0x70058 = KEY_UNKNOWN 0x70059 = KEY_UNKNOWN 0x7005a = KEY_UNKNOWN 0x7005b = KEY_UNKNOWN 0x7005c = KEY_UNKNOWN 0x7005d = KEY_UNKNOWN 0x7005e = KEY_UNKNOWN 0x7005f = KEY_UNKNOWN 0x70060 = KEY_UNKNOWN 0x70061 = KEY_UNKNOWN 0x70062 = KEY_UNKNOWN 0x70063 = KEY_UNKNOWN 0x70064 = KEY_UNKNOWN 0x70065 = KEY_UNKNOWN 0x70066 = KEY_UNKNOWN 0x70067 = KEY_UNKNOWN 0x70068 = KEY_UNKNOWN 0x70069 = KEY_UNKNOWN 0x7006a = KEY_UNKNOWN 0x7006b = KEY_UNKNOWN 0x7006c = KEY_UNKNOWN 0x7006d = KEY_UNKNOWN 0x7006e = KEY_UNKNOWN 0x7006f = KEY_UNKNOWN 0x70070 = KEY_UNKNOWN 0x70071 = KEY_UNKNOWN 0x70073 = KEY_UNKNOWN 0x70074 = KEY_UNKNOWN 0x70075 = KEY_UNKNOWN 0x70076 = KEY_UNKNOWN 0x70077 = KEY_UNKNOWN 0x70078 = KEY_UNKNOWN 0x70079 = KEY_UNKNOWN 0x7007a = KEY_UNKNOWN 0x7007b = KEY_UNKNOWN 0x7007c = KEY_UNKNOWN 0x7007d = KEY_UNKNOWN 0x7007e = KEY_UNKNOWN 0x7007f = KEY_UNKNOWN 0x70080 = KEY_UNKNOWN 0x70081 = KEY_UNKNOWN 0x70082 = KEY_UNKNOWN 0x70083 = KEY_UNKNOWN 0x70084 = KEY_UNKNOWN 0x70085 = KEY_UNKNOWN 0x70086 = KEY_UNKNOWN 0x70087 = KEY_UNKNOWN 0x70088 = KEY_UNKNOWN 0x70089 = KEY_UNKNOWN 0x7008a = KEY_UNKNOWN 0x7008b = KEY_UNKNOWN 0x7008c = KEY_UNKNOWN 0x7008d = KEY_UNKNOWN 0x7008e = KEY_UNKNOWN 0x7008f = KEY_UNKNOWN 0x70090 = KEY_UNKNOWN 0x70091 = KEY_UNKNOWN 0x70092 = KEY_UNKNOWN 0x70093 = KEY_UNKNOWN 0x70094 = KEY_UNKNOWN 0x70095 = KEY_UNKNOWN 0x70096 = KEY_UNKNOWN 0x70097 = KEY_UNKNOWN 0x70098 = KEY_UNKNOWN 0x70099 = KEY_UNKNOWN 0x7009a = KEY_UNKNOWN 0x7009b = KEY_UNKNOWN 0x7009c = KEY_UNKNOWN 0x7009d = KEY_UNKNOWN 0x7009e = KEY_UNKNOWN 0x7009f = KEY_UNKNOWN 0x700a0 = KEY_UNKNOWN 0x700a1 = KEY_UNKNOWN 0x700a2 = KEY_UNKNOWN 0x700a3 = KEY_UNKNOWN 0x700a4 = KEY_UNKNOWN 0x700a5 = KEY_UNKNOWN 0x700a6 = KEY_UNKNOWN 0x700a7 = KEY_UNKNOWN 0x700a8 = KEY_UNKNOWN 0x700a9 = KEY_UNKNOWN 0x700aa = KEY_UNKNOWN 0x700ab = KEY_UNKNOWN 0x700ac = KEY_UNKNOWN 0x700ad = KEY_UNKNOWN 0x700ae = KEY_UNKNOWN 0x700af = KEY_UNKNOWN 0x700b0 = KEY_UNKNOWN 0x700b1 = KEY_UNKNOWN 0x700b2 = KEY_UNKNOWN 0x700b3 = KEY_UNKNOWN 0x700b4 = KEY_UNKNOWN 0x700b5 = KEY_UNKNOWN 0x700b6 = KEY_UNKNOWN 0x700b7 = KEY_UNKNOWN 0x700b8 = KEY_UNKNOWN 0x700b9 = KEY_UNKNOWN 0x700ba = KEY_UNKNOWN 0x700bb = KEY_UNKNOWN 0x700bc = KEY_UNKNOWN 0x700bd = KEY_UNKNOWN 0x700be = KEY_UNKNOWN 0x700bf = KEY_UNKNOWN 0x700c0 = KEY_UNKNOWN 0x700c1 = KEY_UNKNOWN 0x700c2 = KEY_UNKNOWN 0x700c3 = KEY_UNKNOWN 0x700c4 = KEY_UNKNOWN 0x700c5 = KEY_UNKNOWN 0x700c6 = KEY_UNKNOWN 0x700c7 = KEY_UNKNOWN 0x700c8 = KEY_UNKNOWN 0x700c9 = KEY_UNKNOWN 0x700ca = KEY_UNKNOWN 0x700cb = KEY_UNKNOWN 0x700cc = KEY_UNKNOWN 0x700cd = KEY_UNKNOWN 0x700ce = KEY_UNKNOWN 0x700cf = KEY_UNKNOWN 0x700d0 = KEY_UNKNOWN 0x700d1 = KEY_UNKNOWN 0x700d2 = KEY_UNKNOWN 0x700d3 = KEY_UNKNOWN 0x700d4 = KEY_UNKNOWN 0x700d5 = KEY_UNKNOWN 0x700d6 = KEY_UNKNOWN 0x700d7 = KEY_UNKNOWN 0x700d8 = KEY_UNKNOWN 0x700d9 = KEY_UNKNOWN 0x700da = KEY_UNKNOWN 0x700db = KEY_UNKNOWN 0x700dc = KEY_UNKNOWN 0x700dd = KEY_UNKNOWN 0x700de = KEY_UNKNOWN 0x700df = KEY_UNKNOWN 0x700e1 = KEY_UNKNOWN 0x700e4 = KEY_UNKNOWN 0x700e5 = KEY_UNKNOWN 0x700e6 = KEY_UNKNOWN 0x700e7 = KEY_UNKNOWN 0x700e8 = KEY_UNKNOWN 0x700e9 = KEY_UNKNOWN 0x700ea = KEY_UNKNOWN 0x700eb = KEY_UNKNOWN 0x700ec = KEY_UNKNOWN 0x700ed = KEY_UNKNOWN 0x700ee = KEY_UNKNOWN 0x700ef = KEY_UNKNOWN 0x700f0 = KEY_UNKNOWN 0x700f1 = KEY_UNKNOWN 0x700f2 = KEY_UNKNOWN 0x700f3 = KEY_UNKNOWN 0x700f4 = KEY_UNKNOWN 0x700f5 = KEY_UNKNOWN 0x700f6 = KEY_UNKNOWN 0x700f7 = KEY_UNKNOWN 0x700f8 = KEY_UNKNOWN 0x700f9 = KEY_UNKNOWN 0x700fa = KEY_UNKNOWN 0x700fb = KEY_UNKNOWN 0x700fc = KEY_UNKNOWN 0x700fd = KEY_UNKNOWN 0x700fe = KEY_UNKNOWN 0x700ff = KEY_UNKNOWN 0x90001 = 272 # BTN_LEFT 0x90002 = 273 # BTN_RIGHT 0x90003 = 274 # BTN_MIDDLE 0x90004 = 275 # BTN_SIDE 0x90005 = 276 # BTN_EXTRA
我无法获得双指滑动的正确代码,但我不再关心,因为这些手势是无法执行的。
PS 如果您想尝试自定义其他手势,请按照以下步骤操作:
我对地图条目进行了排序,清理了重复项,并注意到它包含 252 个符号(加上 5 个按钮)。
我将前十个符号设置为KEY_A,接下来的十个设置为KEY_B,依此类推,直到最后两个变成KEY_Z;然后我加载了这个地图。
我在文本窗口中执行手势(或者您可以使用“xbindkeys -mk”)并记下产生的字母。
在图中,我将所有未生成的字母更改为 KEY_UNKNOWN,将剩下的三个更改为 KEY_A、KEY_B、KEY_C.. KEY_Z、KEY_1、..、KEY_4,然后我加载这个新的 MAP。
我再次执行该手势,记下产生的字母/数字:这些是可以定义为进行特定组合键所需的任何内容的代码。
答案2
您可以尝试使用包input-kbd
中的以下方法input-utils
:
$ apropos input-kbd
input-kbd (8) - print or modify keyboard maps for input devices
使用输入设备索引(例如 的 为 4 /dev/input/event4
,可以通过 找到,lsinput
它必然不同于 中使用的 id xinput
),您可以通过使用开关向其提供文件来重新配置键盘映射-f
,例如
$ sudo input-kbd -f some-file 4
some-file
其中 的形式为,scancode = keycode|keyname
其中以下内容是等效的:
0x0001 = KEY_F9
0x0001 = 67
您可以使用 找到当前地图sudo input-kbd 4
。由于您需要从 中打开文件/dev
,因此您确实需要使用超级用户身份来读取此文件。
还请注意,尽管它的名字似乎具有误导性,但它也适用于鼠标。
答案3
要禁用手势,您可以更改驱动evdev
程序的按钮映射,以便最后 6 个“按钮”全部被禁用,如下所示:
附加以下内容
/usr/share/X11/xorg.conf.d/10-evdev.conf
或/etc/X11/xorg.conf.d/10-evdev.conf
取决于您拥有的内容:# custom for Logitech Ultrathin Touch mouse Section "InputDevice" Identifier "Logitech bluetooth Touch Mouse" Driver "evdev" Option "Name" "Ultrathin Touch Mouse" Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0" EndSection Section "InputClass" Identifier "Ultrathin Touch Mouse" Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0" EndSection
重新启动
X
服务器sudo service lightdm restart
- 确认
xinput --get-button-map "Ultrathin Touch Mouse"
如果需要,您可以更改的值InputDevice Identifier
,但务必将InputDevice Name
和的值保留InputClass Identifier
为“超薄触摸鼠标”,因为这是xinput
识别它的方式。
使用 Mac 版本 T631 进行测试。
如果你想了解更多信息evdev
,博客文章Joe Shaw 的文章对其如何融入整个输入堆栈有着特别深刻的见解。
答案4
我对这个东西感到很失望,因为尽管提供了所有解决方案,包括由实际编写输入代码的人提供的解决方案,但我始终无法让它工作X
。话虽如此,我还是放弃了它,只使用普通的有线鼠标。
昨天我发现了 Ultrathin 并决定再次尝试,结果它真的有效™。至少从这个问题的原因是这些手势被以奇怪的方式解释并扰乱了我的工作流程的角度来看,这是正确的。现在它们似乎没有真正的效果,除了左边缘滑动允许我在 Firefox 中切换最后使用的选项卡。
奇怪的是,手势实际上并没有被禁用。 所有 13 个“按钮”都由 返回xinput --get-button-map "Ultrathin Touch Mouse"
。 也grep Ultrathin /usr/share/X11/xorg.conf.d
没有返回任何内容。 没有找到相关的NoSymbol
s(VoidSymbol
根本没有 s),xkbcomp
也没有找到任何相关的KEY_UNKNOWN
s input-kbd
。
另一方面,evemu-record
除了双击手势仅被视为简单BTN_LEFT
事件之外,一切看起来都一样。
话虽如此,与此相关的一些事情已经发生了变化,但我不确定是什么。
另外,我还没有测试过重新映射事物,但这实际上不在原始问题的范围之内。