LINUX.ORG.RU
ФорумAdmin

Нет клавиши SysReq

 sysreq


2

2

В общем старая клавиатура приказала долго жить, а на новой нет SysReq) Как-то не обратил на это внимание) Больше заботило как видны кириллические символы. Тут все отлично и даже ё есть)

Но как теперь вылезти из зависания?) Советы вроде PrintScrn не помогут. На PrintScrn нет функционала SysReq и даже там нет подписи SysReq. И потому и нет)

Можно как-то что-то переназначить?)

★★

Ответ на: комментарий от Nervous

А PrintScreen есть?

Да Есть. Написал об этом в описании проблемы. Не работает она как… Это совсем новая клавиатура с разными комбинациями. Например блокировки вообще всех кнопок. Ничего нет в инструкции о SysReq

mirek ★★
() автор топика
Ответ на: комментарий от vbcnthfkmnth123

Поискать на авито

Можно так Но не хоца Эта с подсветкой цветами радуги) Там менять можно режими гирлянды. Оно и удобно в темноте. Но вот SysReq тоже бы хотелось

mirek ★★
() автор топика

Ну использовать другую клавишу, назначив на неё функицю SysRq. Вроде как, можно написать udev-правило, но, это так себе вариант, по хорошему переопределить сканкод в исходниках ядра и скомпилить его.

mky ★★★★★
()
Ответ на: комментарий от firkax

Ну, ТС не озвучил модель клавы, может у него и super нету. Главное, ведь буква "Ё" и подсветка цветами радуги :)

Так, конечно, интерестно, чтобы ТС запустил в консоли keycode и сказал, какой код у него выдаёт PrtSc, если он как SysRq не работает.

mky ★★★★★
()
Ответ на: комментарий от mky

Там же не PrtSc а Alt-PrtSc. И обработка этой комбинации в контроллере клавы всегда вроде была, в проц приходит уже код SysRq.

У меня например PrtSc и SysRq отдельные, Pause и Break тоже отдельные.

А что за keycode, как оно называется точно?

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Не знаю, что делает sysrq и будет ли она работать, если её повесить на другую кнопку, но сделать это можно, так как в списке она имеется: https://hal.freedesktop.org/quirk/quirk-keymap-list.txt

Я вот здесь научился назначать всякое на кнопки клавиатуры:
https://askubuntu.com/questions/1019276/fake-key-code-for-remapped-keyboard-keys/1019659#1019659

papin-aziat ★★★★★
()
Ответ на: комментарий от firkax

showkey оно называется, маразм у меня, раз оно в консоль пишет keycode, почему-то подумал, что так и называется.

У меня на PrtSc выводится "keycode 99". А если нажать Alt+SysRq и отпустить не выбрав действие, то выводится, что был нажат Alt (keycode 56), нажат keycode 99, потом отжат 99 и отжат 56. Это ядро вызывает sysrq_reinject_alt_sysrq(), притворяется прозначным. Именно драйвер в ядре не пропускает дальше SysRq, если было выбрано какое-то действие.

Если смотреть в исходниках ядра, то:

file: include/uapi/linux/input-event-codes.h
#define KEY_SYSRQ               99

file: drivers/tty/sysrq.c
static bool sysrq_handle_keypress(struct sysrq_state *sysrq,
                                  unsigned int code, int value)
{
        switch (code) {

        case KEY_LEFTALT:
        case KEY_RIGHTALT:
....
        case KEY_SYSRQ:
                if (value == 1 && sysrq->alt != KEY_RESERVED) {
                        sysrq->active = true;
....

Я не знаю, что именно шлют разные клавиатуры на уровне скан-кодов, но ядро обрабатывает SysRq уже на уровне кодов клавиши (keycode). И через setkeycodes можно произвольную клавишу по сканкоду отмапить в SysRq. Но это, в лучше случае, можно сделать из initramfs, когда уже что-то загрузилось. А, чтобы ядро с самого начала принимало другую клавишу — только править исходники.

mky ★★★★★
()
Ответ на: комментарий от utanho

Может быть стоит решать проблему, а не бороться с последствиями?

Иногда зависает при переходе в спящий режим из-за nVidia - драйвера какие угодно и т.п.ставил не лечится оно никак

Зависает 1 раз на неск. десятков уходов в сон. Тут можно гадать на костях - системы в этом нет)

mirek ★★
() автор топика
Ответ на: комментарий от papin-aziat

Я вот здесь научился назначать всякое на кнопки клавиатуры:

Это вряд ли в этом случае поможет. Когда система повисла висит и клавиатура.То есть всякие там ctrl+alt+backspace - перезагрузка оконного менеджера на этом этапе уже не сработают

На этом этапе когда висит и клавиатура ее надо отнять у Гнома, а сделать это можно только через SysReq

Клавиатура висит так как Caps lock и Num Lock на этом этапе уже не изменяют положение индикаторов

mirek ★★
() автор топика
Ответ на: комментарий от mirek

То есть клавиша SysReq генерирует что-то отличное от остальных клавиш?

Система после загрузки будет считать эту клавишу клавишей SysReq, как в гуях, так и в виртуальной консоли, так что стоит попробовать, мне кажется.

papin-aziat ★★★★★
()
Ответ на: комментарий от papin-aziat

То есть клавиша SysReq генерирует что-то отличное от остальных клавиш?

SysReq прописана в ядре и доходит до его аварийной части не зависимо от Гнома

То есть пробовать идти по пути переназначения это минимальные шансы на успех

Тут я сейчас вижу 3 варианта:

1 Перекомпиляция ядра

2 Скрипт который определив что Гном висит корректно выключает комп. Как в Вин синий экран. Реально такое найти/сделать?

  1. Покупка новой клавы) Но тут не исключено, что снова что-то не срабатывает… Или нет Ё) Так что…
