Отключить светодиодный индикатор num lock или обратную клавиатуру, чтобы, когда num lock включен, индикатор не горит

Обновление 2016 года

Большинство ответов здесь пятилетней давности, так что пришло время для некоторых обновлений.

Ubuntu использовала upstart по умолчанию, но в прошлом году они отказались от него в пользу systemd - смотрите:

В связи с этим на Ubuntu wiki есть хорошая статья Systemd for Upstart Users - очень подробное сравнение между upstart и systemd и руководство по переходу с upstart на systemd.

(Обратите внимание, что согласно Ubuntu wiki вы все еще можете запустить upstart на текущих версиях Ubuntu по умолчанию, установив upstart-sysv и выполнив sudo update-initramfs -u, но учитывая масштаб проекта systemd, я не знаю, как это работает на практике, и можно ли удалить systemd. )

Большая часть информации в разделах Commands и Scripts ниже адаптирована из некоторых примеров, использованных в этой статье (которая удобно лицензирована, как и материалы пользователей Stack Exchange, по лицензии Creative Commons Attribution-ShareAlike 3.0 License).

Вот краткое сравнение обычных команд и простых скриптов, подробное объяснение смотрите в разделах ниже. В этом ответе сравнивается старое поведение систем на базе Upstart с новым поведением систем на базе systemd, как было задано в вопросе, но обратите внимание, что команды, помеченные как "Upstart", не обязательно специфичны для Upstart - это часто команды, общие для всех Linux и Unix систем без systemd.

Команды

Выполнение su:

  • upstart: su
  • systemd: machinectl shell

(см. раздел "Замена команды su" ниже)

Выполнение screen:

  • upstart: screen
  • systemd: systemd-run --user --scope screen

(см. раздел "Неожиданное убийство фоновых процессов" ниже)

Запуск tmux:

  • upstart: tmux
  • systemd: systemd-run --user --scope tmux

(см. раздел "Неожиданное убийство фоновых процессов" ниже)

Запуск job foo:

  • upstart: start foo
  • systemd: systemctl start foo

Stopping job foo:

  • upstart: stop foo
  • systemd: systemctl stop foo

Restarting job foo:

  • upstart: restart foo
  • systemd: systemctl restart foo

Перечисление заданий:

  • upstart: initctl list
  • systemd: systemctl status

Проверка конфигурации задания foo:

  • upstart: init-checkconf /etc/init/foo. conf
  • systemd: systemd-analyze verify /lib/systemd/system/foo. service

Список переменных окружения задания:

  • upstart: initctl list-env
  • systemd: systemctl show-environment

Установка переменной окружения задания:

  • upstart: initctl set-env foo=bar
  • systemd: systemctl set-environment foo=bar

Удаление переменной окружения задания:

  • upstart: initctl unset-env foo
  • systemd: systemctl unset-environment foo

Журналы

В upstart журналы являются обычными текстовыми файлами в каталоге /var/log/upstart, поэтому вы можете обрабатывать их как обычно:

cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log

В systemd журналы хранятся во внутреннем двоичном формате (не как текстовые файлы), поэтому для доступа к ним нужно использовать команду journalctl:

sudo journalctl -u foo
sudo journalctl -u foo -f

Скрипты

Пример скрипта upstart, написанного в /etc/init/foo. conf:

description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir

Пример systemd скрипт, написанный в /lib/systemd/system/foo. service:

[Unit]
Description=Job that runs the foo daemon
Documentation=man:foo(1)
[Service]
Type=forking
Environment=statedir=/var/cache/foo
ExecStartPre=/usr/bin/mkdir -p ${statedir}
ExecStart=/usr/bin/foo-daemon --arg1 "hello world" --statedir ${statedir}
[Install]
WantedBy=multi-user.target

замена команды su

Замена команды su была включена в systemd в pull request #1022:

потому что, по словам Леннарта Поттеринга, "su - это действительно сломанная концепция".

Он объясняет, что "вы можете использовать su и sudo как раньше, но не ожидайте, что они будут работать в полном объеме".

Официальный способ достижения su-подобного поведения теперь такой:

machinectl shell

Это было дополнительно объяснено Леннартом Поттерингом в обсуждении к выпуску #825:

"Ну, об этом долго говорили, но проблема в том. что то, что должен делать su, очень неясно. [...] Короче говоря: su - это действительно сломанная концепция. Она дает вам что-то вроде оболочки, и это нормально, если использовать его для этого, но это не полноценный логин, и не следует принимать его за таковой". - Lennart Poettering

