问题:触摸板的硬件右键在 Linux 下不起作用,但在 Win8 下可以正常工作。
已经尝试了几个 psmouse 补丁、xinput 配置等...都没有任何帮助 :(
- 操作系统:Debian Jessie 64位
- 笔记本电脑:G46VW
消息:
[ 3.898598] psmouse serio4: elantech: assuming hardware version 4 (with firmware version 0x460f02)
[ 3.912080] psmouse serio4: elantech: Synaptics capabilities query result 0x00, 0x18, 0x0c.
Xorg.log:
[46.491] (II) LoadModule: "synaptics"
[46.491] (II) Loading /usr/lib/xorg/modules/input/synaptics_drv.so
[46.494] (II) Module synaptics: vendor="X.Org Foundation"
[46.494] (II) Using input driver 'synaptics' for 'ETPS/2 Elantech Touchpad'
[46.499] (II) synaptics: ETPS/2 Elantech Touchpad: found clickpad property
[46.499] (--) synaptics: ETPS/2 Elantech Touchpad: x-axis range 0 - 3036
[46.499] (--) synaptics: ETPS/2 Elantech Touchpad: y-axis range 0 - 1452
[46.499] (--) synaptics: ETPS/2 Elantech Touchpad: pressure range 0 - 255
[46.499] (--) synaptics: ETPS/2 Elantech Touchpad: finger width range 0 - 15
[46.499] (--) synaptics: ETPS/2 Elantech Touchpad: buttons: left double triple
[46.499] (--) synaptics: ETPS/2 Elantech Touchpad: Vendor 0x2 Product 0xe
[46.499] (--) synaptics: ETPS/2 Elantech Touchpad: touchpad found
[46.500] (**) synaptics: ETPS/2 Elantech Touchpad: (accel) MinSpeed is now constant zeceleration 2.5
[46.500] (**) synaptics: ETPS/2 Elantech Touchpad: MaxSpeed is now 1.75
[46.500] (**) synaptics: ETPS/2 Elantech Touchpad: AccelFactor is now 0.059
[46.500] (--) synaptics: ETPS/2 Elantech Touchpad: touchpad found
列表道具:
Device 'ETPS/2 Elantech Touchpad':
Device Enabled (134): 1
Coordinate Transformation Matrix (136): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (261): 1
Device Accel Constant Deceleration (262): 2.500000
Device Accel Adaptive Deceleration (263): 1.000000
Device Accel Velocity Scaling (264): 12.500000
Synaptics Edges (292): 121, 2915, 78, 1374
Synaptics Finger (293): 1, 1, 256
Synaptics Tap Time (294): 180
Synaptics Tap Move (295): 148
Synaptics Tap Durations (296): 180, 180, 100
Synaptics ClickPad (297): 1
Synaptics Tap FastTap (298): 0
Synaptics Middle Button Timeout (299): 0
Synaptics Two-Finger Pressure (300): 282
Synaptics Two-Finger Width (301): 7
Synaptics Scrolling Distance (302): 67, 67
Synaptics Edge Scrolling (303): 0, 0, 0
Synaptics Two-Finger Scrolling (304): 1, 0
Synaptics Move Speed (305): 1.000000, 1.750000, 0.059435, 40.000000
Synaptics Edge Motion Pressure (306): 30, 160
Synaptics Edge Motion Speed (307): 1, 269
Synaptics Edge Motion Always (308): 0
Synaptics Off (309): 2
Synaptics Locked Drags (310): 0
Synaptics Locked Drags Timeout (311): 5000
Synaptics Tap Action (312): 0, 0, 0, 0, 1, 3, 2
Synaptics Click Action (313): 1, 3, 2
Synaptics Circular Scrolling (314): 0
Synaptics Circular Scrolling Distance (315): 0.100000
Synaptics Circular Scrolling Trigger (316): 0
Synaptics Circular Pad (317): 0
Synaptics Palm Detection (318): 0
Synaptics Palm Dimensions (319): 10, 200
Synaptics Coasting Speed (320): 20.000000, 50.000000
Synaptics Pressure Motion (321): 30, 160
Synaptics Pressure Motion Factor (322): 1.000000, 1.000000
Synaptics Grab Event Device (323): 1
Synaptics Gestures (324): 1
Synaptics Capabilities (325): 1, 0, 0, 1, 1, 1, 1
Synaptics Pad Resolution (326): 33, 32
Synaptics Area (327): 0, 0, 0, 0
Synaptics Soft Button Areas (328): 1518, 0, 1190, 0, 0, 0, 0, 0
Synaptics Noise Cancellation (329): 16, 16
Device Product ID (255): 2, 14
Device Node (256): "/dev/input/event8"
答案1
发现问题:psmouse/elantech.c 只是假设 V4 硬件协议根本没有右键。
修复很简单:
--- elantech.c.orig 2013-06-14 00:52:08.000000000 +0700
+++ elantech.c 2013-07-15 12:45:52.000000000 +0700
@@ -486,6 +486,7 @@ elantech_input_sync_v4
unsigned char *packet = psmouse->packet;
input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
+ input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
input_mt_report_pointer_emulation(dev, true);
input_sync(dev);
}
@@ -1019,7 +1018,7 @@ elantech_set_input_params { case 4: }
}
/* v4 is clickpad, with only one button. */
__set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
- __clear_bit(BTN_RIGHT, dev->keybit);
+ //__clear_bit(BTN_RIGHT, dev->keybit);
__set_bit(BTN_TOOL_QUADTAP, dev->keybit);
/* For X to recognize me as touchpad. */
input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0);
即用型解决方案:
wget http://datacompboy.ru/psmouse-elantech-v7right.tar.bz2
tar xfj psmouse-elantech-v7right.tar.bz2
sudo mv psmouse-elantech-v7right /usr/src/
sudo dkms install -m psmouse -v elantech-v7right
sudo modprobe -r psmouse
sudo modprobe psmouse