Вопрос или проблема
Есть ли способ отключить тачпад с помощью терминальной команды?
Чтобы выключить тачпад:
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 свойство=значение
. Где свойство – одно из доступных свойств, показанных с помощью synclient -l
Ссылки для дальнейшего чтения
ubuntu – вики помощи сообщества – SynapticsTouchpad
archlinux – вики – Touchpad Synaptics
ask ubuntu – Как сохранить настройки synclient? – Ubuntu
xinput
Если вы не хотите или не можете использовать synclient, вы также можете использовать xinput
. Процедура довольно похожа.
Список всех устройств xinput: xinput
Часть вывода может выглядеть так:
⎡ Виртуальный основной указатель id=2 [основной указатель (3)]
⎜ ↳ Виртуальный основной указатель XTEST id=4 [вторичный указатель (2)]
⎜ ↳ Logitech USB-PS/2 Оптическая мышь id=13 [вторичный указатель (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=17 [вторичный указатель (2)]
В данном случае мой тачпад имеет id=17, полное название – “ETPS/2 Elantech Touchpad”.
Команда для установки свойства – 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>
ИЛИ xinput list-props <полное-имя>
, это должно быть довольно похоже на synclient -l
.
Ссылки для дальнейшего чтения
ПРИМЕЧАНИЕ
При установке свойств через xinput
или synclient
, эти свойства не устанавливаются для другого инструмента. Они также не устанавливаются в unity-control-center.
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 (теперь обновленный с python2 до python3), чтобы вы могли использовать технику xinput
без выполнения всей ручной работы. Copyleft, AS-IS, без гарантии, используйте на ваш страх и риск. У меня отлично работает: и если вы используете gnome, просто назначьте это на сочетание клавиш, например CtrlShiftT.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''Программа для переключения состояния тачпада между включенным и выключенным.'''
from subprocess import check_output
import re
def current_id():
""" Искать в выводе xinput и найти строку, содержащую
слово Тачпад. На этом этапе, я думаю, мы можем найти ID этого устройства.
"""
props = check_output(["xinput"]).decode("utf-8").splitlines()
match = [line for line in props if "Touchpad" in line]
assert len(match) == 1, "Проблема при поиске строки Touchpad! %s" % match
pat = re.match(r"(.*)id=(\d+)", match[0])
assert pat, "Не найдено соответствующее ID!"
return int(pat.group(2))
def current_status(tpad_id):
""" Найдите текущий ID устройства
- в строке должно быть слово Touchpad."""
props = check_output(
['xinput','list-props',str(tpad_id)]).decode("utf-8").splitlines()
match = [line for line in props if "Device Enabled" in line]
assert len(match) == 1, "Не удается найти статус устройства #%d" % tpad_id
pat = re.match(r"(.*):\s*(\d+)", match[0])
assert pat, "Не найдено соответствующее состояние!"
return int(pat.group(2))
def flop(tpad_id, status):
"""Измените значение состояния и вызовите xinput, чтобы изменить это состояние."""
if status == 0:
status = 1
else:
status = 0
print("Изменение устройства #",tpad_id," на состояние Device Enabled: ",status)
props = check_output(['xinput',
'set-prop',
str(tpad_id),
'Device Enabled',
str(status)])
def main():
"""Получить текущий id устройства и статус, и поменять значение статуса."""
tpad = current_id()
stat = current_status(tpad)
flop(tpad, stat)
main()
-
Список ваших устройств ввода:
xinput list
В моем случае у меня есть следующий список:
Виртуальный основной указатель XTEST id=4 Logitech M510 id=11 ETPS/2 Elantech Touchpad id=15
-
Отключите ваш тачпад, передав ID
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():
# строка, возвращаемая get, это репрезентация с кавычками,
# но строка, отправляемая с помощью set, не должна иметь кавычек
if get_touchpad_send_events() == b"'enabled'":
newval="disabled"
else:
newval="enabled"
subprocess.Popen(["gsettings", "set", gsettings_schema, gsettings_key, newval])
print(f"Установлено {gsettings_schema}:{gsettings_key} на {newval}")
def main():
toggle_touchpad()
if __name__ == '__main__':
main()
Это также должно работать на Unity, но я не тестировал.
Используя gsettings
(обновление для 2024 года), это решение не зависит от специфических методов или инструментов, которые в настоящее время устарели.
Чтобы отключить тачпад:
gsettings set org.gnome.desktop.peripherals.touchpad send-events disabled
Чтобы включить тачпад:
gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled
Если вы хотите горячую клавишу для этого, подумайте о чем-то аналогичном ответу hsandt.
Ответ или решение
Чтобы отключить сенсорную панель (тачпад) через командную строку, вы можете использовать несколько методов, в зависимости от вашего дистрибутива Linux и установленного оборудования. Основные инструменты для управления сенсорными панелями через терминал — это synclient
и xinput
.
Метод 1: Использование synclient
Если ваша сенсорная панель поддерживает драйверы Synaptics или ALPS, вы можете использовать synclient
для управления её настройками. Убедитесь, что synclient
установлен на вашей системе, запустив следующую команду:
synclient -V
Если команда возвращает номер версии, значит, утилита установлена и готова к использованию. Чтобы отключить или включить сенсорную панель, выполните следующие команды:
- Отключить сенсорную панель:
synclient TouchpadOff=1
- Включить сенсорную панель:
synclient TouchpadOff=0
Вы также можете включить или отключить распознавание ладони, используя следующие команды:
- Включить распознавание ладони:
synclient PalmDetect=1
- Отключить распознавание ладони:
synclient PalmDetect=0
Метод 2: Использование xinput
Если synclient
недоступен или не подходит, вы можете воспользоваться xinput
. Для этого выполните следующие команды:
- Сначала получите список всех устройств ввода:
xinput list
- Найдите ID вашей сенсорной панели в выводе. Например, если ваша панель имеет ID 17, то вы можете отключить её следующим образом:
- Отключить сенсорную панель:
xinput set-prop 17 "Device Enabled" 0
- Включить сенсорную панель:
xinput set-prop 17 "Device Enabled" 1
Если вы хотите отключить все сенсорные панели сразу, можно использовать следующую команду:
xinput list | sed '/Touch[Pp]ad/!d; s/.*id=//;s/\s.*//' | xargs -i xinput --disable {}
Использование gsettings
в GNOME
В средах рабочего стола, таких как GNOME или Cinnamon, вы также можете использовать gsettings
для управления настройками сенсорной панели:
- Отключить сенсорную панель:
gsettings set org.gnome.desktop.peripherals.touchpad send-events disabled
- Включить сенсорную панель:
gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled
Примечания
-
Если вы используете окружение GNOME или Unity, возможно, вам потребуется отключить некоторые из их настроек, чтобы эти команды работали. Например, вы можете использовать
dconf-editor
, чтобы отключить плагин мыши. -
Если вам нужно быстро переключать состояние сенсорной панели, вы можете создать скрипт на Python, который будет использовать
xinput
для автоматизации этого процесса.
Заключение
Вышеописанные методы позволяют вам отключить и включить сенсорную панель через командную строку на разных дистрибутивах Linux. Выберите тот, который подходит именно для вашего оборудования и окружения рабочего стола.