Ubuntu + PrtSc + AltGr = CRASH

На Ubuntu 15.10 и 15.04 на Lenovo t440p, когда я пишу код в Netbeans и случайно нажимаю кнопки AltGr и PrtSc, в то же время происходит сбой и перезагрузка системы. Это не действие со свежей установленной Ubuntu.

Это след из системного журнала:

Feb  5 19:47:43 mycomputername kernel: [   15.485327] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb  5 19:47:44 mycomputername kernel: [   16.966879] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb  5 19:47:44 mycomputername kernel: [   17.115697] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb  5 19:47:44 mycomputername kernel: [   17.115844] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb  5 19:47:45 mycomputername kernel: [   17.644247] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb  5 19:47:45 mycomputername kernel: [   17.829425] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb  5 19:47:46 mycomputername kernel: [   18.698713] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb  5 19:47:47 mycomputername kernel: [   20.033534] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb  5 19:47:48 mycomputername kernel: [   21.061323] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)

Как отключить PrtSc или предотвратить случайный щелчок PrintScreen на клавиатуре Lenovo? Или в чем проблема на этой трассировке?

Спасибо

1 ответ

Решение

Эта проблема:

На вашей клавиатуре экран печати (PrtSc) и системный запрос (SysRq) находятся на одной физической кнопке, как и в большинстве известных мне макетов.

Комбинации клавиш Alt+SysRq+[SPECIFIC LETTER] обычно называются Magic SysRq Commands, которые напрямую отправляют команды ядру.

В основном они используются в качестве более безопасной альтернативы "холодному" сбросу, если система полностью отказала, поскольку, например, есть команды для синхронизации и размонтирования файловой системы, чтобы предотвратить повреждение и повреждение данных, а также для сброса / перезагрузки (если вы нажмете B как 3-й ключ) или выключите питание (3-й ключ O). Дополнительную информацию и полный список комбинаций, даже в отношении различных раскладок клавиатуры, можно найти в соответствующей статье Википедии Magic SysRq Key.

Поэтому вы случайно отправляете ядру команду на перезагрузку, и это то, что он делает.


Решение:

В зависимости от того, как ваше ядро ​​было скомпилировано, вы можете указать, какие команды SysRq должно прослушивать ядро ​​во время работы системы. Я только что проверил это на 15.10 с ядром 4.2.0-27-generic и это сработало, но было бы неплохо узнать с каких пор или для каких ядер это включено. Пожалуйста, прокомментируйте, если знаете.

  • Узнайте текущее значение фильтра команды SysRq:

    Мы можем узнать, какие команды SysRq в настоящее время включены, проверив содержимое виртуального файла. /proc/sys/kernel/sysrq:

    cat /proc/sys/kernel/sysrq
    

    Результатом будет число, которое должно интерпретироваться следующим образом:

    0 - disable SysRq
    1 - enable SysRq completely
    >1 - bitmask of enabled SysRq functions:
        2 - control of console logging level
        4 - control of keyboard (SAK, unraw)
        8 - debugging dumps of processes etc.
        16 - sync command
        32 - remount read-only
        64 - signalling of processes (term, kill, oom-kill)
        128 - reboot/poweroff
        256 - nicing of all RT tasks
    

    Мое значение по умолчанию, когда я нахожусь на рабочем столе 176, который 128+32+16, Таким образом, согласно приведенной выше таблице, я могу перезагружать, выключать, синхронизировать и перемонтировать файловые системы только для чтения.

  • Отключите все команды SysRq:

    Выполните приведенную ниже команду и попробуйте, будут ли после этого работать ярлыки SysRq (например, Alt+SysRq+B для сброса / перезагрузки):

    echo 0 | sudo tee /proc/sys/kernel/sysrq
    

    Это должно отключить все команды SysRq для текущего сеанса до следующей перезагрузки.

  • Включите все команды SysRq:

    Чтобы вручную включить все командыSysRq, мы записываем значение 1 вместо этого в тот же виртуальный файл:

    echo 1 | sudo tee /proc/sys/kernel/sysrq
    
  • Включить предыдущий фильтр команд SysRq по умолчанию:

    Вы восстанавливаете конфигурацию по умолчанию либо перезагрузкой, либо, если вы проверили и запомнили значение перед его настройкой, вы можете установить это значение снова вместо 0/1 включить / отключить все команды.

    Так что в моем случае, где первоначальное значение было 176Я бы побежал:

    echo 176 | sudo tee /proc/sys/kernel/sysrq
    
Другие вопросы по тегам