como fazer com que o controle deslizante de zoom do Microsoft Natural Ergonomic Keyboard 4000 (e outros botões) funcione?

21

Eu uso o Microsoft Natural Ergonomic Keyboard 4000 no Ubuntu 10.10. As teclas multimídia (Volume, Reproduzir / Pausar) funcionam, o botão Correio e Calculadora também.

Agora, eu adoraria usar o controle deslizante de zoom, se possível, eu gostaria de usar a rolagem de página com isso. Existe alguma maneira de habilitar isso?

Martin Ueding
fonte
2
Veja askubuntu.com/questions/471802/… . As respostas anteriores aqui podem ser obsoletas.
mate

Respostas:

18

Crie o arquivo /etc/udev/rules.d/98-ms-ergo.rulescom o seguinte conteúdo:

ACTION=="remove", GOTO="keyboard_end"
KERNEL!="event*", GOTO="keyboard_end"
ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end"
SUBSYSTEMS!="usb", GOTO="keyboard_end"

SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"

ENV{ID_VENDOR}=="Microsoft", ENV{ID_MODEL_ID}=="00db", RUN+="keymap $name 0xc022d pageup 0xc022e pagedown"

GOTO="keyboard_end"

Isso mapeará a tecla de zoom para aumentar / diminuir a página sem alterar os arquivos instalados /lib/udev.

Depois de adicionado, basta desconectar e reconectar o teclado para que ele comece a funcionar.

Kees Cook
fonte
Isso funcionou para mim perfeitamente usando o Fedora 19.
Rubens Mariuzzo
Para o Microsoft Ergonomic 7000, o modelo parece ser 071d (obtido por lsusb) e não 00db - portanto, se alguém tentar isso pelo 7000, provavelmente substituirá 00db por 071d no arquivo acima. De qualquer forma, no meu caso (Ubuntu 14.04), isso não funciona, talvez esteja relacionado ao fato de evtestmostrar que o controle deslizante de zoom não aciona nenhum evento, ao contrário da maioria das outras teclas do teclado Ergonomic 7000. Não tenho certeza que, como o botão Web / Home não mostra qualquer saída em evtestqualquer um - embora Ubuntu faz buscá-lo.
mate
1
Também não consigo fazer o 4000 funcionar em 14.04. Não está vendo eventos em xev.
Michael
Tentei isso em 14.10 e não funcionou.
Rubens Mariuzzo
@ Cocoabean xevtambém não funciona para mim. O que faz é evtest /dev/input/event3. Se event3não houver nenhuma reação a essa chave, teste com outros eventos ( event[0..9]).
Nicolás
9

No Xubuntu 13.10 (talvez também no Ubuntu 13.10), o mesmo pode ser feito da seguinte maneira:

Edite os mapeamentos principais em /lib/udev/hwdb.d/60-keyboard.hwdb:

###########################################################
# Microsoft
###########################################################

# Microsoft Natural Ergonomic Keyboard 4000
keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_c022d=pageup
 KEYBOARD_KEY_c022e=pagedown

Corre sudo udevadm hwdb --update

Reinicie.

Konstantin K.
fonte
1
Trabalhou em 14,04 por mim
Amir Uval
Meu 60-keyboard.hwdb tinha uma entrada existente para MNEK4K, com o teclado: usb: b0003v045Ep00DB *. Alterar as ações não funcionou. Adicionar uma nova entrada com essas ações funcionou.
Alrekr
Funcionou como um encanto em 16.04. Usei "up" e "down" (em vez de resp. "Pageup" e "pagedown") para obter uma rolagem mais suave ao navegar nas páginas da web. Muito obrigado!
5286 Pierre
Você pode mapear katakanae katakanahiragana(ou qualquer outro código de chave não utilizado de hal.freedesktop.org/quirk/quirk-keymap-list.txt ) em vez de usar o alias das chaves existentes. Dessa forma, você pode reconhecer e usar as teclas em combinação com modificadores para alternar volume, idioma, tamanho, etc. (configure seu gerenciador de janelas para aproveitar duas novas super-teclas).
dmitry_romanov
4

Para configurar o teclado ergonômico da Microsoft 4000 , precisamos criar um arquivo de configuração que contenha a declaração do teclado e os registros para o mapeamento das teclas.

