Следящая Собака и Крон

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

У меня есть очереди сообщений и их опустошают пчёлы воркеры. Воркеры раз в час умирают, но мой любимый крон их оживляет и заставляет работать дальше.

Это всего один сервер и больше серверов никогда не будет (но меньше будет) поэтому не надо меня критиковать пожалуйста.

Воркеров много (несколько), очередей ещё больше (несколько несколько), они жили в гармонии, но у меня что-то не получилось и воркеры начали смертельно крутиться и жрать память. И сожрали всю.

Используя несложные заклинания вроде “раньше всё было нормально, значит виноваты мои вчерашние изменения” достаточно легко получилось найти какой воркер сломался. Он был убит совсем, а остальным было сказано работать и игнорировать труп рядом.

И они работали. Час. А потом нет. Руками запускаешь — работают. А сами потом не работают.

Было удивительно ведь крон никто не трогал, память перестала пропадать, а воркеры не хотят оживать.

Книга жизни (/var/log/syslog | grep -i cron) сказала что крон работал нормально, но очень давно в последний раз, а потом перестал.

Оказалось что когда воркеры сожрали всю память — следящая собака убила крон. Я сомневаюсь что она поняла что именно крон виновник пропадающий памяти, просто попался под лапу смерти.

Первый раз в моей жизни сторожевая собака убила крон! Невероятно!

А выжили бы systemd timers? Попали ли бы они под лапу смерти сторожевой собаки?

Загадка. Можно было бы конечно провести эксперимент, но не нет. Императивные знания нужны только людям со слабой верой!

#linux #cron #oom #outofmemory #memory #memoryleak #loopofdeath #systemd #systemdtimers

english version

2025.12.09 20:43

systemd-hwdb thinkpad t490s keyboard buttons remap

Добрый вечер! Начинавем утренний сеанс боли!

У меня на ноутбуке немецкая клавиатура. Мне в целом всё равно какие там значки где нарисованы, но вто то что левый шифт маленький, а справа от него кнопка с <> — это вообще почему как зачем. Я не могу одной рукой нажать прекрасный шорткат <ctrl>+<shift>+<alt>+c!

В пррошлом у меня уже была точно такая же проблема, но это было ещё во время когда systemd не покорил мир и нет даже уверенности что это было не в hal.

Ну а нынче, значит, это даже не udev, а уже systemd-hwdb что какая-то одна и та же херня и непонятно почему зачем для чего.

Этот пост уровень боли один, уровень боли wacom будет позже.

Вам понадобится три консоли, две из них под рутом.

В первой обычной нерутовой вы делаете:

# nvim /usr/lib/udev/hwdb.d/60-keyboard.hwdb

Этот файл будет нашей путеводной звездой.

Во второй рутовой консоли вы делаете:

# true > /etc/udev/hwdb.d/72-tp-t490s-keyboard.hwdb
# nvim /etc/udev/hwdb.d/72-tp-t490s-keyboard.hwdb

В третьей рутовой консоли вы начинаете плакать от жалости к себе.

Для начала нам понадобится узнать как называется клавиатура, понятия не имею как это сделать адекватно, но сделаем это неадекватно (похоже, это и есть адекватно):

# evtest

No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Sleep Button
/dev/input/event1:	Lid Switch
/dev/input/event10:	HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event11:	HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event12:	Elan Touchpad
/dev/input/event13:	Elan TrackPoint
/dev/input/event14:	Keychron Keychron K1 SE
/dev/input/event15:	Keychron Keychron K1 SE
/dev/input/event16:	Logitech Gaming Mouse G402
/dev/input/event17:	Logitech Gaming Mouse G402 Keyboard
/dev/input/event2:	Power Button
/dev/input/event3:	AT Translated Set 2 keyboard
/dev/input/event4:	Video Bus
/dev/input/event5:	PC Speaker
/dev/input/event6:	ThinkPad Extra Buttons
/dev/input/event7:	HDA Intel PCH Mic
/dev/input/event8:	HDA Intel PCH Headphone
/dev/input/event9:	HDA Intel PCH HDMI/DP,pcm=3

Select the device event number [0-17]: 3

Input driver version is 1.0.1
Input device ID: bus 0x11 vendor 0x1 product 0x1 version 0xab54
Input device name: "AT Translated Set 2 keyboard"
Supported events:
...

Смотрим на список доступных устройств, выбираем <3>, оно там что-то пишет про что-т доступное и потом начинает ждать нажимания на кнопки. Нажимаем на эту дурацкую кнопку и получаем:

