- Вопрос или проблема
- NumlockW: Лучшее решение для Wayland на данный момент
- Простой пример
- Установка и конфигурация
- Использование
- Недостатки NumlockW
- Другие альтернативы для Wayland
- ydotool
- setleds
- Ответ или решение
- Теория
- Примеры
- 1. Утилита setleds
- 2. Управление светодиодами в директории /sys
- Применение
- Установка и настройка NumlockW
- Заключение
Вопрос или проблема
Похоже, что numlockx — это стандартный способ автоматического включения numlock. В моем случае у меня есть собственные скрипты, которые запускаются при старте, и установить весь пакет только для включения numlock кажется сложным. Я надеюсь, что кто-то подскажет, как это сделать из командной строки, чтобы я мог просто вставить это в существующий скрипт.
Обратите внимание, что меня не интересует включение numlock на экране входа, что является темой многих подобных вопросов. Я хочу сделать то, что легко сделать с numlockx, но просто добавив одну-две строки в существующий скрипт, который запускается при входе. Заранее благодарю!
Вы можете установить состояние numlock из SSH сессии, обратившись к /dev/console, что требует прав root (если только не изменить права на /dev/console
).
Все эти команды предполагают, что пользователь может выполнять sudo без указания пароля. Это часто бывает, когда пользователь входит в группу с названием “sudo” или “wheel” в зависимости от дистрибутива и локальной конфигурации.
# включить numlock
sudo sh -c 'setleds +num < /dev/console'
# выключить numlock
sudo sh -c 'setleds -num < /dev/console'
Также возможно записывать в запись /sys для устройства:
# Обратите внимание, что используется 'bash', чтобы поддерживать глобул '?'
# Вы могли бы использовать 'sh', если указали "input1."
# Выключить светодиод numlock (также выключает состояние numlock)
sudo bash -c 'echo 0 > /sys/class/leds/input?::numlock/brightness'
# Включить светодиод numlock
sudo bash -c 'echo 1 > /sys/class/leds/input?::numlock/brightness'
Для подхода с /sys, не нужно создавать подшелл, так как tee
может записать в файл яркости без перенаправления вывода:
# обе операции глобирования ? и перенаправления > происходят вне процесса sudo вашей локальной оболочкой
# Включить
echo 1 | sudo tee /sys/class/leds/input?::numlock/brightness > /dev/null
# Выключить
echo 0 | sudo tee /sys/class/leds/input?::numlock/brightness > /dev/null
Проверено на Raspberry Pi 4 Model B rev 1.4.
Вы можете использовать setleds
. Дополнительную информацию смотрите в man setleds
или setleds --help
.
Я полагаю, что в man
странице есть пример установки numlock на различных терминалах. Вам нужно будет указать /dev/tty7
для терминала.
setleds -D +num
для включения numlock или setleds -D -num
для его выключения.
Чтобы оттолкнуться от ответа RaphaelDavid с использованием setleds -D +num
и setleds -D -num
:
Вы можете получить дополнительную ошибку вида: setleds: Error reading current flags setting. Maybe you are not on the console?: ioctl KDGKBLED: Inappropriate ioctl for device
Решением этой ошибки является выполнение команд setleds
в TTY (например: CTRL + ALT + F2)
Чтобы переключиться обратно с TTY на рабочий стол, используйте CTRL + ALT + F1.
Использование numlockx on
или numlockx off
прекрасно работало в течение многих лет с системой X11, однако в последних системах GNU/Linux используется Wayland, который несовместим.
NumlockW: Лучшее решение для Wayland на данный момент
На начало 2025 года нет решения, столь же простого, как numlockx, но, надеюсь, скоро появится, так как кто-то по имени xz-dev
создал инструмент под названием NumlockW. Хотя он явно на начальной стадии, он работает, хотя и с некоторыми особенностями.
Простой пример
$ numlockw --dev " Raspberry Pi Internal Keyboard" on
$ numlockw status
NumLock is on
$ numlockw --dev " Raspberry Pi Internal Keyboard" off
$ numlockw status
NumLock is off
Установка и конфигурация
Надеюсь, в будущем это станет проще. Если это произойдет, оставьте комментарий, и я обновлю этот ответ.
-
Установите numlockw
sudo apt install pipx pipx install numlockw
-
Задайте
/dev/uinput
для чтения группой plugdev.- Создайте файл
/etc/udev/rules.d/50-uinput.rules
со следующим содержимым:
SUBSYSTEM=="misc", KERNEL=="uinput", MODE="0660", GROUP="plugdev"
- Запустите
sudo udevadm trigger /sys/devices/virtual/misc/uinput
для выполнения правила (или перезагрузите компьютер, если предпочитаете).
- Создайте файл
-
Если ваш аккаунт еще не в группе plugdev, вам нужно будет добавить его, а затем выйти из системы или использовать команду
sg
.sudo addgroup $USER plugdev sg plugdev
Использование
$ numlockw --dev " Raspberry Pi Internal Keyboard" off
Для использования numlockw в настоящее время нужно указать точное название вашей клавиатуры. Если их несколько, кажется, не важно, какую выбрать, так как они все разделяют одно и то же состояние numlock.
Чтобы получить название, используйте numlockw list-devices
. Например:
$ numlockw list-devices
Path | Device Name | Physical Topology | LED Status
/dev/input/event3 | Raspberry Pi Internal Keyboard | usb-0000:01:00.0-1.4/input0 | OFF
/dev/input/event4 | Semi Tech Semi Tech PS/2 Keyboard - PS/2 Mouse | usb-0000:01:00.0-1.3.4/input0 | OFF
/dev/input/event11 | Darlin Gray’s Keyboard | e4:5f:01:1d:e8:21 | OFF
/dev/input/event0 | Dell Dell USB Keyboard | usb-0000:01:00.0-1.1.1/input0 | OFF
/dev/input/event13 | numlockw-evdev-uinput | py-evdev-uinput | OFF
Недостатки NumlockW
У него много особенностей, которые затрудняют его использование:
- Требует точного указания названия клавиатуры, а не просто выбора первой клавиатуры.
- Нет man-страницы, а документация на сайте не полная.
- Отсутствует отчёт об ошибках. Например, если вы упустите или неверно напишете название устройства клавиатуры, оно выдаст ошибку без оповещения.
- NumlockW недоступен через обычный процесс
apt install
из репозитория пакетов Ubuntu и не содержит .deb файла. - Требуется специальный доступ к
/dev/uinput
, но инструкции на сайте отсутствуют необходимые правила udev для Ubuntu. - Неясно, каковы последствия для безопасности (если они есть) от предоставления доступа к /dev/uinput.
- Медленная работа.
- Команда list-devices создает (и удаляет) новое виртуальное устройство клавиатуры каждый раз, когда используется.
- Вывод таблицы из list-devices не выровнен по столбцам, что затруднило заметить, что название моей клавиатуры фактически начинается с двух пробелов. (Совет:
numlockw list-devices | column -t -s\|
) - Это специфическое для Linux решение.
Другие альтернативы для Wayland
Эти не сработали для меня, но должны быть упомянуты, так как могут помочь кому-то.
ydotool
В Ubuntu есть пакет ydotool
, который должен уметь имитировать мышь или клавиатуру (наподобие xdotool
), но работает посредством обращения к ядру Linux, что означает, что он должен работать в X или Wayland.
Теоретически, это должно быть простым способом переключения состояния numlock, хотя он может не быть в состоянии его прочитать. К сожалению, ydotool вовсе не сработал для меня и в настоящее время не имеет ни man-страницы, ни документации в /usr/share/docs.
setleds
Команда setleds
больше не работает. Она когда-то работала, выполняя действия подобные следующим:
$ sudo sh -c 'setleds +num </dev/tty0'
$ sudo sh -c 'setleds </dev/tty0'
Current default flags: NumLock off CapsLock off ScrollLock off
Current flags: NumLock on CapsLock off ScrollLock off
Current leds: NumLock on CapsLock off ScrollLock off
$ sudo sh -c 'setleds -v -num </dev/tty0'
Old flags: NumLock on CapsLock off ScrollLock off
New flags: NumLock off CapsLock off ScrollLock off
setleds
обычно влияет только на текущий виртуальный терминал. Перенаправление stdin выбирает другие ВТ.
Wayland (по крайней мере с композитором, которым я пользуюсь) не воспринимает изменений, которые делает setleds, даже в ВТ, на котором он выполняется. Или, точнее, воспринимает, но не в нужном направлении.
Отступление: Любопытно, что setleds
не повлияло на состояние numlock моей клавиатуры с настоящей цифровой клавиатурой, но изменило, как работает Apple Wireless клавиатура (без цифровой клавиатуры). Когда numlock (клавиша F6) включен, клавиатура обычно превращает некоторые алфавитные клавиши в цифры. Используя setleds +num </dev/tty0
, чтобы попытаться включить numlock, Apple клавиатура переходит в странное состояние, в котором буквы начинают действовать как клавиши курсора, как это бывает при выключенном numlock на цифровой клавиатуре. К счастью, это состояние можно отменить, используя setleds -num </dev/tty0
.
.
Ответ или решение
Чтобы ответить на вопрос о том, как включить Num Lock из командной строки, необходимо обсудить некоторые методы, использования утилит и способов их применения в данной задаче. Обычно утилита numlockx
применяется для автоматического включения numlock, однако, если цель состоит в том, чтобы избежать установки дополнительных пакетов и просто добавить пару строк в существующий скрипт, который запускается при входе в систему, существует несколько альтернативных способов.
Теория
Num Lock — это клавиша, которая контролирует действия цифровой клавиатуры. Обычно она используется для того, чтобы перейти между цифро-буквенным и курсорным режимами на устройствах, где имеется цифровая панель с цифрами. На большинстве современных настольных систем существует возможность управлять состоянием Num Lock программными методами через командную строку или с использованием сторонних утилит. Основная задача — найти способ, который будет работать в ваших условиях и не потребует значительных изменений в существующей инфраструктуре.
Примеры
1. Утилита setleds
На машинах с поддержкой утилиты setleds
можно изменять состояние Num Lock напрямую. Однако стоит учесть, что данная утилита работает только на текстовых консолях (TTY) и может не поддерживаться во всех системах, особенно в среде Wayland.
Команды:
# Включение Num Lock
sudo sh -c 'setleds +num < /dev/tty7'
# Выключение Num Lock
sudo sh -c 'setleds -num < /dev/tty7'
2. Управление светодиодами в директории /sys
Некоторые системы дают возможность управлять состоянием светодиодов клавиатуры через файловую систему /sys. Это более низкоуровневый способ, который не зависит от состояния виртуальных терминалов или типа оконной системы.
# Включение светодиода Num Lock
echo 1 | sudo tee /sys/class/leds/input?::numlock/brightness > /dev/null
# Выключение светодиода Num Lock
echo 0 | sudo tee /sys/class/leds/input?::numlock/brightness > /dev/null
Здесь используется символ “?”, чтобы найти правильное устройство, так как оно может отличаться в зависимости от вашей системы.
Применение
В зависимости от требований и конфигурации вашей системы, вы можете выбрать подходящий для вас метод. Если вы находитесь в среде X11, классическая numlockx
работает отлично. Для Wayland рекомендуется использовать numlockw
, несмотря на то, что его настройка и использование требуют дополнительных шагов и учета специфики безопасности (например, настройки доступа к /dev/uinput
).
Выбор метода:
- Если вы уже используете скрипты для настройки системы при запуске, добавьте нужную команду из приведённых выше.
- Если у вас несколько клавиатур, используйте
numlockw
для более детальной настройки.
Установка и настройка NumlockW
Для использования numlockw
в Wayland:
-
Установите
numlockw
черезpipx
:sudo apt install pipx pipx install numlockw
-
Настройте доступ к
/dev/uinput
:- Добавьте следующую строку в файл
/etc/udev/rules.d/50-uinput.rules
:
SUBSYSTEM=="misc", KERNEL=="uinput", MODE="0660", GROUP="plugdev"
- Примените изменения командой:
sudo udevadm trigger /sys/devices/virtual/misc/uinput
- Добавьте следующую строку в файл
-
При необходимости добавьте вашу учётную запись в группу
plugdev
.
Заключение
Для успешного управления состоянием Num Lock из командной строки рекомендуется попробовать разные подходы и убедиться, что выбранное решение соответствует вашей среде и требованиям безопасности. Наблюдая за исполнением, вы сможете определить наиболее стабильный и эффективный метод управления. NumlockW является многообещающим вариантом для современных систем на основе Wayland, однако его установка может потребовать дополнительных усилий.