Desativar numlock, preservando as teclas de atalho do mouse

5

Estou tendo problemas para desabilitar a tecla Numlock (fazer a chave não fazer nada, para que os números numpad sempre funcionem) enquanto, ao mesmo tempo, mapear os botões extras do mouse (ao lado do mouse) para atalhos para executar ações.

Eu uso o Arch Linux e o Xfce e o Gerenciador de Login é o LightDM.

Eu uso este código, coloco em um arquivo bash, para desabilitar meu numlock na inicialização:

xmodmap -e "keycode 77 = NoSymbol"

E eu tenho um arquivo .xbindkeysrc no meu diretório pessoal, com:

"xdotool key ctrl+w"
 b:8 + Release

"xdotool key ctrl+d"
 b:9 + Release

(fechar guia & marcador)

Se eu ativar o código "desabilitar Numlock" na inicialização, o arquivo .xbindkeysrc não terá mais efeito. Isto parece estar relacionado ao comando numlockx on que está no mesmo arquivo bash que o comando xmodmap (antes dele). Como posso resolver isso?

Adicionando

"NoCommand"
 c:77

para .xbindkeysrc também não tem o efeito desejado. Alterar c para m porque Numlock, em teoria, é uma tecla modificadora, não ajuda. Usando Num_Lock em vez de c: 77 também não funciona.

    
por Smile4ever 01.11.2014 / 09:06

3 respostas

4

Vamos começar com algumas explicações sobre o que está acontecendo e por que sua ideia não funciona. Primeiro, dê uma olhada no mapa de modificadores:

$ xmodmap
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Como você pode ver, Num_Lock é mod2 aqui. Quando está ativo, todos os eventos keypress vêm com mod2 bit on.

Se você desativá-lo assim:

$ xmodmap -e "keycode 77 = NoSymbol"
$ xmodmap 
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        BadKey (0x4d)
mod3      
mod4        Super_L (0x85),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Observe que mod2 agora está associado a BadKey e isso parece confundir muito o Xorg. Na verdade, a maioria das mudanças no mapa de modificadores parece quebrar o X11 para mim.

Neste momento, não consigo encontrar uma boa solução que envolva jogar com o mapa de modificadores. Mas eu tenho outra idéia: você pode mapear todas as teclas do teclado para funcionar da mesma forma com o num lock ligado e desligado. Isso é:

xmodmap -e "keysym KP_Up = KP_8"
xmodmap -e "keysym KP_Left = KP_4"
# ...

Depois de fazer isso, o estado do num lock não importará mais.

Você pode até remover o modificador depois para desligar o LED:

xmodmap -e "remove mod2 = Num_Lock"
    
por 01.11.2014 / 13:47
4

Baseado na resposta de @ Michał Górny. Aqui estão os comandos para desativar num-lock, usar números de qualquer maneira e mapear numlock para F13 (pode ser útil para ligar a uma função especial em seu gerenciador de janelas).

# NumLock is F13
xmodmap -e "remove mod2 = Num_Lock" \
        -e "keycode 77 = F13"

# Use numbers even when numlock is off
xmodmap -e "keysym KP_End = KP_1" \
        -e "keysym KP_Down = KP_2" \
        -e "keysym KP_Next = KP_3" \
        -e "keysym KP_Left = KP_4" \
        -e "keysym KP_Begin = KP_5" \
        -e "keysym KP_Right = KP_6" \
        -e "keysym KP_Home = KP_7" \
        -e "keysym KP_Up = KP_8" \
        -e "keysym KP_Prior = KP_9" \
        -e "keysym KP_Insert = KP_0" \
        -e "keysym KP_Delete = KP_Decimal"

É bom não ter a luz numlock o tempo todo:)

    
por 24.05.2015 / 07:00
0
  • Configurações do teclado do Xfce: desmarque o estado de numlock da restauração (isso apaga a luz quando já está ligado)
  • Configurações de inicialização do Xfce: adicione uma menção ao script: sh /home/$USER/numlockalwayson.sh

Script:

#timeout, otherwise it will not work upon boot/login (make two variants of the script. Use sleep 2 for the login variant)
sleep 20
xmodmap -e "keysym KP_Up = KP_8"
xmodmap -e "keysym KP_Left = KP_4"
xmodmap -e "keysym KP_Right = KP_6"
xmodmap -e "keysym KP_Down = KP_2"
#
xmodmap -e "keysym KP_Begin = KP_5"
#
xmodmap -e "keysym KP_Home = KP_7"
xmodmap -e "keysym KP_Next = KP_3"
xmodmap -e "keysym KP_Prior = KP_9"
xmodmap -e "keysym KP_End = KP_1"
#
xmodmap -e "keysym KP_Insert = KP_0"
xmodmap -e "keysym KP_Delete = KP_Decimal"
#
numlockx on

Esta luz fica desligada quando você pressiona Num_Lock. Essa é a única falha desta solução e é uma melhoria enorme do que eu tinha. Esta solução não quebra outras teclas modificadoras como Alt.

Muito obrigado a Michał Górny por esta solução.

Bônus

Se você efetuar logoff e efetuar login novamente, o script não funcionará mais (será necessário reinicializar para que funcione novamente). Para corrigir isso, edite /etc/lightdm/lightdm.conf (o local onde ele está localizado no Manjaro Linux) e adicione a variante de login do script:

session-setup-script=sh /home/$USER/numlockalwayson-login.sh

Além disso, o LightDM desliga o num lock se você fizer logoff. Para corrigir isso, adicione ao mesmo arquivo:

greeter-setup-script=/usr/bin/numlockx on

Não se esqueça de salvar.

Você precisa da inicialização do Xfce e dessa configuração para que ela funcione sempre.

    
por 01.11.2014 / 17:15