См. также:

Неожиданное завершение фоновых процессов

Команды типа:

больше не работают так, как ожидалось. Например, nohup - это команда POSIX для обеспечения того, чтобы процесс продолжал работать после выхода из сеанса. Она больше не работает в systemd. Также такие программы как screen и tmux должны вызываться особым образом, иначе процессы, которые вы запускаете вместе с ними, будут убиты (в то время как не убивать эти процессы обычно является основной причиной запуска screen или tmux в первую очередь).

Это не ошибка, это преднамеренное решение, поэтому вряд ли оно будет исправлено в будущем. Вот что Леннарт Поттеринг сказал по этому поводу:

На мой взгляд, это было довольно странно для UNIX, что он по умолчанию позволял произвольному пользовательскому коду неограниченно оставаться после выхода из системы. Многие люди, работающие с ОС, уже давно обсуждают, что это возможно, но, конечно, не должно быть по умолчанию, но никто до сих пор не осмелился щелкнуть переключателем, чтобы превратить это из умолчания в опцию. Не очищать сессии пользователя после выхода из системы - это не только некрасиво и несколько по-хакерски, но и проблема безопасности. systemd 230 наконец-то переключился и по умолчанию корректно очищает все сеансы после выхода пользователя из системы.

Подробнее см.:

Высокоуровневая концепция запуска

В некотором смысле systemd работает в обратном направлении - В upstart задания запускаются, как только могут, а в systemd - когда должны. В конце дня одни и те же задания могут быть запущены обеими системами и практически в одном и том же порядке, но вы думаете об этом, глядя, так сказать, с противоположного направления.

Вот как Systemd для пользователей Upstart объясняет это:

Модель Upstart для запуска процессов (заданий) является "жадной событийной", т.е. все доступные задания, события запуска которых произошли, запускаются запускаются как можно раньше. Во время загрузки upstart синтезирует некоторые начальные события, такие как startup или rcS, в качестве "корня дерева", ранние службы запускаются по ним, а более поздние службы запускаются, когда первые запущены. Новое задание просто должно установить свой конфигурационный файл в /etc/init/, чтобы стать активным. Модель

systemd для запуска процессов (юнитов) является "ленивой зависимостью", т.е. юнит запускается только тогда, когда от него зависит какой-то другой юнит. зависит от него. Во время загрузки systemd запускает "корневой модуль" (default.target, может быть переопределен в grub), который затем транзитно расширяется и запускает свои зависимости. Новый блок должен добавить себя в качестве зависимость от какого-либо блока последовательности загрузки (обычно multi-user.target), чтобы стать активным.

Использование в дистрибутивах

Теперь некоторые свежие данные согласно Википедии:

Дистрибутивы, использующие upstart по умолчанию:

Дистрибутивы, использующие systemd по умолчанию:

(см. Wikipedia для получения актуальной информации)

Дистрибутивы, не использующие ни Upstart, ни systemd:

Споры

В прошлом был предложен форк Debian, чтобы избежать systemd. Был создан Devuan GNU+Linux - форк Debian без systemd (спасибо fpmurphy1 за указание на это в комментариях).

Более подробную информацию об этом споре смотрите:

Как многие из вас, возможно, уже знают, голосование по Init GR Debian, которое продвигал Иэном Джексоном, не помогло защитить наследие Debian и его пользователей от лавины systemd.

Эта ситуация создает перспективы блокировки зависимостей systemd, которая де-факто угрожает свободе разработки и имеет серьёзные последствия для Debian, его upstream и downstream.

CTTE удалось поменять местами зависимости и выиграть время из-за тонкой установки systemd вместо sysvinit, но даже этот процесс был изнурительным и полным драматизма. В конце концов, неделю назад Иэн Джексон подал в отставку. [...]

Я выхожу из состава Технического комитета с немедленным вступлением в силу.

Хотя важно, чтобы мнение 30-40% участников проекта, которые согласны со мной, должны быть представлены в ТК, я сам являюсь очевидно, слишком противоречивая фигура на данном этапе, чтобы делать это. Мне следует отойти в сторону, чтобы попытаться уменьшить степень, до которой разговоры о управления проектом переходят на личности. [...]

