Держите 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>

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

X Тянь
источник
Проблема в том, что любая 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.

emp.justine
источник
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».

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

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

flyingdrifter
источник
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привязки клавиш.

jojman
источник
1

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

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

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

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

SHW
источник
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

Довольно хакерский обходной путь - добавить cronзадание, которое запускает следующую команду

setleds +num

каждые 30 секунд или около того, чтобы включить NumLock.

Смотрите также

Джозеф Р.
источник
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, а цифры как сами по себе.

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

guivho
источник
-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

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