Onde eu tenho que colar um comando "xinput" para que ele seja executado quando o GNOME for iniciado?

10

No meu Thinkpad, preciso executar algo assim no terminal:

xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Middle Button Emulation" 8 1

para que meus 2 botões no touchpad simulem o clique do meio do mouse. Agora eu preciso que essa linha seja executada toda vez que inicio o GNOMe ou X ou o que for, para que "simplesmente funcione".

Eu tentei ~ / .xsession ou ~ / .bashrc, mas sem sucesso. Devo colocá-lo nos scripts de inicialização do GNOME ou em / etc / X em algum lugar?

Estou usando o Ubuntu 11.10.

michuk
fonte
Tente adicionar um sleep 5no início do seu .xsessionarquivo?
22416 Thomas Ahle
1
@ Thomashole que não resolverá o problema se o gerenciador de janelas estiver carregado e alterar as propriedades do evdev após a execução da .xsession.
Marcin Kaminski

Respostas:

7

Estou usando o Enlightenment DM, mas isso é relevante para outros DMs / desktops. Eu inicio minha sessão usando xsession, então eu inicialmente coloquei comandos xinput em ~ / .xsession que não alteraram todas as configurações que eu queria alterar. Apenas alguns deles. Como eu esperava todas ou nenhuma alteração, adicionei um loop de 10 interações à minha sessão .xs com intervalos de 1 segundo, executando comandos xinput a cada vez e verificando se as configurações foram aplicadas. Para minha surpresa, todas as configurações foram aplicadas após a primeira iteração.

Isso significa que é o seu DM que substitui suas configurações de xinput e, como o comando que inicia o seu DM (E17 no meu caso) é o último no seu arquivo .xsession, esse arquivo não é o lugar para isso.

Adicionei as seguintes linhas no meu ~ / .profile e isso resolveu o problema:

# don't run unless we're being invoked from an xwindows session
if [[ -n ${DISPLAY} ]]; then

  # set your devices names here
  pointer1="IBM TrackPoint"
  pointer2="Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint"
  pointer3="Logitech USB Trackball"

  id1=$(xinput | awk -F= "/$pointer1.*pointer/ {print \$2}" | cut -f1)
  id2=$(xinput | awk -F= "/$pointer2.*pointer/ {print \$2}" | cut -f1)
  id3=$(xinput | awk -F= "/$pointer3.*pointer/ {print \$2}" | cut -f1)

  if [[ -n "${id1}" ]]; then
    xinput --set-button-map "${id1}" 1 2 3 4 5 6 7
    xinput set-prop "${id1}"  "Evdev Wheel Emulation Axes" 6 7 4 5
    xinput set-prop "${id1}"  "Evdev Wheel Emulation" 1
    xinput set-prop "${id1}"  "Evdev Wheel Emulation Button" 2
    xinput set-prop "${id1}"  "Evdev Middle Button Emulation" 0
  fi

  if [[ -n "${id2}" ]]; then
    xinput --set-button-map "${id2}" 1 2 3 4 5 6 7
    xinput set-prop "${id2}"  "Evdev Wheel Emulation Axes" 6 7 4 5
    xinput set-prop "${id2}"  "Evdev Wheel Emulation" 1
    xinput set-prop "${id2}"  "Evdev Wheel Emulation Button" 2
    xinput set-prop "${id2}"  "Evdev Middle Button Emulation" 0
  fi

  if [[ -n "${id3}" ]]; then
    xinput --set-button-map "${id3}" 1 2 3 4 5 6 7 8 9
    xinput set-prop "${id3}"  "Evdev Wheel Emulation Axes" 6 7 4 5
    xinput set-prop "${id3}"  "Evdev Wheel Emulation" 1
    xinput set-prop "${id3}"  "Evdev Wheel Emulation Button" 8
    xinput set-prop "${id3}"  "Evdev Middle Button Emulation" 1
  fi
fi

PS. set-int-prop foi preterido em favor de set-prop (man xinput).

Espero que isso ajude alguém.

Marcin Kaminski
fonte
O script é bom, mas infelizmente não me dá uma solução. Por enquanto, o único método funciona, se eu executar o terminal e executar o 'xinput set-prop' com as opções necessárias. Eu tentei o script de Marcin, Aplicativo de inicialização, mas esses não funcionaram infelizmente.
Geeocode 10/07
"set-int-prop foi descontinuada a favor do conjunto-prop" T H • • • Um N • K • • • Y S L • •
Clément
4

Adicione o comando diretamente aos aplicativos de inicialização. No campo de comando

ou

crie um script simples e adicione-o aos aplicativos de inicialização.

NickTux
fonte
3

Crie um arquivo /etc/X11/Xsession.d/para ele.

Florian Diesch
fonte
Para mim foi/etc/X11/xinit/Xsession
Thomas Ahle
3
Geralmente, não incentivo fazer alterações na configuração específica do usuário em um arquivo de configuração em todo o sistema. Primeiro, porque cria algo adicional a ser lembrado quando você precisa migrar para uma máquina diferente e, em segundo lugar, porque esses arquivos estão lá para fornecer padrões saudáveis. É bom poder tirar o instantâneo do seu $ HOME e a lista de pacotes instalados quando você precisar reinstalar / migrar.
Marcin Kaminski
1

Foi assim que fiz no Ubuntu 14.04 a partir do terminal:

1) Verifique o nome do seu dispositivo:

xinput list

2) Veja as opções disponíveis para o seu dispositivo:

xinput list-props "Your Device Name"

3) Edite as configurações (para tornar as configurações consistentes após a reinicialização / desligamento, basta adicionar este comando aos Aplicativos de Inicialização ):

xinput set-prop "Your Device Name" "Option Name" "Value"

Aqui está um exemplo de comando que eu usei para ativar os arrastos bloqueados no meu touchpad:

xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Locked Drags" 1

Para ativar / alterar outra opção, procure-a nas opções disponíveis no seu dispositivo e brinque com elas até obter o resultado desejado; em seguida, adicione o comando em Aplicativos de inicialização e pronto! Espero que ajude! :)

Marco
fonte