如何使用命令行禁用触摸板?


Answers:


55

要关闭触摸板:

synclient TouchpadOff=1

要重新打开它:

synclient TouchpadOff=0

很简单,但是很关键。
2014年

7
不能在我的计算机上工作...
Casper 2014年

有趣,很高兴知道。
aleroxac '16

2
该命令在Dell XPS 13上的Ubuntu 14.04 LTS上运行时没有错误,但没有任何效果。
IJ肯尼迪

切换会很好-我想将其设置为快捷方式或其他方式。更好的是,当它停靠时,我希望关闭触摸板
Christian Bongiorno 2016年

22

(我知道)至少可以尝试两种方法。

同步客户端

如果您的笔记本电脑配备了Synaptics(或ALPS)触摸板,那么您确实可以synclient按照Shutupsquare所述使用。我正在运行Ubuntu 14.04,并且在我的计算机上默认安装了它。

测试是否安装了synclient :(synclient -V应报告版本号)

打开触摸板: synclient TouchpadOff=0

关闭触摸板: synclient TouchpadOff=1

我自己尚未对此进行测试,但是如果您的目标是在手臂放在触摸板上时不移动鼠标,则可能会有所帮助。

打开手掌检测: synclient PalmDetect=1

关闭手掌检测: synclient PalmDetect=0

通常,您可以通过来配置Synaptics触摸板的任何属性synclient property=value。该属性是以下所示的可用属性之一synclient -l

链接以供进一步阅读

ubuntu-商品帮助Wiki-SynapticsTouchpad

archlinux-Wiki-触摸板突触

问ubuntu-如何使我的synclient设置生效?-Ubuntu

输入

如果您不希望或不能使用synclient,也可以使用xinput。程序有点类似。

列出所有xinput设备: xinput

输出的一部分可能看起来像这样:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse           id=13   [slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad                  id=17   [slave  pointer  (2)]

在这种特殊情况下,我的触摸板具有id = 17,其全名是“ ETPS / 2 Elantech触摸板”。

设置属性的命令为xinput set-prop。启用或禁用触摸板的属性是Device Enabled,因此要启用或禁用触摸板,请输入:

关闭触摸板:xinput set-prop <id> "Device Enabled" 1(这里<id>是你的设备ID,在我的情况17)

关闭触摸板: xinput set-prop <id> "Device Enabled" 0

打开手掌检测: xinput set-prop <id> "Palm Detection" 1

关闭手掌检测: xinput set-prop <id> "Palm Detection" 0

要查询可用属性:xinput list-props <id>OR xinput list-props <full-name>,这应该与相当相似synclient -l

链接以供进一步阅读

ubuntu-Wiki-输入

注意

通过其中一个设置属性时,xinput或未synclient将属性设置为其他工具。它们也未设置在unity-control-center中。


1
感谢您的第二个答案。synclient没有为我工作,xinput做了。
罗宾·温斯洛

1
请注意,xinputid可以在重启后更改。因此,依靠脚本或快捷方式中的这些ID无效。
Lode,

synclient完全可以在Arch Linux上使用。谢谢你这么多!
西奥多·R·史密斯

这为我做到了。特别是,我发现我需要运行xinput <enable/disable> <id>,因为TouchpadOffvia 设置synclient无效。
迈克尔·莫尔

感谢您对的介绍xinput。我的内置键盘和轨迹点按钮让我有些吃惊,显然是在发送不良输入,从而干扰了外部键盘的输入。这使我可以禁用内置设备。干杯! :)
sjakobi

4

synclient并且xinput在使用gnome(或unity,cinnamon)环境时将不起作用,因为它将覆盖设置,因此,如果要synclientxinput接管这些设置,则应首先禁用该设置:

  1. 安装dconf-editor如果没有安装:

    apt-get install dconf-editor
    
  2. dconf-editor

    dconf-editor 
    
  3. 打开目录/org/gnome/settings-daemon/plugins/mouse//org/cinnamon/settings-daemon/plugins/mouse/,然后单击的复选框active

  4. logout 要么 reboot