mirek ★★
() автор топика
Последнее исправление: mirek (всего исправлений: 1)
Ответ на: комментарий от mirek

SysReq прописана в ядре и доходит до его аварийной части не зависимо от Гнома

Не понимаю, почему ты всё время говоришь про гном, ведь предложенный метод переназначения низкоуровневый и с гномом никак не связан, то есть, если клава с реальным SysReq может дозвониться до ядра при зависшем гноме, то почему не может назначенный SysReq? Как я понял, ядру передаётся нужный сканкод или типа того, а чем он был сгенерирован разве имеет значение? Или реальная клавиша SysReq прямо в каком-то привелегированном неповторимом положении?

А ты можешь подвесить гоном и проверить (прям интересно)?

papin-aziat ★★★★★
()
Ответ на: комментарий от mirek

Давайте ещё раз. Запускаете showkey, зажимаете правый (56) или левый (100) Alt. Выводится ″keycode 56 press″ (или 100), если там автопровтор, то это строка может много раз выводится, пока клавиша нажата, но ″keycode 56 release″ выводится не должно.

И в это состоянии нажимаете PrtSc, ничего на экран вывестесь не должно. Если у вас на экране выведится: <code> keycode 56 press keycode 99 press </code> получается на уровне ядра обработка SysRq отключена.

А если в зажали Alt, нажали PrtSc, потом отпустили Alt и на экран вывелось (в последних строках): <code> keycode 56 press keycode 56 release keycode 56 press keycode 99 press keycode 99 release keycode 56 release </code> значит обработка в ядре SysRq работает, команду (h, t, r и т.д.) не получило, пропустило все нажатые клавиши без обработки.

P.S. Надеюсь, вы в курсе «безпоследственных» команд SysRq и проверяете ими, а не пытаетесь перегружать систему для проверки. Допустим, нажимаете и удерживаете ″Alt″, потом нажимамете не удерживая ″PrnSc″, потом ″h″. Получаете в системную консоль или в dmesg справку/посказку по командам SysRq. То есть нажали, а потом смотрите ″dmesg -T | tail″ появилась на текущее время строка: ″sysrq: HELP :...″ или нет.

mky ★★★★★
()
Последнее исправление: mky (всего исправлений: 1)

Вы знаете, я сейчас обнаружил смешную вещь. Никакой клавиши Print Sreen в linux вообще не существует. Это просто надпись такая на кнопке KEY_SYSRQ. То есть достаточно повесить этикетку PrSc/SysRq на Вашу кнопку - и всё готово!
В доказательство - попробуйте найти здесь аппаратный код (KEYCODE) клавиши Print Sreen (если она всё таки существует): https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h

Думаю, на этом тему можно закроывать как «решённую» :)

PeleWin
()
Ответ на: комментарий от papin-aziat

ты можешь подвесить гоном и проверить (прям интересно)?

Главное зачем это надо) затем что в случае некорректного отключения диски проверять целый час) Их в системе больше 5

Проверять не стану Но к сведению принял, что предложенный способ низкоуровневый

mirek ★★
() автор топика
Ответ на: комментарий от mirek

Видимо, не восприняли всерьёз моё сообщение. Истинно вам говорю: кнопки PrSc и SysRq не различаются, это одна кнопка.
Может быть что у Вас не работает она, верю, но причина в чём-то другом.

PeleWin
()

Прочитайте внимательно https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html , потратьте 10 минут. Тут:

  • и про то что PrSc=SyRq
  • и про то, как включить отдельные функции записью числа в /proc/sys/kernel/sysrq (reboot скорее всего НЕ включен по умолчанию)
  • и про все возможные команды и комбинации на клавиатуре
  • и про то, что делать, если ни PrSc ни SyRq вообще нет на клавиатуре.

У меня, кстати, такая же клавиатура (Havit-KB885L), с RGB-подсветкой и клавишей PrSс на кнопке 0. И я проверил - всё работает :)

PeleWin
()