Devuan родился в результате споров о решении использовать в качестве системы init по умолчанию в Debian. Официальная позиция Debian по поводу systemd полна утверждений, которые другие развенчали. Заинтересованные Читатели могут продолжить обсуждение этой горячей темы в The systemd controversy. Однако мы призываем вас сохранять холодный ум и голос вежливым. В Devuan мы больше заинтересованы в том, чтобы программировать неправильно чем оглядываться назад. [...]

Создано несколько сайтов и статей, посвященных спорам о systemd:

Есть много интересных обсуждений на Hacker News:

Подобные тенденции можно наблюдать и в других дистрибутивах:

Philosophy

upstart следует философии Unix - DOTADIW - "Do One Thing and Do It Well". Это замена традиционного демона init. Он не делает ничего, кроме запуска и остановки служб. Другие задачи делегируются другим специализированным подсистемам.

systemd делает гораздо больше. В дополнение к запуску и остановке служб она также управляет паролями, входами в систему, терминалами, управлением питанием, сбросом заводских настроек, обработкой журналов, точками монтирования файловой системы, сетевым взаимодействием и многим другим - о некоторых возможностях см. файл NEWS.

Планы по расширению

Согласно Перспектива для systemd Что было достигнуто, и что ждет впереди презентация Леннарта Поттеринга в 2014 году на GNOME.asia, вот основные цели systemd, области, которые уже охвачены, и те, которые еще в процессе:

цели systemd:

Наши цели

  • Превращение Linux из мешка с битами в конкурентоспособную операционную систему общего назначения.
  • Создание ОС нового поколения для Интернета Устранение бессмысленных различий между дистрибутивами
  • Возвращение инноваций в ядро ОС

  • Настольная, серверная, контейнерная, встраиваемая, мобильная, облачная, кластерная, ... . Эти области ближе друг к другу, чем вы думаете

  • Снижение сложности администратора, надежность без надзора
  • Все интроспективно
  • Автоматическое обнаружение, plug and play - ключ
  • Мы чиним вещи там, где они сломаны, никогда не заклеиваем их

Области, которые уже охвачены:

Что мы уже охватили:

Система init, ведение журнала, управление логинами, управление устройствами, управление временными и изменчивыми файлами, регистрация двоичных форматов, сохранение/восстановление подсветки, сохранение/восстановление rfkill, bootchart, readahead, настройка зашифрованного хранилища, обнаружение разделов EFI/GPT, регистрация виртуальной регистрация виртуальных машин/контейнеров, управление минимальными контейнерами, имя хоста управление, управление локалями, управление временем, управление случайными семенами управление, управление переменными sysctl, управление консолью, ....

Текущая работа:

Над чем мы работаем:

  • управление сетью
  • systemd-networkd
  • локальный кэш DNS, mDNS responder, LLMNR responder, DNSSEC verification
  • IPC в ядре
  • kdbus, sd-bus
  • Синхронизация времени с NTP
  • systemd-timesyncd
  • Больше интеграции с контейнерами
  • Sandboxing of Services
  • Sandboxing of Apps
  • Формат образа ОС
  • Формат образа контейнера
  • Формат образа приложения
  • GPT с автообнаружением
  • Stateless systems, instantiatable systems, сброс к заводским настройкам
  • /usr - ОС
  • /etc - (необязательно) конфигурация
  • /var - (необязательно) состояние
  • Атомарная инициализация и обновления узлов
  • Интеграция с облаком
  • Управление сервисами на узлах
  • Верифицируемые образы ОС
  • Весь путь до прошивки
  • Boot Loading

Область применения этого ответа

Как отметил fpmurphy1 в комментариях, "Следует отметить, что systemd с годами расширил сферу своей работы далеко за пределы простого запуска системы. "

Я постарался включить сюда большую часть релевантной информации. Здесь я сравниваю общие возможности Upstart и systemd при использовании их в качестве систем init, как было задано в вопросе, и я упоминаю только те возможности systemd, которые выходят за рамки системы init, потому что их нельзя сравнивать со Startup, но их наличие важно для понимания разницы между этими двумя проектами. Для получения дополнительной информации следует обратиться к соответствующей документации.

Дополнительная информация

Дополнительную информацию можно найти на:

Дополнительно

Команда LinOxide создала Systemd vs SysV Init Linux Cheatsheet.

6
16.01.2017, 02:00
3 ответа

Если «блокировка номера включена по умолчанию» означает «клавиши на цифровой клавиатуре по умолчанию», и вы не хотите/не заботитесь о навигации по клавиатуре:

setxkbmap -option numpad:mac <layout>

Итак, для макета us:

setxkbmap -option numpad:mac us

