Como eu faço as configurações do mouse de xinput persistentes para um mouse USB?

5

Eu uso xinput para altera as configurações do meu mouse USB :

xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1

Como posso fazer essas configurações persistentes depois de desconectar o mouse ou reiniciar?

    
por ændrük 09.09.2010 / 07:27

2 respostas

7

Você poderia cron do comando ou adicioná-lo à sua inicialização, mas nenhum deles é particularmente elegante. Se eu fosse você, adicionaria isso às minhas regras do udev e deixaria o sistema detectar eventos e disparar o comando quando necessário.

Primeiro, precisamos do fornecedor do mouse e das sequências de produtos. Você pode encontrá-los através de lsusb . Procure pelo seu mouse. Aqui está meu mouse mostra:

Bus 004 Device 012: ID 1532:000f Razer USA, Ltd 

Na parte 1532:000f , 1532 é o fornecedor e 000f é o produto.

Então, adicionamos uma regra ao udev. As regras do udev são encontradas em /lib/udev/rules.d/ . Você pode escrever o seu próprio ou ser atrevido e editar outro. Há um pequeno README útil lá também que eu sugiro que você examine ( cat /lib/udev/rules.d/README ).

O que você deseja adicionar uma regra como essa. Repare que eu uso os IDs anteriores para fazer este trabalho.

BUS=="usb", SYSFS{idVendor}=="1532", SYSFS{idProduct}=="000f", ACTION=="add",
RUN+="/usr/bin/xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1"

udev deve buscá-lo imediatamente.

Nota O udev pode fazer coisas muito inteligentes sozinho quando se trata de configurar dispositivos. Você pode não precisar de xinput . Aqui está um exemplo de uma configuração personalizada para um mouse.

    
por Oli 09.09.2010 / 10:51
2

Não consigo pensar em outra solução além de iniciar um pequeno daemon periodicamente pesquisa xinput --list e executa um comando quando um dispositivo é conectado ou removido.

Exemplo de código:

#! /bin/sh -x
#
# xievd [INTERVAL]
#
# Poll 'xinput' device list every INTERVAL seconds (default: 10)
# and run script in ~/.xievd/${device_name}.sh when a device is
# plugged-in (or pulled out).
#
# The device name is the same as given by 'xinput --list', with
# the following transformations applied:
#   * any non-alphanumeric character is deleted (except: space, '_' and '-')
#   * leading and trailing spaces are removed
#   * any sequence of 1 or more space chars is converted to a single '_'
#

interval=${1:-10}

scripts_dir="$HOME/.xievd"
if [ ! -d "$scripts_dir" ]; then
  echo 1>&2 "xievd: No scripts directory -- exiting."
  exit 1
fi

state_dir="$(mktemp -t -d xievd.XXXXXX)" \
  || { echo 1>&2 "xievd: Cannot create state directory -- exiting."; exit 1; }
trap "rm -rf $state_dir; exit;" TERM QUIT INT ABRT

process_xinput_device_list() {
  touch "${state_dir}/.timestamp"

  # find new devices and run "start" script
  xinput --list --short \
    | fgrep slave \
    | sed -r -e 's/id=[0-9]+.+//;s/[^a-z0-9 _-]//ig;s/^ +//;s/ *$//;s/ +/_/g;' \
    | (while read device; do 
        if [ ! -e "${state_dir}/${device}" ]; then
          # new device, run plug-in script
          [ -x "${scripts_dir}/${device}" ] && "${scripts_dir}/${device}" start
        fi
        touch "${state_dir}/${device}"
      done)

  # find removed devices and run "stop" script
  for d in "$state_dir"/*; do
    if [ "${state_dir}/.timestamp" -nt "$d" ]; then
      # device removed, run "stop" script
      device="$(basename $d)"
      [ -x "${scripts_dir}/${device}" ] && "${scripts_dir}/${device}" stop
      rm -f "$d"
    fi
  done
}

# main loop
while true; do
      process_xinput_device_list
      sleep $interval
      sleep 1
done

# cleanup
rm -rf "$state_dir"

Salve o código acima em um arquivo executável xievd em algum lugar em seu PATH, adicione-o aos seus aplicativos de inicialização e, em seguida, crie um ~/.xievd/USB_Optical_Mouse script de shell:

#! /bin/sh
if [ "$1" = "start" ]; then
  xinput set-ptr-feedback 'USB Optical Mouse' 4 1 1
fi
    
por Riccardo Murri 09.09.2010 / 10:49