键入时如何禁用触摸板?在Ubuntu 16.04上,syndaemon无法正常工作


42

我想在键入时停用触摸板。我尝试了这个:

syndaemon -i 1 -d -t -K

它应禁用触摸板上的点击和滚动1秒钟,并忽略修饰键和组合键,但在进行上述设置后,则syndaemon不会进行任何更改。触摸板始终处于活动状态,非常烦人。

我在Dell Precision 5510上使用Ubuntu 16.04。


1
默认情况下,键入时默认禁用“单击以单击”,但不会移动/滚动光标。有一种方法可以在键入时禁用触摸板本身,但不能通过syndaemon / synclient禁用。但是,该方法将导致系统设置>鼠标和触摸板>触摸板设置消失。一些信息在这里-bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/…–
doug

4
试试-– syndaemon -i 1.0 -d -K
doug

1
@doug我尝试过,它什么都没改变
marsUbuntux

@doug我应该尝试删除突触驱动程序和libinput Xorg驱动程序吗?
marsUbuntux '16

这样做的问题是,您将在系统设置中没有触摸板设置,并且必须像错误报告中的示例一样手动添加。您最初使用syndaemon尝试的实际上是默认设置,即。-在输入时禁用点击以单击,但不要禁用光标移动。键入时,点击是否禁用?

Answers:


36

