如何禁用触摸板?

我希望在使用鼠标时能禁用触摸板。我该如何做到呢? touchpad-indicator在11.10版本上停止工作了。它在11.04版本上可以正常使用。Gnome3不是一个解决方案,因为我不喜欢它并且觉得它有很多bug。

1好的,我认为touchpad-indicator开发团队会解决这个问题。 - Peng Wu
可能是戴尔XPS L501x触摸板不工作的重复问题。 - Panther
最简单的解决方案不是第一个答案。向下滚动查看屏幕截图 :-) - guettli
30个回答

在终端中运行以下命令:
xinput list

你将会得到一个看起来像这样的输出:
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=12   [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)]
    ↳ Laptop_Integrated_Webcam_1.3M             id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=13   [slave  keyboard (3)]

它显示所有连接的输入设备。请注意,它们都有一个id。 由于12是我的触摸板的id,运行以下命令将禁用它。
xinput set-prop 12 "Device Enabled" 0

在Ubuntu版本大于12.04的情况下,你也可以直接通过禁用来实现。
xinput --disable 12

(并通过类似的命令启用)

38关闭触摸板 synclient TouchpadOff=1重新打开它 synclient TouchpadOff=0 这样更好。 - Peng Wu
1sudo apt-get install touchpad-indicator 好消息是在11.10版本中,触摸板指示器又可以使用了。 - Peng Wu
编辑审批人员:我已将待处理的编辑更改为CW答案-请参见下方。 - Takkat
@PengWu 做得很棒!谢谢。一直在抱怨我的ThinkPad触摸板。 - CppLearner
我可以使用xinput来开关这个吗?太棒了。 - Ehtesh Choudhury
4synclient -l | less 以查看所有可用选项 - samus
9在12.10及更高版本中,您还可以使用xinput -disable 12来禁用输入设备12(或者使用xinput -enable 12来启用它)。请参阅手册页xinput(1) - Lekensteyn
我在启动器上添加了两个按钮(在xfce中,- 不知道gnome和unity是否有类似的东西),一个按钮的命令是“synclient TouchpadOff=1”,另一个按钮的命令是“synclient TouchpadOff=0”。这与touchpad-indicator具有相同的基本功能,但优点是不需要安装新程序。 - lebatsnok
2@Lekensteyn 你是不是指的是--disable--enable,每个都要有两个破折号?这就是我使用xinput --disable 11的方式。 - Ehtesh Choudhury
@Shurane 看起来可以使用任意数量的破折号作为前导数字,所以enable-enable--enable(甚至是-------enable)都可以使用。不过只有--enable被记录在案(xorg-input 1.6.1)。我可能提到了-enable是因为许多其他X工具使用单个破折号(例如-display)。 - Lekensteyn
在14.04版本中可以正常工作,但你可能想看一下@James-Brown的回答。 - nha
我创建了这个答案,以展示如何通过使用Xfce启动器在Xfce/Xubuntu中美妙地使用这些命令。 - user47206
将以下内容添加到你的 .bashrc 文件,以在启动时禁用触摸板:xinput list | grep "Synaptics TouchPad" | awk '{ print $6 }' | awk -F= '{print $2}' | xargs -i xinput set-prop {} "Device Enabled" 0 - Geremy
@Geremy,你的方法只适用于用户打开终端窗口的情况。如何在启动时不运行终端而实现相同的效果呢? - smartmouse
如果您插入另一台设备(例如USB鼠标),可能会导致id滑动,所以请不要将该行代码放入您的.bashrc文件中,否则您可能无法使用键盘(在这种情况下,只需移除新的USB设备并重新启动)。 - Nicolas Raoul
要在lubuntu 16.04中启用和禁用设备,分别使用xinput enable <device id>或xinput disable <device id>命令。 - Ali_Waris
这真是太棒了!我过去曾经使用它与udev配合使用,当我连接USB鼠标时禁用触摸板。我还成功地将其用于键盘快捷方式。 - b_laoshi
1@smartmouse,试试将Geremy的命令放入一个脚本中,然后使用"启动应用程序"程序在登录时运行该脚本。 - b_laoshi
1@Lekensteyn 你甚至可以输入xinput disable 12,没有破折号,它仍然可以正常工作(至少对我来说是这样)。 - mike239x
在我的版本(1.6.2)中,xinput没有参数时返回与xinput list相同的列表。 - Bas Peeters
1为了自动禁用名称中包含“触摸板”的设备: xinput set-prop \xinput --list | awk '/[Tt]ouch[Pp]ad.*pointer/ {print $0}' | sed 's/.*id=([0-9])./\1/'` "Device Enabled" 0` - pikiou
1我将这个设置为一个键盘快捷方式,绑定在Ctrl + Alt + P上,用于切换触摸板的开关状态,并通过一个2秒的弹窗来指示新的触摸板状态。同时,还通过imwheel来解决滚轮速度问题。具体操作可参考此链接:https://askubuntu.com/questions/844151/enable-disable-touchpad/1109515#1109515 - Gabriel Staples
这很棒,但是我怎么/切换/触摸板? - Dan Bolser

  1. 搜索鼠标
  2. 点击鼠标和触摸板
  3. 点击触摸板设置右侧的开/关按钮。

