tl; dr
Acabei de comprar um Logitech T630 . É um mouse Bluetooth que suporta vários eventos do teclado por meio de gestos (PDF). Esses gestos são bons e elegantes, mas eu tenho pouco uso para eles. Estou tendo um tempo terrível me livrando deles.
Quero fazer o seguinte, em ordem decrescente de prioridade:
- desativar esses gestos
- remapear os gestos (acho que sem hackear o firmware ou fazer engenharia reversa dos drivers de dispositivo do Windows / OS X, isso não é possível)
Eu não quero:
- use o Windows
- desativar todos os gestos
Para mais informações, leia…
botões e gestos
Os treze eventos possíveis do mouse são:
- Clique esquerdo
- clique do meio
- clique direito
- rolar para cima
- rolar para baixo
- rolar para a esquerda
- role para a direita
- deslize a borda para a esquerda
- deslize a borda para a direita
- deslize com dois dedos para a esquerda
- deslize com dois dedos para a direita
- toque duplo
- toque duplo com dois dedos
Os sete primeiros estão em ordem de como o sistema operacional os mapeia.
Apenas os três primeiros são mecânicos - todos os outros usam a superfície de toque:
Opções da GUI
A instalação no Kubuntu Trusty foi muito fácil, mas oferece pouco suporte para a configuração desses outros gestos.
Esses gestos não estão relacionados a:
- touchpad (
synaptics
não está em execução) - acessibilidade
- cantos quentes
- gestos padrão do mouse
Todas as configurações relacionadas foram verificadas e estão todas desativadas.
configurações da linha de comando
lomoco
O lomoco
utilitário para ajudar a configurar recursos especiais dos mouses USB da Logitech não é aplicável.
xinput
Eu pensei que xinput
poderia oferecer alguma ajuda:
$ xinput --list | grep pointer
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Ultrathin Touch Mouse id=13 [slave pointer (2)]
$ xinput --list-props 13
Device 'Ultrathin Touch Mouse':
Device Enabled (144): 1
Coordinate Transformation Matrix (146): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (266): 0
Device Accel Constant Deceleration (267): 1.000000
Device Accel Adaptive Deceleration (268): 1.000000
Device Accel Velocity Scaling (269): 10.000000
Device Product ID (261): 1133, 45069
Device Node (262): "/dev/input/event11"
Evdev Axis Inversion (270): 0, 0
Evdev Axes Swap (272): 0
Axis Labels (273): "Rel X" (154), "Rel Y" (155), "Rel Horiz Wheel" (746), "Rel Vert Wheel" (265)
Button Labels (274): "Button Left" (147), "Button Middle" (148), "Button Right" (149), "Button Wheel Up" (150), "Button Wheel Down" (151), "Button Horiz Wheel Left" (152), "Button Horiz Wheel Right" (153), "Button Side" (1032), "Button Extra" (1033), "Button Unknown" (264), "Button Unknown" (264), "Button Unknown" (264), "Button Unknown" (264)
Evdev Middle Button Emulation (275): 0
Evdev Middle Button Timeout (276): 50
Evdev Third Button Emulation (277): 0
Evdev Third Button Emulation Timeout (278): 1000
Evdev Third Button Emulation Button (279): 3
Evdev Third Button Emulation Threshold (280): 20
Evdev Wheel Emulation (281): 0
Evdev Wheel Emulation Axes (282): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (283): 10
Evdev Wheel Emulation Timeout (284): 200
Evdev Wheel Emulation Button (285): 4
Evdev Drag Lock Buttons (286): 0
Observe os 13 rótulos dos botões:
$ xinput --get-button-map "Ultrathin Touch Mouse"
1 2 3 4 5 6 7 8 9 10 11 12 13
Desligá-los não ajudou:
$ xinput --set-button-map "Ultrathin Touch Mouse" 1 2 3 4 5 6 7 0 0 0 0 0 0
Mesmo assim, por exemplo, ele pode transformar o botão do meio do mouse em um clique esquerdo:
$ xinput --set-button-map "Ultrathin Touch Mouse" 1 1 3 4 5 6 7 0 0 0 0 0 0
xmodmap
Similar aos xinput
mesmos resultados:
$ xmodmap -e "pointer = 1 2 3 4 5 6 7 0 0 0 0 0 0"
inputkbd
Sugerido por elmicha abaixo , isso está funcionando no nível do kernel, tentando fazer com que os gestos resultem em eventos de teclado nulos. Deve funcionar, mas também não há sorte aqui, com o seguinte processo:
$ sudo input-kbd 4 > keymap # note the 4 is from /dev/input/event4
# edit the keymap to map any combination of keys to either 0 or 240 (KEY_UNKNOWN)
# e.g. change this:
# 0x700e0 = 29 # KEY_LEFTCTRL
# to this:
# 0x700e0 = 0 # KEY_LEFTCTRL
# or this:
# 0x700e0 = 240 # KEY_LEFTCTRL
$ sudo input-kbd -f keymap 4
$ sudo input-kbd 4 # should return the updated keymap
Depois de fazer isso, o mapa de teclas não mostra nenhuma alteração.
xkbcomp
Isso foi sugerido pelo X
hacker Peter Hutterer , certamente um homem que deveria saber o que estava fazendo. Ainda assim, sem sorte:
$ xkbcomp -xkb $DISPLAY t630.xkb
# edit the keyboard description and replace the definition of any key to NoSymbol or VoidSymbol
# e.g. change this:
# key <LCTL> { [ Control_L ] };
# to this:
# key <LCTL> { [ NoSymbol ] };
# or this:
# key <LCTL> { [ VoidSymbol ] };
$ sudo xkbcomp -i 8 t630.xkb $DISPLAY # here the 8 is the id in xinput, names don't work
$ xkbcomp -xkb -i 8 $DISPLAY - # should return the updated keyboard description
Depois de fazer isso, a descrição do teclado não mostra alterações.
Peter achava que isso provavelmente se devia ao fato de X
estar confuso quanto à natureza do dispositivo como teclado ou mouse, como esse bug que tem o problema oposto. Isso pode explicar por que todos os outros itens esperados não funcionam. No entanto, ele também disse que o uso evdev
não deve funcionar pelo mesmo motivo.
evdev
Pareceu a princípio funcionar, mas também não. Isso tenta aproveitar o driver de entrada genérico X
para definir o mapeamento de botão anexando o seguinte a /usr/share/X11/xorg.conf.d/10-evdev.conf
ou /etc/X11/xorg.conf.d/10-evdev.conf
:
# custom for Logitech Ultrathin Touch mouse
Section "InputDevice"
Identifier "Logitech bluetooth Touch Mouse"
Driver "evdev"
Option "Name" "Ultrathin Touch Mouse"
Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
EndSection
Section "InputClass"
Identifier "Ultrathin Touch Mouse"
Option "ButtonMapping" "1 2 3 4 5 6 7 0 0 0 0 0 0"
EndSection
Isso parece funcionar sem erros /var/log/Xorg.0.log
(usando grep EE
) e xinput
confirma o mapeamento de botões, mas não resulta no efeito desejado.
Esta é no entanto conhecido para trabalhar para o T631,.
eventos de teclado
O problema reside, acho, no fato de que esses gestos geram eventos de teclado:
$ sudo evemu-record /dev/input/event4 | grep "E: "
# swipe edge right
E: 0.000000 0004 0004 458976 # EV_MSC / MSC_SCAN 458976
E: 0.000000 0001 001d 0001 # EV_KEY / KEY_LEFTCTRL 1
E: 0.000000 0004 0004 458979 # EV_MSC / MSC_SCAN 458979
E: 0.000000 0001 007d 0001 # EV_KEY / KEY_LEFTMETA 1
E: 0.000000 0004 0004 458795 # EV_MSC / MSC_SCAN 458795
E: 0.000000 0001 000f 0001 # EV_KEY / KEY_TAB 1
E: 0.000000 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 0.002980 0004 0004 458976 # EV_MSC / MSC_SCAN 458976
E: 0.002980 0001 001d 0000 # EV_KEY / KEY_LEFTCTRL 0
E: 0.002980 0004 0004 458979 # EV_MSC / MSC_SCAN 458979
E: 0.002980 0001 007d 0000 # EV_KEY / KEY_LEFTMETA 0
E: 0.002980 0004 0004 458795 # EV_MSC / MSC_SCAN 458795
E: 0.002980 0001 000f 0000 # EV_KEY / KEY_TAB 0
E: 0.002980 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
# swipe edge left
E: 3.306977 0004 0004 458978 # EV_MSC / MSC_SCAN 458978
E: 3.306977 0001 0038 0001 # EV_KEY / KEY_LEFTALT 1
E: 3.306977 0004 0004 458979 # EV_MSC / MSC_SCAN 458979
E: 3.306977 0001 007d 0001 # EV_KEY / KEY_LEFTMETA 1
E: 3.306977 0004 0004 458866 # EV_MSC / MSC_SCAN 458866
E: 3.306977 0001 00c1 0001 # EV_KEY / KEY_F23 1
E: 3.306977 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 3.310979 0004 0004 458978 # EV_MSC / MSC_SCAN 458978
E: 3.310979 0001 0038 0000 # EV_KEY / KEY_LEFTALT 0
E: 3.310979 0004 0004 458979 # EV_MSC / MSC_SCAN 458979
E: 3.310979 0001 007d 0000 # EV_KEY / KEY_LEFTMETA 0
E: 3.310979 0004 0004 458866 # EV_MSC / MSC_SCAN 458866
E: 3.310979 0001 00c1 0000 # EV_KEY / KEY_F23 0
E: 3.310979 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
# two finger double tap
E: 10.225976 0004 0004 458983 # EV_MSC / MSC_SCAN 458983
E: 10.225976 0001 007e 0001 # EV_KEY / KEY_RIGHTMETA 1
E: 10.225976 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 10.229986 0004 0004 458983 # EV_MSC / MSC_SCAN 458983
E: 10.229986 0001 007e 0000 # EV_KEY / KEY_RIGHTMETA 0
E: 10.229986 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
# two finger swipe left
E: 27.934977 0004 0004 589828 # EV_MSC / MSC_SCAN 589828
E: 27.934977 0001 0113 0001 # EV_KEY / BTN_SIDE 1
E: 27.934977 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 27.937983 0004 0004 589828 # EV_MSC / MSC_SCAN 589828
E: 27.937983 0001 0113 0000 # EV_KEY / BTN_SIDE 0
E: 27.937983 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
# two finger swipe right
E: 32.513990 0004 0004 589829 # EV_MSC / MSC_SCAN 589829
E: 32.513990 0001 0114 0001 # EV_KEY / BTN_EXTRA 1
E: 32.513990 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
E: 32.516994 0004 0004 589829 # EV_MSC / MSC_SCAN 589829
E: 32.516994 0001 0114 0000 # EV_KEY / BTN_EXTRA 0
E: 32.516994 0000 0000 0000 # ------------ SYN_REPORT (0) ----------
No que diz respeito ao mapa de teclas , eles se referem a:
$ sudo input-kbd 4 | grep -e KEY_LEFTCTL -e KEY_LEFTMETA -e KEY_TAB -e KEY_LEFTALT -e KEY_F23 -e KEY_RIGHTMETA -e BTN_SIDE -e BTN_EXTRA
0x700e2 = 56 # KEY_LEFTALT
0x700e3 = 125 # KEY_LEFTMETA
0x700e7 = 126 # KEY_RIGHTMETA
0x7002b = 15 # KEY_TAB
0x70072 = 193 # KEY_F23
0x700e2 = 56 # KEY_LEFTALT
0x700e3 = 125 # KEY_LEFTMETA
0x700e7 = 126 # KEY_RIGHTMETA
0x90004 = 275 # BTN_SIDE
0x90005 = 276 # BTN_EXTRA
O toque duplo parece não fazer nada.
Outras referências
Também pode ajudar a apontar uma referência a problemas semelhantes em um bug, com o mouse mencionado acima não estando no gnome-bluetooth
banco de dados pincode. Escusado será dizer que mais comentários sobre o assunto são oficialmente offtopic nesse relatório de bug, mas as referências podem ajudar a adicionar alguma perspectiva sobre a natureza desse problema.
Aqui está a saída do evemu-describe /dev/input/event4
FWIW.
Adaptadores Bluetooth
FWIW Eu usei dois adaptadores USB Bluetooth diferentes:
$ lsusb | grep Bluetooth
Bus 007 Device 010: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
$ lsusb | grep Bluetooth
Bus 007 Device 011: ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0
vmmouse_detect
utilitário.xmodmap
exinput
e mesmoxorg.conf
será útil em seu Kubuntu, mas não no Windows VM. Portanto, no WinVM, você poderá configurar o mouse com os utilitários padrão da Logitech para Windows.Respostas:
Depois de muita dor, consegui criar um mapa-chave que faz algo útil.
Primeiro, algumas notas (ainda não posso comentar) sobre a resposta anterior:
o script fixMouse fornecido pelo backup do Sr. não funciona, porque às vezes a entrada de teclado do mouse aparece com o nome errado no xinput, ou seja, no meu caso, mostra:
por outro lado, você pode usar lsinput de input-utils para encontrar o ID correto:
por algum motivo, ao descarregar o mapa para o mouse, alguns códigos são duplicados (aqueles entre 0x700e0 e 0x700e7), tenha cuidado para encontrá-los e eliminá-los, ou você ficará louco.
a substituição de todos os códigos de chave por KEY_UNKNOWN evita a explosão de caracteres aleatórios, mas torna inúteis as ações especiais de toque. Descobri que você pode remapear alguns dos gestos para combinações úteis. Em particular, o "deslize da esquerda" envia os códigos 0x700e0 + 0x700e3 + 0x7002b, enquanto o "deslize da direita" envia 0x700e3 + 0x700e3 + 0x70072. Mapeei 0x700e3, que é comum a ambos os gestos, para KEY_UNKNOW, para tirá-lo do caminho. Então usei os códigos de chave restantes para criar CTRL + F8 (grade da área de trabalho) e ALT-F2 (corredor), mas é claro que você pode gerar qualquer combinação de duas chaves. Aqui está o meu mapa, tenha cuidado ao copiar / colar para não deixar linhas vazias nem espaços em branco iniciais (eles quebram input-kbd):
Não consegui obter os códigos adequados para os furtos com dois dedos, mas, novamente, não me importo porque esses gestos são impossíveis de executar.
PS No caso de você querer personalizar outros gestos, eis como eu procedi:
Classifiquei as entradas do mapa, limpei as duplicatas e notei que ela compreende 252 símbolos (mais 5 botões).
Defino os dez primeiros símbolos como KEY_A, os dez seguintes como KEY_B e assim por diante até os dois últimos que se tornaram KEY_Z; então carreguei este mapa.
Realizo os gestos em uma janela de texto (ou você pode usar "xbindkeys -mk") e tomo nota das letras produzidas.
No mapa, altero todas as letras NÃO produzidas para KEY_UNKNOWN, as três restantes para KEY_A, KEY_B, KEY_C .. KEY_Z, KEY_1, .., KEY_4, depois carrego este novo MAP.
Repito o gesto, tomo nota das letras / números produzidos: estes são os códigos que podem ser definidos para o que você precisar para fazer uma combinação de teclas específica.
fonte
Você pode tentar usar
input-kbd
oinput-utils
pacote:Usando o índice do dispositivo de entrada (por exemplo, 4 para
/dev/input/event4
, que pode ser encontrado através dolsinput
qual é necessariamente diferente do ID usadoxinput
), você pode reconfigurar o mapa do teclado, alimentando um arquivo com o-f
comutador, por exemploonde o
some-file
assume a forma descancode = keycode|keyname
, onde o seguinte é equivalente:Você pode encontrar o mapa atual com
sudo input-kbd 4
. Desde que você precisa abrir um arquivo/dev
, é necessário usar o superusuário para ler este evento.Observe também que, apesar do nome aparentemente enganador, ele também funciona com ratos.
fonte
awk '/KEY_/ { $3 = 240 } { print }'
.KEY_UNKNOWN
, ou para esse assuntoBTN_EXTRA
?sudo input-events 4
para ver qual botão do mouse é qual. KEY_UNKNOWN (espero) não imprime ou dispara nenhuma ação.name.sh
lá para inverter o nome da chave -> mapeamento de código, para permitir que o input_kbd imprima nomes para os códigos de chave.Para desativar os gestos, você pode alterar o mapeamento de botões com o
evdev
driver para que os últimos 6 "botões" sejam todos desabilitados da seguinte maneira:anexando o seguinte
/usr/share/X11/xorg.conf.d/10-evdev.conf
ou/etc/X11/xorg.conf.d/10-evdev.conf
dependendo do que você possui:reiniciando o
X
servidor comsudo service lightdm restart
xinput --get-button-map "Ultrathin Touch Mouse"
Você pode alterar o valor de
InputDevice Identifier
se desejar, mas é importante manter o valor paraInputDevice Name
eInputClass Identifier
como "Ultrathin Touch Mouse", pois é assim que oxinput
reconhece.Testado com a versão Mac, T631.
Se você quiser um pouco mais de informações
evdev
, este post de Joe Shaw é particularmente esclarecedor sobre como ele se encaixa em toda a pilha de entradas.fonte
X
arquivos de configuração, especialmente os definidos globalmente. Certos caminhos de atualização os substituirão, o que não é o ideal. Além disso, isso não é ideal porque não está claro como remapear as chaves. Não estou dizendo que não é uma solução válida, mas quando se trata de recompensa, a outra resposta pode vencer. ☺ Finalmente, é uma pena que isso não possa ser implementado sem uma reinicialização. Talvez se você pudesse descobrir alguma maneira de lidarevdev
diretamente, isso seria bom, mas eu não encontrei isso.evemu-record
. não funciona :(Eu consegui configurar os gestos "deslize da borda esquerda" e "deslize da borda direita" usando xbindkeys; isso provavelmente pode se aplicar também aos golpes de dois dedos, mas eu não me incomodei com eles, pois acho que eles são difíceis de executar de qualquer maneira.
Este é o meu .xbindkeysrc
Mapeei-os para atalhos úteis do KDE, é claro que você pode fazer qualquer outra coisa. Você precisa executar o xbindkeys no login. Criei um arquivo .desktop, conforme explicado em qualquer tutorial sobre xbindkeys:
HTH
fonte
Fiquei frustrado com isso, porque nunca consegui fazê-lo funcionar, apesar de todas as soluções fornecidas, incluindo as fornecidas por alguém que realmente escreve
X
código de entrada. Dito isso, eu me afastei dele e usei um mouse normal com fio.Ontem encontrei o ultrafino e decidi tentar novamente e ele simplesmente funciona. Isso é verdade, pelo menos no sentido em que a razão para esta pergunta é que esses gestos estavam sendo interpretados de maneiras estranhas e mexendo com meu fluxo de trabalho. Agora, eles parecem não ter efeito real, exceto que o toque na borda esquerda me permite alternar entre as últimas guias usadas no Firefox.
O que é estranho é que os gestos não são realmente desativados. Todos os 13 "botões" são retornados por
xinput --get-button-map "Ultrathin Touch Mouse"
. Tambémgrep Ultrathin /usr/share/X11/xorg.conf.d
não retorna nada. Não háNoSymbol
s relevantes (e nenhumVoidSymbol
s) encontrados comxkbcomp
nemKEY_UNKNOWN
s relevantesinput-kbd
.Por outro lado, tudo parece o mesmo,
evemu-record
exceto pelo fato de os gestos de toque duplo serem consideradosBTN_LEFT
eventos simples .Dito isto, algo mudou em relação a isso, mas não sei ao certo o que.
Além disso, não testei remapear as coisas, mas isso não estava realmente no escopo da pergunta original.
fonte
Li todas as respostas e escrevi um script em torno do input-kbd (parte do input-utils) para corrigir automaticamente esse problema.
Você deve executar o fixMouse neste repositório uma vez a cada login. Será:
Os recursos padrão do mouse (botão esquerdo; rolagem; etc.) ainda funcionam bem. Apenas as estranhas teclas do teclado são paradas.
Ele sobrevive à suspensão, suspensão do bluetooth, mouse on-off, etc.
Funciona para mim.
fonte