Como posso alternar o touchpad dependendo do mouse estar conectado?

9

Eu quero que meu touchpad seja desativado automaticamente quando um mouse externo estiver conectado e ativado quando não houver nenhum. Eu tentei usar touchpad-indicator , mas isso falha nos casos em que o computador foi colocado em suspensão com um mouse conectado e acordado com o mouse desconectado.

Eu tentei criar o seguinte script em um daemon para resolver esse problema, mas não consigo fazê-lo funcionar:

#!/bin/bash

declare -i TID
declare -i MID
TID='xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}''
MID='xinput list | grep -Eo 'Mouse\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}''
if [ $MID -gt 0 ]
then
    xinput disable $TID
else
    xinput enable $TID
fi

Eu tentei start-stop-daemon -S -x ./myscript.sh -b

e setsid ./myscript.sh >/dev/null 2>&1 < /dev/null &

e nohup ./myscript 0<&- &>/dev/null & e até ./myscript.sh &

Todos estes retornam algum número de 4 dígitos, que, eu acho, deveria ser PID do processo iniciado, mas quando eu inicio o lxtask não há processos com este PID , mesmo se eu assinalar " ver todos os processos ". E, claro, isso não funciona!

    
por mekkanizer 23.03.2014 / 18:52

2 respostas

10

O script básico de que você precisa é simplesmente:

#!/usr/bin/env bash

## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

## Run every second
while :
do
   ## Disable the touchpad if there is a mouse connected
   ## and enable it if there is none.
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    ## wait one second to avoind spamming your CPU
    sleep 1
done

O script acima irá alternar o trackpad dependendo se um mouse está conectado. Quando lançado, ele funcionará para sempre e verificará um mouse a cada segundo, desativando ou ativando o touchpad de acordo.

Agora, salve o script como ~/touchpad.sh , torne-o executável ( chmod +x ~/touchpad.sh ) e adicione-o aos programas de inicialização da sessão da GUI. Você não especificou qual ambiente de área de trabalho está usando, mas desde que mencionou lxtask , presumo que esteja usando LXDE . De qualquer forma, aqui estão as instruções para LXDE e Unity :

  1. Adicione o script aos arquivos de autostart do LXDE

    echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file
    

    Certifique-se de substituir "PROFILE" pelo nome real do seu perfil LXDE , você pode descobrir o que é executando ls ~/.config/lxsession/ .

  2. Adicione o script aos arquivos de autostart da Unity

    Abra Startup Applications (pesquise no painel por "Inicialização")

    Clique em "Adicionar" e cole o caminho para o seu script no campo de comando:

por terdon 23.03.2014 / 20:25
9

Ok, eu fiz uma regra do udev para isso, e é, como disse @terdon, uma maneira muito mais clara

Então, graças a este guia , criei um arquivo "touchpad_toggle.rules" em / etc /udev/rules.d/ (requer acesso root) e preencheu com duas linhas:

SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/on.sh"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/off.sh"

Não se esqueça de substituir "username" pelo seu nome de usuário!

O conteúdo desses scripts de shell on e off é apenas uma versão castrada do script na minha pergunta. Exemplo - off.sh:

#!/bin/bash

declare -i TID
TID='xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}''
xinput disable $TID

Você terá que usar o xinput enable $ TID no on.sh

E não se esqueça de adicionar o script da minha pergunta (ou o @terdon sugerido, mas sem um loop) ao início automático da sessão, como ele disse em sua resposta.

É isso, mas tenho que adicionar uma coisa:

Se você tem um touchpad Synaptics (eu tenho Elantech, então não é adequado para mim), você pode substituir seus scripts (caminhos para os quais você escreve após RUN + =) com um comando simples /usr/bin/synclient TouchpadOff=0 e 1 respectivamente

    
por mekkanizer 23.03.2014 / 21:47