step one

enter image description here


3大的ON|OFF小部件在12.04版本中不可用,这就是为什么人们不得不求助于命令行的原因... - knocte
1我不小心使用了这种方法禁用了触摸板,如何在不连接鼠标的情况下重新启用它? - Ziv
1@Ziv 你打开这个鼠标和触摸板窗口,不停地点击选项卡,直到开关按钮被选中,然后按下回车键。 - paibamboo
这是一个不错的方法来做。我的触摸板在我通过命令行禁用后会自动重新启用。 - Hoàng Long
<3!<3!<3!<3!#该死的怪异终端 - jave.web

看看这个链接:如何在Ubuntu 11.10中禁用/启用触摸板 那里找到的答案真的很棒:
sudo add-apt-repository ppa:atareao/atareao
sudo apt-get update
sudo apt-get install touchpad-indicator

在此之后,您将在通知区域中获得一个开关。
我唯一希望的是能够将开关键设置为Fn+F8(这是我的键盘上的触摸板开关键...)

太棒了!它曾经在11.10版本中出现故障,但现在已经修好了。 - Peng Wu
该存储库没有适用于12.10版本的触摸板指示器。 - Ed Villegas
1在12.04版本中能正常工作。 - viking
非常酷。最简单且最吸引人的解决方案。 - RobinLovelace
1在14.04版本中运行良好。 - voiger
在16.04版本中工作,但只有在重新启动后才能正常运行。 - Yeysides
2警告:这需要信任用户atareao,他可能在他的PPA中托管恶意软件。 - knocte
1在Xubuntu 16.04.1上无法正常工作。它将某些点击识别为键盘按键,然后阻止进一步使用触摸板,尽管您只是点击而没有按下键。另一方面,当我按下键并使用触摸板移动光标时,它却没有任何反应。这说明它可能存在某些错误或者在不同的发行版或设备上不够通用,从而导致这种行为。 - Zelphir Kaltstahl
指示器在16.10版本中不再工作。 - jrg

根据@Peng Wu提供的答案,我创建了一个可以使用的bash脚本...
#!/bin/bash

declare -i ID
ID=`xinput list | grep -Eo 'TouchPad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`

xinput set-prop $ID "Device Enabled" 0

echo 'Touchpad has been disabled.'

你可以手动运行它或在启动时运行它。然后你可以让脚本在开机时自动运行。
另一个用于切换触摸板的Bash脚本:
#!/bin/bash