Para fazer isso, existem três tipos de informações que precisamos determinar:

  • Tipo de teclado
  • A tecla scancodeque é a tecla real no teclado
  • A tecla namepara atribuir a funcionalidade desejada à tecla selecionada

Primeiro encontre o tipo de teclado:

No terminal, execute o seguinte comando:

lsusb 

a saída determina o tipo de teclado:

...
Bus 004 Device 022: ID 045e:00db Microsoft Corp. Natural Ergonomic Keyboard 4000 V1.0
...    

Aparece depois ID. Nesse caso, é045e:00db

Segundo, encontre o scancode e o nome da chave.

Para determiná-los, usamos o evtestprograma que registra as informações do evento de um dispositivo específico no terminal:

evtest

Se você não possui o programa, instale-o executando o seguinte comando:

sudo apt-get install evtest

Ao executar o evtestprograma, obtemos a seguinte saída:

No device specified, trying to scan all of /dev/input/event* Available devices: 
/dev/input/event0:    Power Button     
/dev/input/event1:    Power Button     
/dev/input/event2:    PixArt USB Optical Mouse   
/dev/input/event3:    Microsoft Natural® Ergonomic Keyboard 4000   
/dev/input/event4:    Microsoft Natural® Ergonomic Keyboard 4000   
/dev/input/event5:    HDA Intel Front Headphone     
/dev/input/event6:    HDA Intel Line Out     
/dev/input/event7:    HDA Intel Line   
/dev/input/event8:    HDA Intel Rear Mic     
/dev/input/event9:    HDA Intel Front Mic     
/dev/input/event10:   HDA ATI HDMI HDMI/DP,pcm=3
Select the device event number [0-10]:

A saída é praticamente auto-explicativa, insira o número apropriado para o teclado, que aqui é o número, 3e pressione enter:

Fazer isso, produzirá muitas informações no terminal e termina nas seguintes linhas:

... 

Testing ... (interrupt to exit)
Event: time 1472203902.240594, type 17 (EV_LED), code 0 (LED_NUML), value 0
Event: time 1472203902.240594, -------------- SYN_REPORT ------------
Event: time 1472203902.281456, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70058
Event: time 1472203902.281456, type 1 (EV_KEY), code 96 (KEY_KPENTER), value 0
Event: time 1472203902.281456, -------------- SYN_REPORT ------------

Agora, com cada pressionamento de tecla no teclado, ele despeja as informações da tecla. Por exemplo, a tecla Barra ao lado de Deslocamento à direita mostra:

Event: time 1472205062.294078, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70038
Event: time 1472205062.294078, type 1 (EV_KEY), code 12 (KEY_SLASH), value 0
Event: time 1472205062.294078, -------------- SYN_REPORT ------------

A primeira linha do log contém as informações sobre a tecla real no teclado, como a scancodeque vem depois do valor. Nesse caso, é 70038

A segunda linha contém as informações de funcionalidade atribuídas, como o nome da chave. Nesse caso, é o SLASH . Examine as outras chaves para encontrar os nomes apropriados.

Então, em poucas palavras:

  • Nosso tipo de teclado é: 045e: 00db
  • O scancode da tecla Slash é: 70038
  • O nome da chave para atribuir é SLASH

Após coletar as informações necessárias, criamos o arquivo de configuração:

sudoedit /etc/udev/hwdb.d/61-keyboard-local.hwdb

Pressione ipara ativar o modo Inserir e digite o seguinte:

keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_70038=minus      

Salve e saia pressionando escapee digitando :wqe pressione enter.

Em seguida, execute os dois comandos a seguir para que a configuração entre em vigor:

sudo udevadm hwdb --update
sudo udevadm control --reload

Finalmente, desconecte o teclado e conecte-o novamente.

Algumas notas sobre o arquivo de configuração:

  • O formato do arquivo deve ser exatamente como mostrado, o espaço antes do mapeamento de registros é crítico.
  • Em vez de sudoeditusar qualquer outro editor de texto, lembre-se de seguir o formato exato do arquivo, conforme explicado acima.
  • Existem dois caracteres adicionados ao tipo de teclado: ve prepresentam fornecedor e produto. Eles também são importantes.
  • O tipo de teclado está escrito em maiúsculas no arquivo de configuração. Nosso tipo de teclado era 045e: 00db, mas na configuração inserimos v045Ep00DB *
  • O scancode da chave vem logo após KEYBOARD_KEY_
  • O nome da chave aparece em minúsculas no arquivo de configuração
  • Você pode personalizar praticamente todas as teclas do teclado seguindo este tutorial.
