Держите NumLock всегда включенным


29

У меня есть стандартная клавиатура с цифровыми клавишами на правой стороне (я думаю, она называется 104-клавишная клавиатура). Я хочу использовать цифровые клавиши только в качестве цифровых клавиш. Это означает, что я не хочу NumLockвключать и выключать цифровые клавиши.

Однако иногда случается (я не знаю, как, возможно, я случайно NumLockнажал клавишу), что numlock выключен, и я должен нажать его снова. Это очень раздражает.

Можно ли отключить отключение numlock?

Другими словами: я хочу, чтобы мои числовые клавиши всегда действовали как цифровые клавиши, и чтобы отключить переключатель numlock .

Я использую Debian и LXDE (Openbox).


Существует эта нить: ubuntuforums.org/showthread.php?t=2138114
— ОДС

@MartinVegter Хотите разместить здесь содержимое ~/.config/openbox/autostartи ~/.config/openbox/rc.xml?
— Ристо Салминен

Нужно событие, которое снова вызовет отключение Numlock, если обнаружится, что Numlock включен. Отключить numlock так же просто, как указано xmodmap. Остался только вопрос, как получить это событие ......?
— SHW

Ответы:


7

Прочитав все ответы здесь, я был весьма удивлен, увидев, что вы можете сделать следующее.

<keybind key="Num_Lock">
  <action name="Execute">
    <command>numlockx on</command>
  </action>
</keybind>

Таким образом, каждый раз, когда вы нажимаете Num, что деактивирует Numlock. Он будет выполнен numlockx on, что реактивирует numlock.

Название происходит от моего вывода, xevкоторый дал мне код ключа 77 и имяNum_Lock

В случае @MartinVegters ему нужно было подождать несколько секунд, чтобы numlockx onопределенное выполнение выполнялось после обработки события Num. Поскольку между обработкой numlock в ядре и выполнением существует условие гонки numlockx.

Для этого случая вы можете написать небольшой скрипт, denumlock.shкак

#!/bin/sh

sleep "$1"
numlockx on

и использовать его в связывании ключей

<command>/bin/sh denumlock.sh 1</command>

Это грязно, но это работает.

Я рекомендую следующее, что я не смог проверить сам. Вам лучше следовать первым ответам, которые предлагают использовать

xmodmap -e 'keycode 77 = Escape'

Но для LXDE вам нужно использовать механизм автозапуска LXDE, который отличается от способа редактирования Openbox ~/.config/openbox/autostart.

В LXDE вам, видимо, нужно редактировать ~/.config/lxsession/LXDE/autostartили с Lubuntu ~/.config/lxsession/Lubuntu/autostart, который содержит команды для запуска. (См. Архивные документы и Документы LXDE ) Вам может потребоваться создать этот файл и добавить эту строку.

@xmodmap -e 'keycode 77 = Escape'

К сожалению, как я уже сказал, я не могу проверить, работает ли это, поскольку у меня есть только виртуальная машина, работающая с LXDE.


1
Я пробовал ваше решение, <keybind key="Num_Lock">но, к сожалению, оно не работает. Пока команда numlockx onвыполняется, <kbd> NumLock </ kbd> все еще продает свою функцию как numlock. Так что я все еще могу включить / выключить numlock.
— Мартин Вегтер

Что касается другого решения, использующего xmodmap, когда я попробовал решение, предложенное Ристо Салминеном, команда работала, но я потерял все свои привязки клавиш.
— Мартин Вегтер

@MartinVegter Mhh, вы можете попробовать sleep 3; numlockx onдля связывания ключей. Для второго решения вы пробовали его с автозапуском?
— Рафаэль Аренс

Я не понимаю почему, но даже sleep 3; /usr/bin/numlockx onне работает. NumLockпо-прежнему действует как переключатель вкл / выкл.
— Мартин Вегтер

@MartinVegter /usr/bin/numlockx onработает в вашей системе?
— Рафаэль Аренс

13

возможно, я случайно нажал NumLockклавишу

Если клавиатура принадлежит вам (а не вашему работодателю, например), просто физически снимите ее с клавиатуры .

Вы все еще можете нажать на нее заостренным предметом, если вам действительно это нужно.

введите описание изображения здесь


4
Да, +1. Просто элегантно.
— ypercubeᵀᴹ

