5

У меня возникают проблемы с отключением клавиши 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 также не работает.

3 ответа3

4

Основано на ответе @ Michał Górny. Вот команды для отключения num-lock, использования номеров в любом случае и сопоставления numlock с F13 (может быть удобно привязать к специальной функции в вашем оконном менеджере).

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

Приятно, что световой индикатор не горит постоянно :)

4

Давайте начнем с некоторого объяснения того, что происходит и почему ваша идея не работает. Сначала взглянем на карту модификатора:

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

Как вы можете видеть, Num_Lock здесь mod2 Когда он включен, все события нажатия клавиш приходят с включенным битом mod2 .

Если вы отключите это так:

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

Обратите внимание, что mod2 теперь ассоциируется с BadKey , и это, похоже, сильно смущает Xorg. Фактически, большинство изменений карты модификаторов, кажется, ломают X11 для меня.


Сейчас я не могу найти хорошее решение, которое включает в себя игру с картой-модификатором. Но у меня есть еще одна идея: вы можете сопоставить все клавиши клавиатуры, чтобы они работали одинаково при включенной и выключенной функции num lock. То есть:

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

и т. д. Как только вы это сделаете, состояние блокировки num больше не будет иметь значения.

Вы даже можете впоследствии удалить модификатор, чтобы выключить светодиод:

xmodmap -e "remove mod2 = Num_Lock"
0
  • Настройки клавиатуры Xfce: снимите флажок восстановить состояние numlock (это выключит свет, когда он уже включен)
  • Настройки запуска Xfce: добавьте упоминание в скрипт: sh /home/$USER/numlockalwayson.sh

Автор сценария:

#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

Этот свет выключается, когда вы нажимаете Num_Lock. Это единственный недостаток этого решения, и это огромное улучшение того, что я имел. Это решение не ломает другие клавиши-модификаторы, такие как Alt.

Большое спасибо Michał Górny за это решение.

бонус

Если вы выходите из системы и снова входите в систему, скрипт больше не работает (вам нужно перезагрузиться, чтобы он снова заработал). Чтобы это исправить, отредактируйте /etc/lightdm/lightdm.conf (место, где он находится в Manjaro Linux) и добавьте вариант сценария для входа в систему:

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

Кроме того, LightDM отключает блокировку num, если вы выходите из системы. Чтобы исправить это, добавьте в тот же файл:

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

Не забудьте сохранить.

Вам нужен как запуск Xfce, так и эта конфигурация, чтобы она работала всегда.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .