為什麼快捷鍵的執行順序很重要?
按住
Ctrl
它。然後,Alt
按住它。最後,按Delete
。如果您有 Ubuntu 系統(可能是任何基於 debian 的系統),您的會話很可能會被鎖定,因為您執行了Ctrl
++快捷方式。Alt``Delete
現在,
Delete
按住它。然後Ctrl
按住它。然後,按Alt
。鎖定會話快捷方式不會被觸發。為什麼會這樣?這個設置硬編碼在哪裡?
我的猜測:我的印像是快捷方式實際上是通過“擴展鍵盤鍵”來工作的。因此,選擇
Ctrl
或Alt
打開一個“新鍵盤”,您選擇了其中的鍵Delete
。但是,當您Delete
先選擇時,情況就不一樣了,它屬於物理鍵盤,而不是這個虛擬的擴展鍵盤。是這樣嗎?
因為在按鍵按下事件上執行了非修飾符操作。
這實際上與鍵盤硬體幾乎無關。USB 和 PS/2 鍵盤在這方面的操作相同。硬體中沒有任何東西使所謂的“修改鍵”特別。 除了一個例外,任何鍵都可以是修飾鍵,也可以不是。
決定什麼是修飾鍵的是作業系統軟體中使用的*鍵盤映射。*硬體只發送有效的內容(掩蓋 USB HID 輸入報告協議的細節實際上是目前按下的鍵的點陣圖,部分編碼為由內而外的形式以保持簡短)按鍵按下和按鍵按下事件。
例如,在 FreeBSD 鍵盤映射中,可以找到如下行:
# 一切 # 掃描 cntrl alt alt cntrl 鎖 # 程式碼庫 shift cntrl shift alt shift cntrl shift state # ------------------------------------------------------------------ … 第029章 … 042 lshift lshift lshift lshift lshift lshift lshift lshift lshift O … 054 rshift rshift rshift rshift rshift rshift rshift rshift O … 056 拉特拉特拉特拉特拉特拉特拉特拉特拉特奧特 … 第083章 '。' '。' '。' '。' 開機開機N …
029、042、054 和 056 是鍵盤程式碼(從 USB HID 使用編號和 PS/2 掃描程式碼編號正規化為通用系統)但映射中的
lctrl
、lshift
、rshift
和lalt
操作將這些鍵定義為修飾鍵。用不同的動作定義它們並將這些動作移動到其他地方,就像幾個開箱即用的 FreeBSD 映射一樣,並且完全不同的鍵是修飾符。(規則的例外是
Fn
key,它是在硬體中實現的一個修飾符。它完全在硬體中實現,根本不被軟體看到*。*它甚至不會通過線路生成任何事件。實際上還有另一個硬體修飾符也是。它不是鍵。它是 NumLock LED 的狀態。)action ,當它是像這樣的修飾符動作時,會改變目前的修飾符狀態,(簡單地說)是記錄在作業系統中的一組標誌,記錄了哪些修飾符目前“打開”。從鍵盤映射中的列標題可以看出,目前修飾符狀態——根據“shift”、“altgr”、“control”和“alt”狀態的“on”標誌——影響進一步按鍵映射到的操作.
在鍵碼 083 的行上,即刻
. del
在數字小鍵盤上的那個,您可以看到,只有目前修飾符狀態至少為“alt cntrl”時,映射的動作才會是boot
。鍵盤驅動程序在接收到按鍵或按鍵釋放事件時執行修改器操作。**但是,其他操作僅在按鍵或自動重複事件時生效。例如,動作就是這種情況。只有當按鍵 083 的按鍵或自動重複事件發生並且目前修飾符狀態已經是“alt cntrl”/“alt cntrl shift”時,才會發生操作。
boot``boot
從這裡應該很明顯,為了首先讓作業系統的目前修飾符狀態進入該狀態,
lalt
andlctrl
/rctrl
動作必須已經發生,首先按下碰巧映射到它們的鍵。(FreeBSD 的系統除了通常的修改器轉換系統外,還允許修改器鎖定,儘管只有兩個開箱即用的鍵盤映射完全使用它們。ISO 鍵盤標準也允許修改器鎖存器,但 FreeBSD不提供這種機制。)正如我所說,FreeBSD 就是一個例子。但是大多數帶有 PS/2 或 USB HID 設備的作業系統,從 MS/PC-DOS(目前修飾符狀態是記憶體中的一個眾所周知的字節)到 Windows NT(其中鍵盤映射是包含程式碼和數據的核心模式 DLL) ),大致以這種方式工作。
進一步閱讀
- Ubuntu 16.04 無法辨識 Fn 鍵
- [無法模擬 Ctrl+Shift+Fn+F10 按鍵](https://unix.stackexchange.com/a/331421/5132)
- 喬納森·德博因·波拉德。“鍵盤映射”。
console-fb-realizer
. nosh 工具集手冊頁。- 橫田和孝 (2008-01-29)。
atkbd
. FreeBSD 手冊頁。kbdmap
. §5。FreeBSD 手冊頁。