这应该使synclientxinput工作。


1
  1. 列出您的输入设备:

    xinput list
    

    就我而言,我有以下列表:

    Virtual core XTEST pointer                  id=4
    Logitech M510                               id=11   
    ETPS/2 Elantech Touchpad                    id=15
    
  2. 通过传递ID禁用触摸板

    xinput set-prop 15 "Device Enabled" 0
    

手动键入时,可以直接使用xinput enable [device]xinput disable [device]。但是,在编写脚本时,使用起来set-prop [device] "Device Enabled" [value]可能会容易一些,如World Python Developer的回答。
hsandt

1

我编写了一段python代码,以便您xinput无需进行所有手动工作即可使用该技术。版权所有,Copyleft,按原样,不保证,使用后果自负。对我来说很棒:如果您使用的是gnome,只需将其映射到诸如的快捷键即可CtrlShiftT

#!/usr/bin/python2
# -*- coding: utf-8 -*-
'''Program to toggle Touchpad Enable to Disable or vice-versa.'''

import commands
import re


def current_id():
    """ Search through the output of xinput and find the line that has the
    word TouchPad.  At that point, I believe we can find the ID of that device."""

    props = commands.getoutput("xinput").split("\n")
    match = [line for line in props if "TouchPad" in line]
    assert len(match) == 1, "Problem finding Touchpad string! %s" % match

    pat = re.match(r"(.*)id=(\d+)", match[0])
    assert pat, "No matching ID found!"

    return int(pat.group(2))


def current_status(tpad_id):
    """Find the current Device ID, it has to have the word TouchPad in the line."""

    props = commands.getoutput("""xinput list-props %d""" % tpad_id).split('\n')
    match = [line for line in props if "Device Enabled" in line]
    assert len(match) == 1, "Can't find the status of device #%d" % tpad_id

    pat = re.match(r"(.*):\s*(\d+)", match[0])
    assert pat, "No matching status found!"
    return int(pat.group(2))

def flop(tpad_id, status):
    """Change the value of status, and call xinput to reverse that status."""
    if status == 0:
        status = 1
    else:
        status = 0

    print "Changing Device #%d Device Enabled %d" % (tpad_id, status)
    commands.getoutput("""xinput set-prop %d "Device Enabled" %d""" % (tpad_id, status))

def main():
    """Get curent device id and status, and flop status value."""
    tpad = current_id()
    stat = current_status(tpad)
    flop(tpad, stat)

main()

0

在Gnome上,由于某些原因,切换触摸板的功能键不起作用,因此我使用gsettings编写了脚本。

  • 优势:不特定于供应商
  • 缺点:在Gnome上,由于某些原因仍可以处理触摸板的点击(而不是轻击),而该xinput解决方案完全可以按预期停用触摸板。如果像我一样,您唯一的问题是键入时不小心移动了光标,这足够了。

toggle_touchpad_gsettings.py

#!/usr/bin/python3.6
import sys
import subprocess

gsettings_schema, gsettings_key = "org.gnome.desktop.peripherals.touchpad", "send-events"

def get_touchpad_send_events():
    send_events_value = subprocess.check_output(["gsettings", "get", gsettings_schema, gsettings_key])
    return send_events_value.strip()

def toggle_touchpad():
    # string returned from get is a repr including quotes,
    # but string sent with set does not need to have quotes
    if get_touchpad_send_events() == b"'enabled'":
        newval = 'disabled'
    else:
        newval = 'enabled'
    subprocess.Popen(["gsettings", "set", gsettings_schema, gsettings_key, newval])
    print(f"Set {gsettings_schema}:{gsettings_key} to {newval}")

def main():
    toggle_touchpad()

if __name__ == '__main__':
    main()

它也可以在Unity上工作,但我尚未测试。

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.