Теперь цифровая клавиатура всегда вводит цифры, независимо от состояния цифровой блокировки.

Справочник:xkeyboard -config man -страница

4
27.01.2020, 20:23

Вы можете инвертировать значение Num Lock. С помощью Xmodmap поместите это в свой .Xmodmap .

keycode  79 = KP_Home KP_7 KP_Home KP_7 KP_Home KP_7 KP_Home KP_7
keycode  80 = KP_Up KP_8 KP_Up KP_8 KP_Up KP_8 KP_Up KP_8
keycode  81 = KP_Prior KP_9 KP_Prior KP_9 KP_Prior KP_9 KP_Prior KP_9
keycode  83 = KP_Left KP_4 KP_Left KP_4 KP_Left KP_4 KP_Left KP_4
keycode  84 = KP_Begin KP_5 KP_Begin KP_5 KP_Begin KP_5 KP_Begin KP_5
keycode  85 = KP_Right KP_6 KP_Right KP_6 KP_Right KP_6 KP_Right KP_6
keycode  87 = KP_End KP_1 KP_End KP_1 KP_End KP_1 KP_End KP_1
keycode  88 = KP_Down KP_2 KP_Down KP_2 KP_Down KP_2 KP_Down KP_2
keycode  89 = KP_Next KP_3 KP_Next KP_3 KP_Next KP_3 KP_Next KP_3
keycode  90 = KP_Insert KP_0 KP_Insert KP_0 KP_Insert KP_0 KP_Insert KP_0
keycode  91 = KP_Delete KP_Decimal KP_Delete KP_Decimal KP_Delete KP_Decimal KP_Delete KP_Decimal

Возможно, вам потребуется добавить xmodmap ~ / .Xmodmap в ваши запускаемые приложения, я не уверен, что Xfce делает это по умолчанию.

Такой способ имеет то преимущество, что в большинстве случаев у вас не будет NumLock. У некоторых программ есть проблемы с NumLock, потому что они считают его модификатором, из-за которого их сочетания клавиш не работают, когда он включен.

Если вы никогда не выключаете NumLock, вы можете отключить клавишу NumLock, пока находитесь на ней.

keycode 77 = NoSymbol

Если вам нравится боль, вы можете использовать XKB. Вот моя конфигурация, благодаря которой NumLock всегда включен. Создайте файл ~ / .xkb / types / mytypes , содержащий

// Digits without NumLock, cursor with NumLock. Shift swaps the meaning.
// Do it this way because I almost always want digits, but the NumLock state
// breaks key bindings in some applications.
partial xkb_types "invert_numlock" {
  type "KEYPAD" {
    modifiers = Shift+NumLock;
    map[None] = Level2;
    map[Shift] = Level1;
    map[NumLock] = Level1;
    map[Shift+NumLock] = Level2;
    level_name[Level1] = "Base";
    level_name[Level2] = "Number";
  };
  include "extra(keypad)"
};

Создайте файл ~ / .xkb / symbols / mysymbols , содержащий:

partial xkb_symbols "mykeypad" {
    key  <KP7> {         [            KP_7,         KP_Home ] };
    key  <KP8> {         [            KP_8,           KP_Up ] };
    key  <KP9> {         [            KP_9,        KP_Prior ] };
    key  <KP4> {         [            KP_4,         KP_Left ] };
    key  <KP5> {         [            KP_5,        KP_Begin ] };
    key  <KP6> {         [            KP_6,        KP_Right ] };
    key  <KP1> {         [            KP_1,          KP_End ] };
    key  <KP2> {         [            KP_2,         KP_Down ] };
    key  <KP3> {         [            KP_3,         KP_Next ] };
    key  <KP0> {         [            KP_0,       KP_Insert ] };
    key <KPDL> {         [      KP_Decimal,       KP_Delete ] };
};

Выполните следующую команду оболочки как часть запуска инициализации X (при необходимости добавьте другие параметры к вызову setxkbmap ):

setxkbmap -types "complete+mytypes(invert_numlock)" \
          -symbols "us+compose(menu)+mysymbols(mykeypad)" \
          -print | xkbcomp -I ~/.xkb - "$DISPLAY"
7
27.01.2020, 20:23

У вас может быть возможность выключать светодиод в X11 каждый раз, когда вы даете команду

xset -led named "Num Lock"

или пробовать явные числа, такие как xset -led 3 .

1
27.01.2020, 20:23

Теги

Похожие вопросы