1
к сожалению, состояние по умолчанию моего NumLuck является неправильным :(
— MichaelChirico

6

На моем ноутбуке клавиатура (Ubuntu 10.04) в настоящее время включена блокировка клавиатуры.

$ xmodmap -pke|grep 77
keycode  77 = Num_Lock Pointer_EnableKeys Num_Lock Pointer_EnableKeys
keycode 177 = XF86Phone NoSymbol XF86Phone
$ xmodmap -e "keycode 77 ="

Вуаля! numlock теперь отключен.

xmodmap -e "keycode  77 = Num_Lock Pointer_EnableKeys Num_Lock Pointer_EnableKeys"

Откладывает это снова. (Возможно, было бы лучше, если бы поискали Num_lock, но вы понимаете суть).

Ответ на комментарий @Martin Vegter.

Хорошо , в ответ на ваш комментарий xmodmap разрушает ваши привязки, понял.

Я только что проверил документацию Openbox

Посмотрите в ~ / .config / openbox / lxde-rc.xml

ls -l lxde-rc.xml (у вас также есть rc.xml? пожалуйста, проверьте).

взять его копию в качестве резервной копии

(используйте редактор) ищите numlock (возможно, nmlk).

Вы видите что-то подобное?

<keybind key="Numlock">
<action name="whatEverItSays"/>
</keybind>

Закомментируйте это ИЛИ измените значение ключа связывания ключей на альтернативу, например Alt-Numlock для переключения

key="A-Numlock"

Например

Для того, чтобы Закомментируйте

<!-Commented out from here
    <keybind key="Numlock">
    <action name="whatEverItSays"/>
    </keybind>
To Here -->

или

Изменить на Alt + Numlock

<keybind key="A-Numlock">
  <action name="whatEverItSays"/>
</keybind>

сохранить изменения и выйти / войти или перезагрузить.


Проблема в том, что любая xmodmapкоманда (то есть xmodmap -e 'keycode 77 = Escape') разрушает мои существующие .config/openbox/lxde-rc.xml
— сочетания

1
Я ответил выше, чтобы получить лучшее форматирование.
— X Тянь

Спасибо за ваш ответ. Однако, по моему .config/openbox/lxde-rc.xml, нет строки, содержащей Numlockили Num_Lock. Когда я его создаю, он не действует: <keybind key = "Num_Lock"> <action name = "Execute"> <command> / bin / true </ command> </ action> </ keybind>
— Мартин Вегтер,

1
Перед тем, как в вашем домашнем каталоге должен быть прочитан другой файл конфигурации. я рекомендую поискать в двух местах: / etc / xdg / openbox и / usr / share / ... Если это не поможет, мне придется отказаться - извините.
— X Tian

из 3.4.7 измененный журнал (openbox) «Исправлена ​​потеря привязок клавиш, если несколько привязок на одном уровне не могли быть переведены (исправляет VMWare, приводя к тому, что привязки клавиш Openbox перестали работать)»
— X Tian

5

Найдите свой код ключа numlock с помощью xev. Например, здесь Num_Lock - 77.

Используйте xmodmap для переназначения кода ключа:

  • Для текущих сеансов X внутри оболочки используйте xmodmap -e 'keycode 77 = '.
  • Для всех будущих X сессий, внутри ~/.xprofileместа xmodmap -e 'keycode 77 = '.

    РЕДАКТИРОВАТЬ: Примечание: не работает, если программное обеспечение изменяет состояние Num Lock.


1
Команда xmodmap -e 'keycode 77 = 'работает, но она вызывает серьезную проблему: все мои привязки клавиш перестают работать
— Мартин Вегтер

Ну, вы можете попытаться сопоставить его действительному, безвредному ключу. Нравится xmodmap -e 'keycode 77 = Escape'(YMMV, ESC кажется безопасным для меня). У вас есть файл ~ / .Xmodmap? Если да, вместо ~/.xprofile, поместите keycode 77 = Escapeв конце этого файла.
— emp.justine

1
Проблема в том, что любая xmodmapкоманда (т. xmodmap -e 'keycode 77 = Escape'.config/openbox/lxde-rc.xml
— Е.

4

Просто удалите сопоставление клавиш NumLock, сопоставив его ни с чем: сначала запустите xevи нажмите Num Lock (вероятно, он выведет 77), а затем выполните команду:

xmodmap -e "keycode # = """

где # - это код ключа NumLock.

Вы также включили бы это, ~/.xprofileчтобы отключить NumLock в сеансах x.


В случае, если мой первоначальный вопрос не ясен: я не хочу отключать numlock. Я хочу обратного. Я хочу убедиться, что его нельзя отключить (я хочу, чтобы функция numlock всегда была включена)
— Мартин Вегтер,

Ах, у меня явно была ошибка в моем мышлении, спасибо, что сообщили мне об этом. :) Я посмотрю, смогу ли я улучшить свой ответ.
— Ристо Салминен,

это не влияет на мою систему:xmodmap -e "remove Lock = Num_Lock"
— Мартин Вегтер,

Теперь команда работает, но она уничтожает все мои сочетания клавиш. Все привязки клавиш перестают работать.
— Мартин Вегтер


4

рис вариантов клавиатурыс LinuxMint 17.2 и другими версиями Ubuntu, вы можете перейти к настройке KEYBOARD, а затем на вкладках LAYOUTS на этой странице вы найдете маленькую кнопку «options».

Оттуда перейдите к «параметрам совместимости разного» и проверьте, что «цифровые ключи всегда вводят цифры»

Это спасатель для меня. Мне чертовски неприятно набирать номер и перемещаться куда-то еще на страницу. Ура! ;)


1
Этот ответ должен иметь гораздо больше очков!
— Карлос Гант

Это может быть сделано также из командной строки setxkbmap -option numpad:macили путем установки Option "XkbOptions" "numpad:mac"в xorg.conf.
— j123b567

