拖拽锁在新安装的 20.04 版上不起作用

拖拽锁在新安装的 20.04 版上不起作用

这是 2016 年的戴尔 Inspiron 15 7559,当时预装了 Ubuntu。后来,在过去的 4 年里,我一直在运行 16.04,没有出现任何问题。

昨天,我进行了全新安装(删除磁盘) 为 20.04 (在旧版 bios 上,因为 uefi 导致了音频问题) 却发现我无法让拖拽锁工作。

xinput list

通常会给我(在 16.04 和 20.04 上)

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ELAN1010:00 04F3:3012 Mouse               id=12   [slave  pointer  (2)]
⎜   ↳ ELAN1010:00 04F3:3012 Touchpad            id=13   [slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad                  id=16   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ Sleep Button                              id=10   [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD: Integrate           id=11   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=14   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=15   [slave  keyboard (3)]
    ↳ DELL Wireless hotkeys                     id=17   [slave  keyboard (3)]

并且两个触摸板设备的 id 似乎偶尔会发生变化,因此我使用两个设备的全名来设置它们的属性。

在 16.04 上,我曾在登录时运行以下命令来启用拖拽锁

xinput --set-prop "ELAN1010:00 04F3:3012 Touchpad" "Synaptics Locked Drags" 1
xinput --set-prop "ETPS/2 Elantech Touchpad" "Synaptics Locked Drags" 1

这两个命令出错了,因为属性名称已从 synaptics 更改为 libinput。运行xinput --list-props任何一个都会得到以下结果

Device 'ELAN1010:00 04F3:3012 Touchpad':
    Device Enabled (197):   1
    Coordinate Transformation Matrix (199): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Tapping Enabled (349): 1
    libinput Tapping Enabled Default (350): 0
    libinput Tapping Drag Enabled (351):    1
    libinput Tapping Drag Enabled Default (352):    1
    libinput Tapping Drag Lock Enabled (353):   0
    libinput Tapping Drag Lock Enabled Default (354):   0
    libinput Tapping Button Mapping Enabled (355):  1, 0
    libinput Tapping Button Mapping Default (356):  1, 0
    libinput Natural Scrolling Enabled (333):   1
    libinput Natural Scrolling Enabled Default (334):   0
    libinput Disable While Typing Enabled (357):    1
    libinput Disable While Typing Enabled Default (358):    1
    libinput Scroll Methods Available (335):    1, 1, 0
    libinput Scroll Method Enabled (336):   1, 0, 0
    libinput Scroll Method Enabled Default (337):   1, 0, 0
    libinput Click Methods Available (359): 1, 1
    libinput Click Method Enabled (360):    0, 1
    libinput Click Method Enabled Default (361):    1, 0
    libinput Middle Emulation Enabled (362):    0
    libinput Middle Emulation Enabled Default (363):    0
    libinput Accel Speed (340): 0.000000
    libinput Accel Speed Default (341): 0.000000
    libinput Left Handed Enabled (345): 0
    libinput Left Handed Enabled Default (346): 0
    libinput Send Events Modes Available (318): 1, 1
    libinput Send Events Mode Enabled (319):    0, 0
    libinput Send Events Mode Enabled Default (320):    0, 0
    Device Node (321):  "/dev/input/event12"
    Device Product ID (322):    1267, 12306
    libinput Drag Lock Buttons (347):   <no items>
    libinput Horizontal Scroll Enabled (348):   1

Device 'ETPS/2 Elantech Touchpad':
    Device Enabled (197):   1
    Coordinate Transformation Matrix (199): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Tapping Enabled (349): 1
    libinput Tapping Enabled Default (350): 0
    libinput Tapping Drag Enabled (351):    1
    libinput Tapping Drag Enabled Default (352):    1
    libinput Tapping Drag Lock Enabled (353):   0
    libinput Tapping Drag Lock Enabled Default (354):   0
    libinput Tapping Button Mapping Enabled (355):  1, 0
    libinput Tapping Button Mapping Default (356):  1, 0
    libinput Natural Scrolling Enabled (333):   1
    libinput Natural Scrolling Enabled Default (334):   0
    libinput Disable While Typing Enabled (357):    1
    libinput Disable While Typing Enabled Default (358):    1
    libinput Scroll Methods Available (335):    1, 1, 0
    libinput Scroll Method Enabled (336):   1, 0, 0
    libinput Scroll Method Enabled Default (337):   1, 0, 0
    libinput Click Methods Available (359): 1, 1
    libinput Click Method Enabled (360):    0, 1
    libinput Click Method Enabled Default (361):    1, 0
    libinput Middle Emulation Enabled (362):    0
    libinput Middle Emulation Enabled Default (363):    0
    libinput Accel Speed (340): 0.000000
    libinput Accel Speed Default (341): 0.000000
    libinput Left Handed Enabled (345): 0
    libinput Left Handed Enabled Default (346): 0
    libinput Send Events Modes Available (318): 1, 1
    libinput Send Events Mode Enabled (319):    0, 0
    libinput Send Events Mode Enabled Default (320):    0, 0
    Device Node (321):  "/dev/input/event7"
    Device Product ID (322):    2, 14
    libinput Drag Lock Buttons (347):   <no items>
    libinput Horizontal Scroll Enabled (348):   1

因此我自然尝试了以下

xinput --set-prop "ELAN1010:00 04F3:3012 Touchpad" "libinput Tapping Drag Lock Enabled" 1
xinput --set-prop "ETPS/2 Elantech Touchpad" "libinput Tapping Drag Lock Enabled" 1

成功设置属性但触摸板的行为没有改变。

最后,我还更新了 gnome 设置,并确保

gsettings 获取 org.gnome.desktop.peripherals.touchpad 点击并拖动

给我

真的

到目前为止我还无法完成这项工作。

PS:我使用 Xorg 作为

echo $XDG_SESSION_TYPE

输出

x11

PPS:相关设备的内容/proc/bus/input/devices如下

I: Bus=0011 Vendor=0002 Product=000e Version=0000
N: Name="ETPS/2 Elantech Touchpad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input6
U: Uniq=
H: Handlers=mouse2 event7 
B: PROP=5
B: EV=b
B: KEY=e420 10000 0 0 0 0
B: ABS=661800011000003

I: Bus=0018 Vendor=04f3 Product=3012 Version=0100
N: Name="ELAN1010:00 04F3:3012 Touchpad"
P: Phys=i2c-ELAN1010:00
S: Sysfs=/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-1/i2c-ELAN1010:00/0018:04F3:3012.0001/input/input15
U: Uniq=
H: Handlers=mouse1 event12 
B: PROP=5
B: EV=1b
B: KEY=e520 10000 0 0 0 0
B: ABS=2e0800000000003
B: MSC=20

PPPS:我的驱动器上没有/etc/x11/xorg.conf或。/etc/x11/xorg.conf.d/

PPPPS:关于这一点,libinput 手册页但老实说,我不明白要实现它需要哪些步骤

编辑 根据 @Hi-Angel 的评论,libinput 确实支持拖动锁定,但具有默认且不可配置的 300 毫秒超时,因此这里有一些更新可以帮助朝这个方向寻求解决方案:

我不熟悉 libinput 的内部工作原理和 C 编程,你认为有没有办法让我在我的计算机上运行它(而不必重建自定义的本地版本的 libinput 并永远维护它?)_

答案1

根据评论,拖拽锁确实有效,但很容易被忽略,因为拖拽超时(即,从触摸板上抬起手指到放回之前“拖动”起作用的时间)非常小,只有 300 毫秒。Synaptics 默认为 5 秒。

它之所以这么小,是为了不引人注目。尽管出于可访问性的原因,将它增加到无穷大可能更有价值。

ATM 没有简单的方法来改变超时。作为一名黑客,你可以改变此行的超时值并从源重建 libinput。

然而,正如原帖作者正确指出的那样,开放式磁共振使超时可配置。作者放弃了这个方法,以及相应问题。但很容易看出维护者对这个想法持开放态度。您可以尝试加入讨论,如果您的理由足够有说服力,那么重新定基并合并已经存在的 MR 应该很容易。

答案2

这是触摸板的解决方案。

使用 安装 synaptics sudo apt install xserver-xorg-input-synaptics ,然后重新启动。

然后synclient LockedDrags=1它就应该可以工作了。

仍需执行:鼠标也一样,并使更改在会话间永久生效。您将向我们解释如何操作。

相关内容