Как отключить тачпад с помощью командной строки?
Есть ли способ отключить тачпад с помощью команды терминала?
7 ответов
Чтобы отключить сенсорную панель:
synclient TouchpadOff=1
Чтобы включить его снова:
synclient TouchpadOff=0
Есть как минимум два метода (о которых я знаю), которые вы можете попробовать.
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
,
Ссылки для дальнейшего чтения
НОТА
При настройке свойств через xinput
или же synclient
свойства не установлены для другого инструмента. Они также не установлены в едином центре управления.
synclient
а также xinput
не будет работать, если вы используете среду GNOME (или Unity, Cinnamon), потому что он будет переопределять настройки, так что если вы хотите synclient
или же xinput
чтобы принять эти настройки, вы должны сначала отключить это:
устанавливать
dconf-editor
если не установлен:apt-get install dconf-editor
бежать
dconf-editor
dconf-editor
откройте каталог
/org/gnome/settings-daemon/plugins/mouse/
или же/org/cinnamon/settings-daemon/plugins/mouse/
и снимите флажок дляactive
,logout
или жеreboot
Это должно сделать synclient
или же xinput
Работа.
Я написал кусок кода на 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()
Перечислите ваши устройства ввода:
xinput list
В моем случае у меня есть этот список:
Virtual core XTEST pointer id=4 Logitech M510 id=11 ETPS/2 Elantech Touchpad id=15
Отключите сенсорную панель, передав идентификатор
xinput set-prop 15 "Device Enabled" 0
Отключить любую сенсорную панель одной командой, хорошо для скрипта.
xinput list |
sed '/Touch[Pp]ad/!d; s/.*id=//;s/\s.*//' |
xargs -i xinput --disable {}
В 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, но я не проверял.