Properties:
Testing ... (interrupt to exit)
Event: time 1701374575.257013, type 4 (EV_MSC), code 4 (MSC_SCAN), value 56
Event: time 1701374575.257013, type 1 (EV_KEY), code 86 (KEY_102ND), value 1

И вот у нас уже есть всё что у нас есть!

Радостно бежим во вторую консоль (где открыт файл с будущими правилами) и горько плачем от осознания полного неосознания. Но правило надо всё же написать поэтому открываем консоль один и внимательно смотрим на то что на что мы смотреть не хотим. Но ищем там две вещи:
1. Зачем?
2. Почему?
3. За что?

Не найдя, смотрим на вообще формат и как заматчить нашу клавиатуру. Заматчить несложно, в начале этого файла есть:

#  - Input driver device name and DMI data match:
#      evdev:name:<input device name/>:dmi:bvn*:bvr*:bd*:svn:pn*
#    <input device name/> is the name device specified by the
#    driver, </vendor>

Формат файла тоже какое-то говно с оступом правила в один пробел от матча. Это зачем? Почему? За что? (Нашли!!!)

Ищем в этом же файле как называется кнопка которая нам нужна как результат, у меня это leftshift

Собираем наш увеселительный конструктор из запчастей разбросанных выше:

Input device ID: bus 0x11 vendor 0x1 product 0x1 version 0xab54
Input device name: "AT Translated Set 2 keyboard"

Event: time 1701374575.257013, type 4 (EV_MSC), code 4 (MSC_SCAN), value 56
Event: time 1701374575.257013, type 1 (EV_KEY), code 86 (KEY_102ND), value 1

Нам нужно имя устройства и значения первой строки где MSC_SCAN:

# @link https://hshhhhh.name/2023/12/01/4866/
# thinkpad t490s german keyaboard
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*
 KEYBOARD_KEY_56=leftshift # button on right of the left shift <> -- remap to left shift

Hint: оставляйте крайне избыточниые комментарии потому что в следущий раз вы сюда попадете лет через 6 и будете горько плакать, ибо линукс — это путь боли и отчаяния.

Чтош. Теперь сохраняем файл, идем в третью консоль и делаем там:

# systemd-hwdb update
# udevadm trigger
# udevadm info /dev/input/event3 | grep KEYBOARD_KEY
E: KEYBOARD_KEY_56=leftshift

# evtest 

...

Testing ... (interrupt to exit)

Event: time 1701378948.076153, type 4 (EV_MSC), code 4 (MSC_SCAN), value 56
Event: time 1701378948.076153, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1

Ура волшебство удача победа!

Но у вас наверняка возникнет вопрос что же делать если что-то не получается, а ведь как бы ну не может быть чтобы кто-то мог с первого раза угадать это волшебство.

У меня не получилось, могу порекомендовать вам горько поплакать! И писать десять тысяч разных тупых других комбинаций на другие любые кнопки постоянно пересоздавая hwdb binary db. Ничем не хочу вам помогать в данном случае! Вас все бросили! Вы наедине с собой! Подумайте, так ли вы хотите переопределять кнопки зачем вам это надо нормально же в целом!

Например, вы можете попробовать (у меня получмилось, но вы пробуйте! (я тоже буду в следущей части пробовать!)) использовать другой формат для матчинга:

# Supported hardware matches are:
#  - Generic input devices match:
#      evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
#    This matches on the kernel modalias of the input-device, mainly:
#    ZZZZ is the bus-id (see /usr/include/linux/input.h BUS_*), YYYY, XXXX and
#    WWWW are the 4-digit hex uppercase vendor, product and version ID and VVVV
#    is a variable-length input-modalias describing the device capabilities.
#    The vendor, product and version ID for a device node "eventX" is listed
#    in /sys/class/input/eventX/device/id.

Что, в теории, должно было бы собраться в такое вот правило (вывод evtest вам в помощь), но у меня не заработало:

# @link https://hshhhhh.name/2023/12/01/4866/
# Input device ID: bus 0x11 vendor 0x1 product 0x1 version 0xab54
# Input device name: "AT Translated Set 2 keyboard"
#
# thinkpad t490s german keyaboard
# evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*
evdev:input:b0011v0001p0001eab54*
 KEYBOARD_KEY_56=leftshift # button on right of the left shift <> -- remap to left shift

Больших слёз, боли и страдания!

#linux #udev #systemd #systemd-hwdb

2023.12.01 00:13