Como desabilito um touchpad usando a linha de comando?

39

Existe uma maneira de desativar um touchpad usando um comando terminal?

Peng Wu
fonte

Respostas:

55

Para desativar o touch pad:

synclient TouchpadOff=1

Para ligá-lo novamente:

synclient TouchpadOff=0
0x7c0
fonte
Simples, mas vá direto ao ponto.
Ade Malsasa Akbar
7
não funciona no meu computador ...
Casper
Interessante, bom saber.
Aleroxac
2
O comando foi executado sem erros no meu Ubuntu 14.04 LTS no Dell XPS 13, mas não teve efeito.
IJ Kennedy,
Alternar seria bom - eu gostaria de configurá-lo como um atalho ou algo assim. Melhor ainda, quando estiver ancorado, quero desligar o touchpad
Christian Bongiorno
22

Existem pelo menos dois métodos (que eu conheço) que você poderia tentar.

sincliente

Se o seu laptop estiver equipado com um touchpad Synaptics (ou ALPS), você poderá usá-lo synclientcomo já mencionado pelo Shutupsquare. Estou executando o Ubuntu 14.04 e na minha máquina ele foi instalado por padrão.

Teste se o synclient está instalado: synclient -V(deve informar o número da versão)

Ligue o touchpad: synclient TouchpadOff=0

Desative o touchpad: synclient TouchpadOff=1

Eu mesmo não testei isso, mas se seu objetivo é não mover o mouse quando seus braços estão apoiados no touch pad, isso pode ajudar.

Ative a detecção de palma: synclient PalmDetect=1

Desative a detecção de palma: synclient PalmDetect=0

Em geral, você pode configurar qualquer propriedade do touchpad Synaptics synclient property=value. Onde a propriedade é uma das propriedades disponíveis mostradas porsynclient -l

Links para leitura adicional

ubuntu - wiki de ajuda comminity - SynapticsTouchpad

archlinux - wiki - Touchpad Synaptics

Como faço para manter minhas configurações de sincronização? - Ubuntu

xinput

Se você não quiser ou não puder usar o synclient, também poderá usar xinput. O procedimento é um pouco semelhante.

listar todos os dispositivos xinput: xinput

Parte da saída pode ficar assim:

⎡ 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)]

Nesse caso específico, meu touchpad tem id = 17 e seu nome completo é "ETPS / 2 Elantech Touchpad".

O comando para definir uma propriedade é xinput set-prop. A propriedade para ativar ou desativar o touchpad é Device Enabled, para ativá-lo ou desativá-lo, digite:

Ative o touchpad: xinput set-prop <id> "Device Enabled" 1(onde <id>está o ID do seu dispositivo, no meu caso 17)

Desative o touchpad: xinput set-prop <id> "Device Enabled" 0

Ative a detecção de palma: xinput set-prop <id> "Palm Detection" 1

Desative a detecção de palma: xinput set-prop <id> "Palm Detection" 0

Para consultar as propriedades disponíveis: xinput list-props <id>OU xinput list-props <full-name>, isso deve ser bastante semelhante ao synclient -l.

Links para leitura adicional

ubuntu - wiki - entrada

NOTA

Ao definir propriedades por meio de uma xinputou synclientas propriedades, não estão definidas para a outra ferramenta. Eles também não estão definidos no centro de controle da unidade.

bremme
fonte
11
Obrigado pela segunda resposta. synclientnão funcionou para mim, xinputfuncionou.
Robin Winslow
11
Observe que os xinputIDs podem mudar durante a reinicialização. Portanto, confiar nesses IDs em scripts ou atalhos não funcionará.
Lode
synclientfunciona totalmente no Arch Linux. Obrigado assim muito !!!
Theodore R. Smith
Isso fez por mim. Em particular, descobri que precisava executar xinput <enable/disable> <id>, pois a configuração TouchpadOffvia synclientera ineficaz.
22418 Michael Michael
Obrigado pela introdução a xinput. Eu estava meio confuso com o meu teclado embutido e os botões do trackpoint, aparentemente enviando entradas ruins que interferiam na entrada do teclado externo. Isso permitiu ao meu desativar os dispositivos internos. Felicidades! :)
sjakobi 13/06
4

syncliente xinputnão funcionará se você estiver usando o ambiente gnome (ou unity, canela), porque substituirá as configurações; portanto, se você quiser synclientou xinputassumir essas configurações, desative-o primeiro:

  1. instale dconf-editorse não estiver instalado:

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

    dconf-editor 
    
  3. abra o diretório /org/gnome/settings-daemon/plugins/mouse/ou /org/cinnamon/settings-daemon/plugins/mouse/desmarque a caixa de seleção active.

  4. logout ou reboot

Isso deve fazer synclientou xinputfuncionar.

realhu
fonte
1
  1. Liste seus dispositivos de entrada:

    xinput list
    

    No meu caso, eu tenho esta lista:

    Virtual core XTEST pointer                  id=4
    Logitech M510                               id=11   
    ETPS/2 Elantech Touchpad                    id=15
    
  2. Desative seu touchpad passando o ID

    xinput set-prop 15 "Device Enabled" 0
    
D.Snap
fonte
Ao digitar manualmente, você pode usar xinput enable [device]e xinput disable [device]diretamente. Ao criar scripts, o uso set-prop [device] "Device Enabled" [value]pode ser um pouco mais fácil, como na resposta do desenvolvedor do World Python.
hsandt
1

Eu escrevi um pedaço de código python para que você possa usar a xinputtécnica sem fazer todo o trabalho manual. Copyleft, COMO ESTÁ, sem garantia, use por seu próprio risco. Funciona muito bem para mim: e se você estiver usando o gnome, mapeie-o para um atalho de tecla como 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()
Desenvolvedor Python Mundial
fonte
0

No Gnome, minha tecla de função para alternar o touchpad não estava funcionando por algum motivo, então fiz um script usando gsettings.

  • Vantagem: não específico do fornecedor
  • Desvantagem: no Gnome, os cliques no touchpad (não toque) ainda são tratados por algum motivo, enquanto a xinputsolução desativa completamente o touchpad conforme o esperado. Se como eu, seu único problema é que você está inadvertidamente movendo o cursor enquanto digita, porém, isso será suficiente.

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()

Também deve funcionar no Unity, mas não testei.

hsandt
fonte