您可能正在运行两个触摸板驱动程序,然后syndaemon在其中与错误的一个交互。我在Dell XPS 13上遇到了相同的问题,该线程(http://ubuntuforums.org/showthread.php?t=2316240)帮助了我。

如果您还看到两个触摸板设备,请尝试禁用其中一个。由于您使用的是其他计算机,因此链接中的说明实际上可能适用于您,也可能并不适用。

从所提到的职位,过程是:

/usr/share/X11/xorg.conf.d/51-synaptics-quirks.conf使用文本编辑器以root身份打开文件,插入以下文本:

# Disable generic Synaptics device, as we're using
# "DLL0704:01 06CB:76AE Touchpad"
# Having multiple touchpad devices running confuses syndaemon
Section "InputClass"
Identifier "SynPS/2 Synaptics TouchPad"
      MatchProduct "SynPS/2 Synaptics TouchPad"
      MatchIsTouchpad "on"
      MatchOS "Linux"
      MatchDevicePath "/dev/input/event*"
      Option "Ignore" "on"
EndSection

使用sudo systemctl restart lightdm Credit 命令从ubuntuforums.org 重新启动或重新启动Xorg 。

自2018年1月以来,戴尔在其知识库中提供了有关Ubuntu触摸板/鼠标问题的官方页面。该页面介绍了此修复程序以禁用“ SynPS / 2 Synaptics触摸板”,还建议将其移至libinput而不是作为鼠标垫驱动程序的synaptics。


与您的情况相同:> DLL06E5:01 06CB:7A13触摸板id = 14 [从站指针(2)]> SynPS / 2 Synaptics TouchPad id = 16 [从站指针(2)]执行了链接中所述的相同操作你发布了。有效!现在,触摸板可以按我的要求工作了。谢谢您
marsUbuntux

那里提到的解决方案也适用于Dell Lattitude 3570。
chanux

太神奇了,我一直认为这是不可修复的,这节省了我的laptap。非常感谢。这真的很有用。
realhu

由于此答案值得更多功劳,因此我对其进行了更新,以澄清更多内容。
威廉·S

2
万一链接消失了,可能值得将解决方案从论坛中拉出来以作答。
BeepDog

30
sudo add-apt-repository ppa:atareao/atareao
sudo apt-get update
sudo apt-get install touchpad-indicator
  • 打开触摸板指示器,然后单击指示器图标。
  • 您可以将偏好设置(在“操作”标签中)更改为“在键入时禁用触摸板”

干杯!


1
这可以作为gnome扩展名使用:extensions.gnome.org/extension/131/touchpad-indicator
zamnuts

2
在Ubuntu Budgie-Remix 16.04.3上对我不起作用
r3wt

澄清zamnuts的评论:如果您按照他提供的链接将它作为gnome扩展程序安装,则只能访问首选项(否则,至少我不能这样做)。但是我没有选择禁用触摸板的选项。
glS

我无意中投了反对票(必须一直在输入睡眠),现在除非将答案更新,否则无法将其删除。(显然,askubuntu.com是用这种方式设置的。)我试图仅添加一个空格,但至少需要8个字符(不同?)。如果您要编辑答案并添加诸如“建议:将触摸板应用程序设置为自动启动,这样就无需在每次登录时手动启动它。”这样,我应该会看到一条通知,然后应该可以将其删除我的否决票。
st2000

10

我正在使用ubuntu 17.10并尝试了此处建议的其他解决方案,大多数情况下不起作用。在ubuntu 17.10中启动时,特别是触摸板指示器软件只能禁用触摸板,而我没有找到任何方法来重新启用它,而无需重新启动笔记本电脑。现在我发现了这个解决方案,我认为它现在仍然可以很好地工作:只需使用此命令,

synclient PalmDetect = 1

这样至少可以防止不必要地在触摸板上敲击手掌,最终可以延长使用寿命。


这是一个非常好的解决方案,并且是单行修复。我以前曾做过这件事,但失败了。感谢您的发布!
Thomas Dignan

不太完美,但是对17.10很有帮助,谢谢。
杰克

这很完美。我很惊讶这不是默认值,但是我猜那只是Linux方式。
Gunchars

@tareqalam:此命令是否可以重新启动?
Lonnie Best

2

在查看了“ xinput”的选项之后,我找到了一个有效且简单的解决方案,使用Ubuntu 16.04和Lubuntu 16.04禁用Synaptics触摸板

在终端窗口中,输入“ sudo -s”并输入密码,以授予自己管理权限。

使用您喜欢的编辑器(例如leafpad或gedit)创建一个新的脚本文件:

leafpad /usr/local/bin/tpadoff

并插入以下内容:

#!/bin/bash
#/usr/local/bin/tpadoff - turn off touchpad
xinput --disable  'SynPS/2 Synaptics TouchPad'

保存文件并退出编辑器。然后输入命令:

chmod 755 /usr/local/bin/tpadoff

使文件可执行。您可以重复创建一个tpadon文件,只需将“ --disable”更改为“ --enable”即可。

完成后,“退出”终端窗口以禁用管理员访问权限。

可以通过打开新的终端窗口并使用您喜欢的编辑器来创建桌面条目(在此示例中,我再次使用Leafpad):

cd Desktop
leafpad tpadoff.desktop

并插入以下文本:[Desktop Entry] Name = TouchPad Off Comment = Turn-Off Touchpad Exec = / usr / local / bin / tpadoff Terminal = false Type = Application

保存文件并退出编辑器。然后输入以下命令:

 chmod 775 tpadoff.desktop 

您也可以重复创建一个tpadon.desktop,将所有“关闭”引用更改为“打开”。

完成后,您将有两种方法来关闭(以及选择打开)触摸板,方法是双击桌面图标或在终端窗口中输入“ tpadoff”。

如果触摸板不同,则可能必须在终端窗口中使用“ xinput”来找到触摸板的确切语法。然后编辑“ / usr / local / bin / tpadoff”文件以匹配xinput报告的内容。


1
问题是关于在键入(即自动)禁用触摸板-因此,尽管您没有直接回答,但我非常感谢您回答的质量。
guntbert '17年

2

在寻找解决方案数月之后,我决定编写一个简单的Python程序来在键入时禁用触摸板。将程序添加到“启动应用程序”中,以使其在每次启动计算机时运行。您需要运行xinput list以确定键盘的ID,在我的情况下为17。

xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Microsoft Microsoft® Nano Transceiver v1.0    id=11   [slave  pointer  (2)]
⎜   ↳ Microsoft Microsoft® Nano Transceiver v1.0    id=12   [slave  pointer  (2)]
⎜   ↳ DLL082A:01 06CB:76AF Touchpad             id=14   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=18   [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)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Microsoft Microsoft® Nano Transceiver v1.0    id=10   [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD                      id=13   [slave  keyboard (3)]
    ↳ Intel Virtual Button driver               id=15   [slave  keyboard (3)]
    ↳ Intel HID events                          id=16   [slave  keyboard (3)]
    **↳ AT Translated Set 2 keyboard                id=17   [slave  keyboard (3)]**
    ↳ Dell WMI hotkeys                          id=19   [slave  keyboard (3)]
    ↳ Microsoft Microsoft® Nano Transceiver v1.0    id=20   [slave  keyboard (3)]

这是程序

import time 
import subprocess
import threading

def main():
    subprocess.call('gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true', shell=True)
    p = subprocess.Popen('xinput test 17', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    clickTime = [0, 0]
    def checkTime():
        keys = [37, 50, 62, 64, 105, 108, 133]
        while True:
            out = p.stdout.readline()

            if len(out) < 1:
                break
            key = int(out.split()[-1])
            if key not in keys:
                clickTime[0] = time.time()

    t = threading.Thread(target=checkTime)
    t.start()

    lastTime = 0
    touchpad = True
    while True:
        inactive = time.time() - clickTime[0]
        # print ('inactive for', inactive)
        if inactive > 1:            
            if not touchpad:
                print ('Enable touchpad')
                subprocess.call('gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true', shell=True)
            touchpad = True
        else:
            if touchpad:
                print ('Disable touchpad')
                subprocess.call('gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click false', shell=True)
            touchpad = False
        time.sleep(0.5)

    retval = p.wait()

if __name__ == '__main__':
    main()

很棒的解决方案,只需使用xinput监视键盘活动并轮询以查看新事件是否每0.5秒发生一次。这对CPU活动的影响很小,但是如果有一种方法可以触发仅在键盘事件上发生的行为,那还是不错的。是您排除某些键(例如左箭头和空格键)的原因还是仅仅是个人喜好?
theferrit32 '18

2

在Ubuntu 19.04中,我发现仅满足“我的需要”就足以禁用“点击以点击”功能:

在此处输入图片说明

但是,这样做的结果是您实际上必须使用触摸板的按钮(希望您有按钮)才能进行单击。对我来说,这是一个公平的权衡。

如果您实际上没有“左右”点击按钮(与触摸板分开),则可以校准触摸板的灵敏度。我在此bug报告中从Peter Hutterer那里了解到这一点。

我希望笔记本电脑制造商不要制造不带触控板的笔记本电脑。这些与键盘按键(而不是后退)齐平的触摸板是设计缺陷。

请让您的笔记本电脑制造商知道由于这种不良设计给您带来的麻烦,否则他们将在以后的型号中盲目地这样做。


1
确认效果很好。我注意到一个小事,我可以忽略:当我的胖手掌在打字时触摸触摸板时,我可以看到鼠标光标稍微移动了一点,但至少不会让它单击其他地方,这很浪费时间。理想情况下,我仍然可以拥有“点击以点击”行为,但是至少在我的笔记本电脑上,该功能永远无法正常运行。因此,权衡确实是公平的。
bgoodr

1

对于Kubuntu用户...

在Kubuntu 16.04上-要在输入时禁用触摸板,我必须清除设置->输入设备->触摸板->启用/禁用触摸板下的复选框“仅禁用水龙头和滚动”。看起来似乎很明显,但是...


ubuntu 16.04工作
Nazmul Hasan

在Ubuntu 18.04上没有这样的子选项,在Settings和Tweaks中都没有。
dskrvk

0
xinput list |
while read line; do
    if [[ $line == *Touchpad* ]]; then
        tid="$(echo $line | cut -d '=' -f 2 | cut -c 1-2)"
        xinput set-prop $tid "Device Enabled" 0
    fi
done

或更简洁

xinput list | sed -nre 's/^.*Touchpad.*\sid=(\S+).*$/\1/p' | xargs -I{} -- xinput set-prop {} 'Device Enabled' 0

请修复格式
Pierre.Vriens

1
欢迎来到Ask Ubuntu!我建议编辑此答案,以扩展有关此命令(序列)功能的详细信息。普通命令(序列)很少被视为答案。(另请参阅“我如何编写一个好的答案?”,以获取有关在Ask Ask Ubuntu上认为哪种答案最有价值的一般建议。)
David Foerster
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.