varDumper
fonte
3

O problema é que o driver evdev ignora os códigos de chave> 255 .
A solução, graças a Marco Chiappero :

1) você precisa definir todos os remapeamentos necessários (na forma de 
lista "scancode keycode") e coloque-os em um arquivo em "/ lib / udev / keymaps /" 
(por exemplo, criei o logitech-lx710-cordless lá). Você pode encontrar o
scancodes usando evtest ("sudo evtest / dev / input / eventX", onde X é seu 
dispositivo de teclado. Tenha cuidado, às vezes essas chaves extras são expostas através de
um dispositivo diferente ou a interface do mouse: por exemplo. evento3 -> kbd, evento4 ->
mouse e teclas extras). Aqui estão alguns exemplos de saída:

Evento: time 1294153475.909379, tipo 4 (Misc), código 4 (ScanCode), valor c1028
"c1028" é o valor do scancode que você colocará em seu arquivo de mapa de teclas e, em seguida, 
escolha um número em input.h, conforme descrito anteriormente e converta-o em 
hexadecimal. Em seguida, escreva o par de remapeamento em seu arquivo, talvez com uma descrição
comentar, assim:

0xC1028 0x9a # botão de rotação

Repita para cada chave> 255.

2) você precisa dizer ao udev para aplicar esse arquivo de remapeamento sempre que encontrar 
teclado, edite o arquivo "/lib/udev/rules.d/95-keymap.rules" adicionando 
a regra do udev que corresponde ao seu HW. Por favor, não me peça para definir uma regra para
vocês. 
NOTA: você pode aplicar imediatamente seu arquivo de mapa de teclas digitando-se 
"sudo / lib / udev / keymap / dev / input / eventX / lib / udev / keymaps / $ YOUR_FILE" e 
verifique com o evtest novamente.

Agora, você pode usar o editor de atalhos do Gnome para ver se as teclas estão agora 
utilizável dentro do X e crie novos atalhos. No entanto, pode acontecer que não
keysym é atribuído a esse código de chave (então você verá 0xXY em vez de XF86Foo). 
Você pode ver os mapeamentos atuais através do xmodmap -pke, salve a saída em um 
arquivo e edite-o, se necessário (uma lista completa de códigos de chave está disponível em
"/ usr / lib / X11 / XKeysymDB").
Depois de adicionar as academias de chaves àquelas que remapeou, você pode salvar este arquivo
como ~ / .Xmodmap (ou como / etc / X11 / Xmodmap se você deseja aplicar a todos os usuários).
desgua
fonte
Eu descobri que os botões que eu quero são c022d e c022e, mas não consigo encontrar o input.h.
Martin Ueding
Como eu entendo (mas eu não posso teste porque eu não tenho esse hardware) que você realmente não precisa input.h, você só precisa editar esse arquivo: /lib/udev/rules.d/95-keymap.rules. (Pode estar aqui na barra de ativação, você pode encontrar pessoas com o mesmo hardware, portanto, mais capazes de ajudar bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/313514 ). Você editou o arquivo que mencionei acima?
desgua
1
Isso é muito técnico e uma resposta desorganizada para a maioria das pessoas. Algumas lacunas sérias: nenhuma ajuda para determinar o / dev / input / eventX apropriado, etapas pouco claras combinadas com informações contextuais e solicitações para não solicitar instruções para a criação de mapas de teclas.
Alain O'Dea
1
O evtest nem é instalado por padrão, tornando isso ainda pior.
Alain O'Dea
Por tentativa e erro, descobri que meu teclado é / dev / input / event3 e o evtest não captura nenhum evento no controle deslizante de zoom.
Alain O'Dea
0

Na minha máquina, as teclas extras (HomePage, Search, Calc, etc.) e a entrada de zoom foram enviadas pelo / dev / input / event5, enquanto as chaves comuns foram enviadas pelo / dev / input / event4. O valor da chave de zoom concorda com os queueoverflow.

niclas
fonte