Solução usando udev
Como o HAL está obsoleto e udev
agora é usado, essa abordagem é preferida à minha outra resposta (embora eu ache que a solução usando o HAL é mais simples).
No entanto, para muitas teclas de função, você pode simplesmente usar Configurações do Sistema> Teclado> Atalhos para vincular um script, tente isso primeiro! Isso economiza muitos problemas. Por exemplo, as teclas de brilho não funcionam (não faço idéia do por que não); portanto, se você quiser saber como alterar o comportamento das teclas de brilho, continue lendo.
NOTA : Se você estiver executando um notebook Samsung, poderá corrigir todas as teclas de função (dependendo do modelo) instalando o samsung-tools
pacote em http://www.voria.org/forum/
Este tutorial pressupõe que você saiba como usar um terminal e usa o vim
editor. Se você não souber vim
, substitua-o nos comandos por gedit
ou nano
.
Determinando seu teclado
/lib/udev/findkeyboards
deve imprimir os teclados 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ê deseja remapear seu teclado USB, inspecione-os executando
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
onde você deve substituir o 9 na instruçã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 meu teclado é manuseado por meio do meu Logitech USB Receiver (entrada / evento7 acabou por ser o mouse Logitech G9 que possui alguns botões programáveis).
Teclado do laptop :
se você deseja remapear o teclado do laptop, lembre-se do número AT keyboard
4 no meu caso. Obtenha também as informações dmi do seu laptop:
cat /sys/class/dmi/id/sys_vendor
que é no meu caso
SAMSUNG ELECTRONICS CO., LTD.
e
cat /sys/class/dmi/id/product_name
que é no meu caso
305U1A
Determine seu mapeamento atual de suas teclas de função
Agora podemos determinar nosso mapeamento de teclas atual ouvindo o teclado (insira o número correto)
sudo /lib/udev/keymap -i input/event4
você pode sair desse comando usando Esco teclado ou Ctrl+ cem outro teclado.
Se sua tela começar a rolar para baixo com muita força, pressione Esce Ctrl+ calgumas 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ções, elas deverão entrar ~/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 fornecer uma lista como (este é meu Fn+ F1a 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 deseja alterar o comportamento.
Alterando os códigos de tecla dos códigos de digitalização
Se você ver o código da chave claramente não cobre o que você espera a chave para que você pode ter um olhar em /usr/include/linux/input.h
sob Teclas 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 das teclas estão no formato KEY_KEYCODE
e você deve anotar a peça KEY_
em minúsculas. Às vezes, alterar isso é suficiente para resolver o problema.
As teclas de brilho, no entanto, geralmente têm o código de tecla correto associado a elas, e é isso que não permite que elas sejam remapeadas. Então, precisamos alterá-los para outros códigos-chave. Usaremos prog1
e prog2
para este exemplo, porque eles não estão em uso no meu computador; no entanto, você também pode usá-lo f13
através f24
ou f20
através de f24
um teclado Apple que possua teclas F1através F19.
Crie um mapa de chaves customizado :
Crie um arquivo de mapa de chaves no diretório /lib/udev/keymaps
com um nome adequado. Consulte a saída de ls /lib/udev/keymaps
para ver nomes adequados. Eu vou com custom-brightness
o propósito desta pergunta.
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 de verificação que deseja que eles tenham. Minha custom-brightness
aparência é assim:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
Crie um arquivo de liberação de chave personalizado. Somente se você estiver alterando o teclado do laptop :
Às vezes, o evento de liberação da tecla não é enviado corretamente, causando uma interrupção no computador. Para evitar isso, também escreveremos um arquivo de liberação 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
Certifique-se de que os novos mapeamentos sejam carregados nos arquivos de regras
Agora, precisamos garantir que seus mapeamentos sejam carregados. Podemos fazer isso editando /lib/udev/rules.d/95-keymap.rules
, por isso é inteligente fazer um backup
Novamente, temos duas opções:
Teclados USB :
como você possui um teclado USB, você deve adicionar sua entrada LABEL="keyboard_usbcheck"
e ela deve passar das outras entradas do fabricante do teclado. Isso ocorre 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, é substituído.
Adicione a seguinte regra, onde você deve mudar o ID_VENDOR_ID
e ID_MODEL_ID
e o nome do seu mapa de teclado appropiately
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
Teclado do laptop :
se você /lib/udev/findkeyboards
informou que o teclado do laptop AT keyboard
deve estar abaixo da regra LABEL="keyboard_vendorcheck"
, caso contrário, coloque-o abaixo LABEL="keyboard_modulecheck"
. Mais uma vez, coloque-o nas outras entradas do fabricante do seu laptop. Adicione a regra a seguir ( SAMSUNG ELECTRONICS CO., LTD.
é um pouco longo, usei um curinga)
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
Agora também adicione uma regra para /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 reportar as teclas de brilho
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
Remapear as chaves nas Configurações do sistema
Se a última etapa relatou os códigos de chave corretos, as teclas começam a funcionar automaticamente (caso elas tenham os códigos de chave incorretos).
Para o brilho, você ainda precisa vincular as teclas a um script que agora é possível usando Configurações do sistema> Teclado> Atalhos .
Aproveitar
Notas :
Se suas chaves tinham o código de chave errado e foram 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 aos seus resultados os endereços de email mencionados lá, as alterações poderão ser incluídas na próxima versão. Muitos usuários serão beneficiados!
Muito obrigado a este post útil de Vaidas Jablonskis.