declare -i ID
ID=`xinput list | grep -Eo 'TouchPad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
declare -i STATE
STATE=`xinput list-props $ID|grep 'Device Enabled'|awk '{print $4}'`
if [ $STATE -eq 1 ]
then
    xinput disable $ID
    echo "Touchpad disabled."
else
    xinput enable $ID
    echo "Touchpad enabled."
fi

检查第一个脚本的状态代码会很酷。我不得不将grep模式更改为'Touchpad in mouse emulation mode\s*id\=[0-9]{1,2}' - galath
在我的系统上,它是Touchpad而不是TouchPad。为了使其大小写不敏感,只需在您的grep选项中添加一个i即可。 - zondo
将Ruby触摸板切换的一行命令翻译成中文:synclient TouchpadOff=$(synclient | ruby -ne 'puts ($_.match(/\\d+/)[0].to_i ^ 1) if /TouchpadOff/ =~ $_') - galva
要将这句话简洁地翻译成中文,请参考我的回答。 - knocte
我将这个功能设置为键盘快捷键,绑定在 Ctrl + Alt + P 上,用于切换触摸板的开关状态,并包括一个 2 秒的弹出窗口来指示新的触摸板状态,同时通过 imwheel 处理滚轮速度问题:https://askubuntu.com/questions/844151/enable-disable-touchpad/1109515#1109515。此外,我的答案会搜索 xinput 中的 TouchPadTouchpad,因为有时候 P 的大小写是不确定的,这取决于系统,所以如果你不搜索两者,脚本可能无法正常工作。 - Gabriel Staples
有没有一个命令可以专门查询ID和状态? - Dan Bolser

简单地说,在终端中执行以下命令:
synclient TouchpadOff=1

然而,上述方法似乎在Ubuntu 16.04中不再有效。在这种情况下,可以使用xinput命令来替代:
xinput set-prop `xinput --list | awk '/[Tt]ouch[Pp]ad.*pointer/ {print $7}' | sed 's/id=\(.*\)/\1/'` "Device Enabled" 0

最简单的解决办法,谢谢。尽管“打字时禁用触摸板”已经开启,但还是不小心碰到了触摸板,这让我有点疯狂。现在我可以使用USB鼠标代替,保持键盘的良好表现。 - David Thomas
这需要sudo吗?它对我的HP 6460b + Ubuntu 14.04没有影响。 - itsols
不,它不会,而且它在我的14.04版本上运行正常。 - knocte
1适用于Ubuntu 16.04,无需sudo,可以轻松创建一个键盘快捷方式:+1 :-) - Martin Thoma
非常好的解决方案,特别是当ID不断变化时。 为了使其适应大小写(我有Touchpad,而不是TouchPad):xinput set-prop \xinput --list | awk '/[Tt]ouch[Pp]ad.*pointer/ {print $0}' | sed 's/.*id=([0-9])./\1/'` "Device Enabled" 0`。 - pikiou

更新的解决方案:

不要使用可能会改变的id变量,而是像其他答案中所示,使用synclient来代替xinput,例如this

sudo apt install xserver-xorg-input-synaptics

关闭触摸板的方法:
synclient TouchpadOff=1

打开的方法:
synclient TouchpadOff=0

如下所述,可与启动器或快捷方式一起使用。
这只是在当前问题下使用this答案中的命令的应用。下面的解决方案仅限于Xfce/Xubuntu,但尽管我是偶然发现的,但我觉得它太优雅了,不分享在这里会觉得可惜。所以,我最初创建了a separate question,只针对Xubuntu。那个问题不可避免地与这个重复,并且可能因此关闭,所以我敢在这里重新发布那个答案。
关于这两个命令:
禁用:
xinput set-prop 15 "Device Enabled" 0

启用:
xinput set-prop 15 "Device Enabled" 1

通过运行,可以找到身份证号码。
xinput list

@galileopy - 就我现在所知,一个简单的快捷方式会更加有用。 - user47206

这是如何在启动时自动禁用触摸板的方法 通过名称而不是ID来禁用触摸板可以更安全地进行。 以下是获取您触摸板名称的方法:

$ xinput list --name-only | grep -i Touchpad
ETPS/2 Elantech Touchpad

创建一个bash脚本文件。我将该文件添加到Ubuntu的启动应用程序中,以便在每次重启时运行。记得将该文件设置为可执行。以下是文件的内容:
#!/bin/bash
$ xinput disable 'ETPS/2 Elantech Touchpad'

既然你把它放在脚本中,你可能想要合并上述两个命令(为了可移植性),即使牺牲一些秒数。xinput -disable "$(xinput list --name-only | grep -i Touchpad)" - Hastur

我使用以下脚本来启用/禁用触摸板。 我还将其分配给了键盘快捷键。
用法:toggle_touchpad.sh [on|off] 如果您不带参数运行,则它将简单地反转触摸板的当前状态。
#!/bin/bash
# toggle_touchpad.sh

is_off=`synclient | grep -Pio "TouchpadOff.*?(\d)" | grep -Eo "[01]"`

if [ -z "$1" ]; then
    echo "Inverting touchpad state"

    if [ "$is_off" -eq '0' ];then
        synclient TouchpadOff=1
        notify-send "Touchpad Disabled"
    else
        synclient TouchpadOff=0
        notify-send "Touchpad Enabled"
    fi

else

    if [ "$1" == "on" ]; then
        echo "Turning on touchpad"
        synclient TouchpadOff=0
        notify-send "Touchpad Enabled"
    elif [ "$1" == "off" ]; then
        echo "Turning off touchpad"
        synclient TouchpadOff=1
        notify-send "Touchpad Disabled"
    else
        echo "Unknown arg! Pass no args or on/off !"
    fi

fi

定义键盘快捷键

(此答案是从一个无效的编辑中复制过来的)

不必每次想要启用/禁用触摸板时都记住那个命令,你可以将其添加为键盘组合快捷键。

在“首选项”中的“键盘快捷键”中点击添加。给快捷键取一个名称,例如“禁用触摸板”,然后添加上面发现的命令。

xinput set-prop <id> "Device Enabled" 0

点击应用并添加另一个快捷方式,命名为“启用触摸板”或类似的名称,并将前一个命令末尾的数字改为1。
xinput set-prop <id> "Device Enabled" 1

这些分别是开启/关闭的选项。
现在,既然已经添加了这些选项,请点击“启用触摸板快捷键”列(应该显示为“禁用”),并输入您想要的键盘快捷键,我选择了Win+1(按住Windows键,然后按数字1)。对于禁用触摸板也是同样的操作,我选择了Win+2
现在Win+1可以启用我的触摸板,Win+2可以禁用它。

这对我在11.10版本中有效:
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=12   [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)]
    ↳ Laptop_Integrated_Webcam_1.3M             id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=13   [slave  keyboard (3)]

它显示所有连接的输入设备。请注意,它们都有一个id。由于12是我的触摸板的id,运行以下命令将禁用它。
xinput set-prop 12 "Device Enabled" 0

我会把它放在.bashrc或其他地方,只是我不确定设备12(对我来说实际上是11)是否总是指触摸板。
现在如果我能让nautilius中的向上箭头工作并看到.dirs就好了。

不,11.10版本的触摸板实用程序无法禁用触摸板,所以只能回到命令行界面。 - touristguy87
运行xinput list,获取触摸板的id,然后运行xinput set-prop(id)"Device Enabled" 0就像魔术一样正常工作。 - touristguy87