Linux

為什麼 Alt+SysRq+B 並不總是觸發而 REISU 觸發?

  • July 12, 2014

在許多不同的機器上,當我遇到當機時,我經常使用Alt++SysRqREISUB重新啟動而不會造成太大損失。但是我經常注意到,雖然REISU我只是按住Alt+SysRq並輸入它們而不釋放Alt+的命令仍然有效SysRq,但最後一個 ,B似乎很“懶惰”:我必須重複多次,實際上它不會觸發直到我多次循環“按Alt+ SysRq,鍵入B,釋放Alt+ ”(並且並不總是相同的次數)。SysRq

在第一次出現這個問題時,我認為它的核心鎖定得太厲害以至於它沒有“看到”我的B命令,但是當我意識到它的多次重複確實允許我觸發重啟時,現在看來它是一般的東西. 即使在一個工作系統上(無論是 Debian、Ubuntu、LFS 等),我也可以輕鬆地重現這一點。事實上,我什至可以init=/bin/bash從這個 bash 提示符載入核心並重現它。

查看串列控制台輸出,我看到所有關於 的回饋REISU,但只有一個回饋列印在多個B命令上——當核心最終被說服重新啟動時。

為什麼是這樣?它是防止意外重置的一些核心功能,還是只是一個錯誤(很奇怪)?

請注意,我使用的是沒有Fn鍵或多媒體鍵的普通鍵盤,所以這個問題不是這個問題的重複

問題不在於軟體,而在於硬體。鍵盤按鍵不是獨立的:大約有 100 個按鍵,但只有大約 26 根電線進入鍵盤的內部控制器:

在此處輸入圖像描述

(圖片來自dreamtime.com

這意味著當同時按下時,並非所有鍵都可以被檢測到。因為比RAlt更接近,所以我總是用它來騰出一隻手來輸入字元。但似乎在大多數(全部?)PC鍵盤上++不發送掃描碼!*SysRq``LAlt``RAlt``SysRq``B``B

為什麼我最終會重新啟動?很簡單:當我對無法使用這個半工作命令重新啟動機器感到非常惱火時,我會在沒有過多注意的情況下多次按下組合鍵,有時會混合按下和釋放鍵 - 似乎SysRq不是linux 的普通修飾符,例如Alt:magic-SysRq 模式即使在我釋放SysRq但仍然持有之後仍處於活動狀態Alt。然後似乎有效的順序是:

  • RAlt
  • SysRq
  • 釋放SysRq
  • B
  • 見重啟

因為LAlt事情看起來要簡單得多:鍵盤能夠檢測到B何時LAlt按住 + SysRq,所以沒有問題,但我以前從未註意到它,因為我一直使用RAlt.

有趣的是,這個問題似乎早已為人所知,解決方法與我根據經驗發現的相同。從核心原始碼樹,Documentation/sysrq.txt(強調我的):

在 x86 上 - 您按下組合鍵“ALT-SysRq-<command key>”。注 - 某些鍵盤可能沒有標有“SysRq”的鍵。“SysRq”鍵也稱為“Print Screen”鍵。此外,有些鍵槃無法同時處理這麼多按鍵,因此您可能會更好地使用“按 Alt”、“按 SysRq”、“釋放 SysRq”、“按 <command key>”,釋放所有內容。

所以,看起來這個技巧是官方推薦的,而不是實施時不可靠的副作用。

*我實際上用一個簡單的 DOS 程序檢查了這一點,它報告 i8042 在每個 IRQ1 上給出的每個掃描程式碼

引用自:https://unix.stackexchange.com/questions/143935