Отключить numlock, сохраняя привязки клавиш мыши

1776
Smile4ever

У меня возникают проблемы с отключением клавиши Numlock (заставьте ключ ничего не делать, чтобы номера чисел всегда работали), в то же время сопоставляя дополнительные кнопки мыши (на стороне моей мыши) с ярлыками для выполнения пользовательских действий.

Я использую Arch Linux и Xfce, а Менеджер входа - LightDM.

Я использую этот код, помещенный в файл bash, чтобы отключить мой numlock при запуске:

xmodmap -e "keycode 77 = NoSymbol" 

И у меня есть файл .xbindkeysrc в моем домашнем каталоге, с:

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

(Закрыть вкладку и закладку)

Если я включаю код «отключить Numlock» при запуске, файл .xbindkeysrc больше не действует. Похоже, это связано с командой, numlockx onкоторая находится в том же файле bash, что и команда xmodmap (перед ней). Как я могу решить это?

Добавление

"NoCommand" c:77 

к .xbindkeysrc тоже не дает желаемого эффекта. Изменение c на m, потому что Numlock в теории является ключом-модификатором, не помогает. Использование Num_Lock вместо c: 77 также не работает.

5

3 ответа на вопрос

4
Michał Górny

Let's start with some explanation of what is happening and why your idea doesn't work. First, take a look at the modifier map:

$ 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) 

As you can see, Num_Lock is mod2 here. When it is on, all keypress events come with mod2 bit on.

If you disable it like this:

$ 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) 

Note that mod2 is now associated with BadKey, and this seems to confuse Xorg a lot. In fact, most of modifier map changes seem to break X11 for me.


Right now, I can't find a good solution that involves playing with modifier map. But I have another idea: you can map all keypad keys to work the same with num lock both on and off. That is:

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

etc. Once you do that, the state of num lock will no longer matter.

You can even remove the modifier afterwards to turn the LED switching off:

xmodmap -e "remove mod2 = Num_Lock" 
Если я удалю клавишу-модификатор numlock, по крайней мере мои ключи alt и altgr сломаются. Я думаю, что я должен жить с светом Numlock. Большое спасибо, это работает. Я выложу то, что я использую сейчас. Smile4ever 9 лет назад 0
4
ideasman42

Based on @Michał Górny's answer. Here are the commands to disable num-lock, use numbers anyway, and map numlock to F13 (may be handy to bind to a special function in your window manager).

# 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" 

Its nice not to have the numlock light on all the time :)

Работает красиво, спасибо. Как я могу автоматизировать это при запуске? Просто добавление скрипта в мой запуск не работает. Для чего я использую systemd. Smile4ever 8 лет назад 0
Обновление: он работает с sleep 7 и numlockx над вашим скриптом. Тем не менее, при нажатии numlock светодиодный индикатор снова гаснет :( Это только в том случае, когда я использую его в качестве сценария запуска. Smile4ever 8 лет назад 0
Удаление модификатора как-то ломает Alt + Tab. Могу ли я поместить эти команды в .Xmodmap? Smile4ever 8 лет назад 0
@ Smile4ever, я поместил это в свой файл `.xinitrc`, но, вероятно, он тоже мог бы войти в` ~ / .Xmodmap`. Странно, у меня все еще работает Alt + Tab. ideasman42 8 лет назад 1
@ Smile4ever. * "при нажатии на numlock светодиодный индикатор снова гаснет" *, у меня тоже была эта проблема, но `" remove mod2 = Num_Lock "` исправил это для меня. ideasman42 8 лет назад 0
Переназначение клавиши num lock или удаление функции модификатора клавиш ломает мои сочетания клавиш. Поэтому вместо этого я буду использовать только нижнюю часть решения. Я постараюсь исправить свет numlock, чтобы он всегда был включен другим решением. :) Smile4ever 8 лет назад 0
Хорошо, я нашел решение переназначить мою клавишу Numlock, а не ломать мои горячие клавиши :) Я поставил xmodmap -e "keycode 77 = F13 Num_Lock F13" после вашей последней строки, и это, кажется, работает :) Smile4ever 8 лет назад 0
0
Smile4ever
  • Xfce keyboard settings: uncheck restore numlock state (this turns the light off when it's already on)
  • Xfce startup settings: add a mention to the 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 

This light gets switched off when you press Num_Lock. That's the only shortcoming of this solution, and is a huge improvement of what I had. This solution does not break other modifier keys like Alt.

Great thanks to Michał Górny for this solution.

Bonus

If you log off and log in again, the script no longer works (you have to reboot to make it work again). To fix that, edit /etc/lightdm/lightdm.conf (the location where it's located in Manjaro Linux) and add the login variant of the script:

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

Also, LightDM switches the num lock off if you log off. To correct that, add to the same file:

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

Don't forget to save.

You need both Xfce startup and this configuration to make it work always.

Похожие вопросы