2

Другие ответы здесь предлагали использовать numlockx onс xmodmap -e 'keycode 77 =', но numlockx onне работали в моей системе вместе с этой xmodmapкомандой, показывая мне сообщение об ошибке:

$ numlockx on
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  132 (XTEST)
  Minor opcode of failed request:  2 (X_XTestFakeInput)
  Value in failed request:  0x0
  Serial number of failed request:  17
  Current serial number in output stream:  20

А также настройка xmodmap -e 'keycode 77 ='по какой-то причине удалит все мои сочетания клавиш, сделанные с xbindkeys.

Этот ответ на подобный вопрос помог мне, однако. Часть моего ~/.xinitrc:

numlockx on
xmodmap -e 'keycode 77 = NoSymbol Num_Lock'

Таким образом, NumLock ничего не делает сам по себе, но при нажатии Shift он служит своей первоначальной (в основном бесполезной) цели, и, что важнее всего, он не мешает numlockx onработе в моей системе и не портит xbindkeysпривязки клавиш.


1

Другой способ, если вы хотите отключить numlock ключ, отключите навсегда. Вы можете сделать это, изменив свой текущий файл раскладки, изменив код 77.

Установите это значение в «none», чтобы случайное нажатие клавиши ничего не делало.

Используйте numlockxпри загрузке, чтобы запустить его, и используйте измененный файл раскладки ключей в одном из стартовых скриптов, например ~/.bashrcили в /etc/profile.

ПРИМЕЧАНИЕ: я не проверял это, но оно должно работать.


1

В OpenSuse 13.x с KDE это работало для меня:

  • установить numlockx
  • Добавить пользовательский ярлык:
    • Пользовательские ярлыки -> Изменить -> Создать -> Глобальные ярлыки -> Команда / URL:
    • Название действия: NumLockOn
    • Комментарий: держите numlock на
    • Триггер: установите в NumLockk
    • Действие-> Команда / URL: sh -c 'sleep 0.5; numlockx on'
    • Хит применить
    • (сделанный)

Если NumLock нужно включить, потому что он выключен, просто используйте % numlockx on.


Это то, что мне нужно. Работа над Xubuntu 16.04.
— Кодманяга


0

Возможно, это не лучшее решение, но это сработало для меня:

stdbuf -oL xinput test 11 | mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}' | bash

Где 11 - идентификатор вашей клавиатуры. Сделайте xinputсписок, чтобы определить свой идентификатор клавиатуры (в моем случае это 11):

user@host:~$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DualPoint Stick                           id=12   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Sony Vaio Keys                            id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ USB 2.0 Camera                            id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]

Очевидно, numlockxдолжен быть установлен, чтобы это работало.

Объяснение:

  • stdbuf -oL изменяет операции буферизации выходного потока на строку буферизированной
  • xinput test 11 печатает нажатые клавиши в стандартный вывод
  • mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}' для каждой строки, которая напечатана и содержит 77 (клавиша numlock), создайте команду /usr/bin/numlockx on ...
  • | bash ... и направить его в bash для его выполнения.

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


0

Я также хочу, чтобы цифровые клавиши на цифровой клавиатуре всегда были цифрами, а не KP _...

Мое решение является частью моей перегруппировки клавиатуры Apple для использования с Linux репозиторием .

По сути, он просто переназначает Num_Lock как F20, а цифры как сами по себе.

Это решение всегда обеспечивает желаемый результат и дополнительную функциональную клавишу в качестве дополнительной выгоды.


-1

Создайте следующий скрипт и сделайте его исполняемым с chmod +x <filename>

#!/bin/bash
if [ -x /usr/bin/numlockx ];then
/usr/bin/numlockx on
fi

Поместите путь к файлу в .config/openbox/autostart

Или поместите его как задание cron, которое проверяет каждые пару минут и запускает скрипт, если numlocks выключен.

crontab -e 
*/1 * * * * <path-to-file>

Или просто запустите скрипт в цикле.

#!/bin/bash
  x=0
  while [ x -eq 0 ];do
    if [ -x /usr/bin/numlockx ];then
    /usr/bin/numlockx on
    fi
  done

Если у вас нет numlockx, вы сможете получить его с sudo apt-get install numlockx


Нет, это, конечно, не очень хорошее решение. Извините
— Мартин Вегтер

1
Можете ли вы объяснить, почему нет?
— Джайт

1
Ну, потому что это очень грязный обходной путь. Это не решает основную проблему, это только подметает симптомы под ковром.
— Мартин Вегтер

К сожалению, если xmodmap не работает, у вас нет других вариантов. Написание скрипта для проверки и включения numlock не решает проблему. Думайте об этом как о проверке и балансе для жирных пальцев. Побочных эффектов нет, и скрипт можно легко остановить / запустить в любое время. Это действительно не так грязно, как обходной путь. Я видел гораздо худшее в реальном исходном коде программ, которые вы используете каждый день.
— Джайт

как ты можешь быть так уверен, у меня нет других вариантов?
— Мартин Вегтер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.