Solução usando o udev
Como o HAL está obsoleto e o udev
agora é usado, essa abordagem é preferível à minha outra resposta (embora eu acho que a solução usando HAL é mais simples).
No entanto, para muitas teclas de função, você pode simplesmente usar Configurações do sistema & gt; Teclado & gt; Atalhos para ligar um script, tente primeiro! Isso evita muitos problemas.
Por exemplo, as teclas de brilho não funcionam (não sei por que não), portanto, se você quiser saber como alterar o comportamento de, por exemplo, as teclas de brilho, continue lendo.
OBSERVAÇÃO : Se você estiver executando um bloco de anotações Samsung, poderá corrigir todas as chaves de função (dependendo do modelo) instalando o pacote samsung-tools
de link
Este tutorial pressupõe que você sabe como usar um terminal e usa o editor vim
. Se você não souber vim
, substitua-o nos comandos por gedit
ou nano
.
Determinando o seu teclado
/lib/udev/findkeyboards
deve imprimir os teclados que estão conectados ao computador, no meu caso
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
Agora existem duas opções:
-
teclados USB :
Se você quiser remapear o teclado USB, inspecione-os executando
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
onde você tem que substituir o 9 na declaração awk pelo número correto. A saída deve ser semelhante a
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
que indica corretamente que o meu teclado é manipulado por meio do meu receptor USB da Logitech (a entrada / evento7 acabou sendo meu mouse Logitech G9, que possui alguns botões programáveis).
-
Teclado para portátil :
Se você quiser remapear o teclado do laptop, lembre-se do número do AT keyboard
, que é 4 no meu caso. Também obtenha as informações de dmi para o seu laptop:
cat /sys/class/dmi/id/sys_vendor
que está no meu caso
SAMSUNG ELECTRONICS CO., LTD.
e
cat /sys/class/dmi/id/product_name
que está no meu caso
305U1A
Determine seu mapeamento atual das teclas de função
Agora podemos determinar nosso mapeamento de teclado atual ouvindo o teclado (inserir número correto)
sudo /lib/udev/keymap -i input/event4
você pode sair deste comando usando Esc no teclado, ou Ctrl + c em outro teclado.
Se sua tela começar a rolar muito, pressione Esc e Ctrl + c algumas vezes e tente novamente com
sudo /lib/udev/keymap -i input/event4 2> /dev/null
ou, se você ainda tiver o problema de rolagem
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
No último caso, você ainda terá a rolagem, mas se pressionar as teclas de função, elas deverão entrar em ~/keymap.log
, onde você poderá lê-las mais tarde.
Agora podemos verificar o mapeamento atual de suas teclas de função pressionando-as, o que deve lhe dar uma lista como (esta é minha Fn + F1 a Fn + F12 ):
scan code: 0xCE key code: kpplusminus
scan code: 0x89 key code: brightnessdown
scan code: 0x88 key code: brightnessup
scan code: 0x82 key code: switchvideomode
scan code: 0xF9 key code: f23
scan code: 0xA0 key code: mute
scan code: 0xAE key code: volumedown
scan code: 0xB0 key code: volumeup
scan code: 0x43 key code: f9
scan code: 0x44 key code: f10
scan code: 0xB3 key code: prog3
scan code: 0x86 key code: wlan
Agora, anote os códigos de verificação para os quais você deseja que o comportamento mude.
Alterando os códigos de chave dos códigos de verificação
Se você ver claramente o código-chave, não cobre o que você espera que a chave faça. Dê uma olhada em /usr/include/linux/input.h
em Chaves e botões para ver se há um código-chave que melhor corresponde ao que você realmente quer que aconteça. Os códigos de chave estão no formato KEY_KEYCODE
e você precisa anotar a parte depois de KEY_
em minúsculas. Às vezes, mudar isso é suficiente para resolver o problema.
No entanto, as chaves de brilho têm o código-chave correto associado a elas, e é isso que não permite que sejam remapeadas. Então, precisamos alterá-los para outros códigos de teclas. Usaremos prog1
e prog2
para este exemplo porque eles não estão em uso no meu computador, mas você também pode usar f13
a f24
ou f20
a f24
se tiver uma Apple Teclado que tem F1 através das teclas F19 .
-
Crie um mapa de teclado personalizado :
Crie um arquivo de mapa de chaves no diretório /lib/udev/keymaps
com um nome adequado, dê uma olhada na saída de ls /lib/udev/keymaps
para ver os nomes adequados. Eu vou com custom-brightness
para o propósito desta questão.
sudo vim /lib/udev/keymaps/custom-brightness
e insira os códigos de verificação das teclas que você deseja alterar, seguidos pelos códigos que você deseja que eles tenham. Meu custom-brightness
é assim:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
-
Crie um arquivo de lançamento de chave personalizado. Somente se você estiver mudando o teclado do seu laptop :
Às vezes, o evento de lançamento da chave não é enviado corretamente, fazendo com que o computador seja interrompido. Para evitar isso, também escreveremos um arquivo de lançamento de chave personalizado
sudo vim /lib/udev/keymaps/force-release/custom-brightness
esse arquivo deve conter os mesmos códigos de verificação, o meu parece
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
Verifique se os novos mapeamentos estão carregados nos arquivos de regras
Agora precisamos garantir que seus mapeamentos sejam carregados.Podemos fazer isso editando /lib/udev/rules.d/95-keymap.rules
, então é inteligente fazer um backup
Mais uma vez, temos duas opções:
-
teclados USB :
Como você tem um teclado USB, adicione sua entrada em LABEL="keyboard_usbcheck"
e ela deve estar além das outras entradas do fabricante do seu teclado. Isso é porque meu teclado com
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
já é correspondido por uma das regras e, caso contrário, é sobrescrito.
Adicione a regra a seguir, na qual você deve alterar o ID_VENDOR_ID
e o ID_MODEL_ID
e o nome do seu mapa de teclado de maneira apropriada
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
-
Teclado para portátil :
Se /lib/udev/findkeyboards
informou o teclado do seu laptop como AT keyboard
, sua regra deve estar abaixo de LABEL="keyboard_vendorcheck"
, caso contrário, coloque-o em LABEL="keyboard_modulecheck"
. Novamente, coloque-o sob as outras entradas para o seu fabricante de laptop. Adicione a regra a seguir ( SAMSUNG ELECTRONICS CO., LTD.
é pouco, então usei um curinga))
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
Agora também adicione uma regra a /lib/udev/rules.d/95-keyboard-force-release.rules
depois de fazer o backup
sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
Novamente sob as outras entradas do seu fabricante, adicione
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
Verifique se o udev carrega as novas regras
Para carregar as novas regras, execute
sudo adevadm trigger
NOTA: udevadm control --reload-rules
(ainda em instruções em muitos sites) não funciona.
Agora verifique se as regras foram aplicadas com sucesso por
sudo /lib/udev/keymap -i input/event4
que agora deve informar as chaves de brilho
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
Remapear as chaves em Configurações do sistema
Se a última etapa relatou os códigos de chave corretos, as chaves começam a funcionar automaticamente (no caso de terem os códigos de chave incorretos).
Para o brilho, você ainda precisa vincular as chaves a um script que agora é possível usando Configurações do sistema & gt; Teclado & gt; Atalhos .
Aproveite
Notas :
-
Se suas chaves tiverem o código de chave incorreto e forem corrigidas por essa abordagem, siga as instruções em /usr/share/doc/udev/README.keymap.txt.gz
(você pode abrir isso sem extrair usando zless
) e envie seus resultados com os endereços de e-mail mencionados , então as alterações podem ser incluídas na próxima versão. Muitos usuários se beneficiarão!
-
Muito obrigado a este post útil de Vaidas Jablonskis.