Как отключить тачпад с помощью командной строки?


Ответы:


55

Чтобы отключить сенсорную панель:

synclient TouchpadOff=1

Чтобы включить его снова:

synclient TouchpadOff=0

Просто, но перейдите к делу.
Аде Мальсаса Акбар

7
не работает на моем компьютере ...
Каспер

Интересно, приятно знать.
aleroxac

2
Команда выполнялась без ошибок на моей Ubuntu 14.04 LTS на Dell XPS 13, но не имела никакого эффекта.
IJ Кеннеди

Было бы неплохо переключить - я бы хотел настроить его как короткий путь или что-то в этом роде. Еще лучше, когда он пристыкован, я хочу отключить тачпад
Кристиан Бонджорно

22

Есть как минимум два метода (о которых я знаю), которые вы можете попробовать.

synclient

Если ваш ноутбук оснащен сенсорной панелью 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 - Справка по вежливости - SynapticsTouchpad

archlinux - вики - тачпад Synaptics

спросите Ubuntu - Как мне сделать мои настройки синхронизатора? - Ubuntu

XInput

Если вы не хотите или не можете использовать 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 Touchpad».

Команда для установки свойства есть xinput set-prop. Свойство для включения или отключения сенсорной панели есть Device Enabled, поэтому для включения или отключения ее введите:

Включите сенсорную панель: xinput set-prop <id> "Device Enabled" 1(где у <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>ИЛИ xinput list-props <full-name>, это должно быть очень похоже на synclient -l.

Ссылки для дальнейшего чтения

Ubuntu - Вики - вход

НОТА

При настройке свойств через один xinputили synclientсвойства не устанавливаются для другого инструмента. Они также не установлены в едином центре управления.


1
Спасибо за второй ответ. synclientне работал для меня, xinputсделал.
Робин Уинслоу

1
Обратите внимание, что xinputидентификаторы могут меняться при перезапуске. Поэтому полагаться на эти идентификаторы в скриптах или ярлыках не получится.
Лоде

synclientполностью работает на Arch Linux. Спасибо так много !!!
Теодор Р. Смит

Это сделало это для меня. В частности, я обнаружил, что мне нужно запустить xinput <enable/disable> <id>, так как установка TouchpadOffчерез synclientбыла неэффективной.
Майкл Мол

Спасибо за введение в xinput. Я был в некотором затруднении с моей встроенной клавиатурой и кнопками трекпойнта, по-видимому, посылая плохие входы, которые мешали вводу с внешней клавиатуры. Это позволило мне отключить встроенные устройства. Ура! :)
Сякоби

4

synclientи xinputне будет работать, если вы используете среду gnome (или unity, cinnamon), потому что она будет переопределять настройки, поэтому, если вы хотите synclientили хотите xinputпринять эти настройки, вы должны сначала отключить это:

  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

Это должно сделать synclientили xinputработать.


1
  1. Список ваших устройств ввода:

    xinput list
    

    В моем случае у меня есть этот список:

    Virtual core XTEST pointer                  id=4
    Logitech M510                               id=11   
    ETPS/2 Elantech Touchpad                    id=15
    
  2. Отключите сенсорную панель, передав идентификатор

    xinput set-prop 15 "Device Enabled" 0
    

При наборе вручную, вы можете использовать xinput enable [device]и xinput disable [device]напрямую. При написании сценариев использование set-prop [device] "Device Enabled" [value]может быть немного проще, как в ответе разработчика World Python.
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, но я не проверял.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.