Как включить Num Lock через командную строку

Вопрос или проблема

Похоже, что 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:

  1. Установите numlockw через pipx:

    sudo apt install pipx
    pipx install numlockw
  2. Настройте доступ к /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
  3. При необходимости добавьте вашу учётную запись в группу plugdev.

Заключение

Для успешного управления состоянием Num Lock из командной строки рекомендуется попробовать разные подходы и убедиться, что выбранное решение соответствует вашей среде и требованиям безопасности. Наблюдая за исполнением, вы сможете определить наиболее стабильный и эффективный метод управления. NumlockW является многообещающим вариантом для современных систем на основе Wayland, однако его установка может потребовать дополнительных усилий.

Оцените материал
Добавить комментарий

Капча загружается...