Como desativar / ativar / alternar o touchpad em um laptop Dell

8

Estou tentando ajustar o touchpad no Ubuntu 16.04, mas nenhum dos métodos usuais parece funcionar. por exemplo,

synclient touchpadOff=1

Ainda funciona!

$ xinput set-prop $DEVICE_ID "Device Enabled" 0
$ xinput list-props 15 |head -n2
  Device 'SynPS/2 Synaptics TouchPad':
    Device Enabled (168):   0

... ainda funciona!

Eu posso desativá-lo no aplicativo "Configurações". mas eu quero ser capaz de mapear isso para um atalho de teclado, então estou procurando uma solução de linha de comando.

Pontos de bônus se você responder a trabalhos no Gnome-Shell, assim como Unity: -)

EDIT: saída do xinput, conforme solicitado no comentário.

$ xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ELAN Touchscreen                          id=12   [slave  pointer  (2)]
⎜   ↳ DLL06E4:01 06CB:7A13 Touchpad             id=13   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ Sleep Button                              id=10   [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD                      id=11   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=14   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=16   [slave  keyboard (3)]

Nb. Eu usei 15 para $DEVICE_ID

EDIT - graças à resposta abaixo, aqui está meu script de alternância

Você pode fazer isso de uma só vez, mas também recebe uma notificação legal. Eu anexei isso a uma tecla de atalho e funciona bem. Obrigado a todos.

#!/bin/bash
if xinput list-props 13 | grep "Device Enabled (168):.*1" >/dev/null
then
  xinput disable 13
  notify-send -u low -i mouse "Trackpad disabled"
else
  xinput enable 13
  notify-send -u low -i mouse "Trackpad enabled"
fi
    
por artfulrobot 29.03.2016 / 11:53

3 respostas

8

Você pode desativar o touchpad com este comando:

xinput disable 13

Ativá-lo de volta por

xinput enable 13

O dispositivo não é controlado por psmouse . É controlado por synaptics_i2c . E é o dispositivo 13.

Você também pode alterná-lo pelo nome como tentou antes, sem depender do ID. Mas se você não conectar novos dispositivos de entrada, o ID deve permanecer.

Veja esta resposta para alguns detalhes.

Para remover um dispositivo detectado incorretamente, você precisa adicionar o parâmetro de inicialização do kernel i8042.nopnp .

    
por Pilot6 29.03.2016 / 12:08
3

Usando gsettings

Se você pode alterar as configurações por gsettings , geralmente é a opção preferida. Como você pode ativar / desativar o touchpad nas Configurações do sistema e tenho certeza de que as configurações do sistema usam , use gsettings , parece que o método abaixo também deve funcionar na sua Dell.

Script para alternar o touchpad

14.04

#!/usr/bin/env python3
import subprocess

key = "org.gnome.settings-daemon.peripherals.touchpad" ;val = "touchpad-enabled"
curr = subprocess.check_output(["gsettings", "get", key, val]).decode("utf-8").strip()
newval = "false" if curr == "true" else "true"
subprocess.Popen(["gsettings", "set", key, val, newval])

15.04 +

#!/usr/bin/env python3
import subprocess

key = "org.gnome.desktop.peripherals.touchpad" ;val = "send-events"
curr = subprocess.check_output(["gsettings", "get", key, val]).decode("utf-8").strip()
newval = "disabled" if curr == "'enabled'" else "enabled"
subprocess.Popen(["gsettings", "set", key, val, newval])

Para usá-lo

  1. Copie o script acima, para sua versão correta do Ubuntu, em um arquivo vazio, salve-o como toggle_touchpad.py
  2. Adicione o seguinte comando a um atalho:

    python3 /path/to/toggle_touchpad.py
    

    Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/toggle_touchpad.py
    

Explicação

O comando para desativar o touchpad:

para 14.04 :

gsettings set org.gnome.settings-daemon.peripherals.touchpad touchpad-enabled false

para 15,04 + :

gsettings set org.gnome.desktop.peripherals.touchpad send-events disabled

Leia o estado atual

Se usarmos um script para ler as configurações atuais pelo comando:

gsettings get org.gnome.settings-daemon.peripherals.touchpad touchpad-enabled

(14,04) ou

gsettings get org.gnome.desktop.peripherals.touchpad send-events

(15,04 +)

Podemos fazer com que o script defina o valor oposto e, assim, alternar o touchpad.


EDITAR; versão bash do script de alternância

Para completar, e porque o OP indicou que o (s) script (s) python funcionou, mas não queria usar python , as versões bash dos dois scripts de alternância:

14.04

#!/bin/bash

key="org.gnome.settings-daemon.peripherals.touchpad"
val="touchpad-enabled" ;curr="$key $val"

if [ "$(gsettings get $curr)" == "false" ]
then
 gsettings set $key $val true
else
 gsettings set $key $val false
fi

15.04 +

#!/bin/bash

key="org.gnome.desktop.peripherals.touchpad"
val="send-events" ;curr="$key $val"

if [ "$(gsettings get $curr)" == "'enabled'" ]
then
 gsettings set $key $val disabled
else
 gsettings set $key $val enabled
fi

Para colocar sob uma tecla de atalho

  • Salve o script como toggle_touchpad.sh
  • coloque o seguinte comando em um atalho personalizado:

    /bin/bash /path/to/toggle_touchpad.sh
    
por Jacob Vlijm 29.03.2016 / 14:03
1

Estou no 16.04 também. Eu costumo usar um pequeno script que eu coloquei em um atalho de teclado. Quando eu executo, ele desliga meu touchpad ... Mas alguns segundos depois que ele liga ...

O script:

    #!/bin/sh

STATUS='synclient | grep TouchpadOff | awk '{ print $3}''

        if [ $STATUS != 1 ];
        then
                synclient touchpadOff=1;
        else
                synclient touchpadOff=2;
        fi
exit 0

Eu não tento usá-lo antes de ver sua pergunta ...

    
por monitor35 29.03.2016 / 12:13

Tags