xmodmap 問題和每個鍵超過 4 個替代符號的不一致
我試圖讓我的鍵盤更有用,並用於
xmodmap
將數學和希臘符號映射到mod3
修飾符級別。大寫鎖定映射到mod3
. 據我了解,工作中的 8 行.Xmodmap
如下:$$ nothing $$,$$ shift $$,$$ mod3 $$,$$ mod3+shift $$,$$ altgr $$,$$ altgr+shift $$,$$ altgr+mod3 $$,$$ altgr+shift+mod3 $$ 我用過這個,它大部分都有效。除了一些奇怪的現象。例如:
keycode 49 = backslash bar includes includedin infinity infinity EuroSign EuroSign
這很好地產生了前四個條目,但隨後它會循環(altgr+key=backshlash,而不是無窮大)。但是,如果我這樣做
keycode 10 = backslash bar includes includedin infinity infinity EuroSign EuroSign
它產生前四個條目和
includes
無窮大,但沒有顯示歐元符號(我得到includedin
了)。請注意,我只是使用了不同的密鑰,其他一切都是一樣的!即使只有 6 個條目(如果 8 個條目存在解析問題),該特定鍵上也不會顯示無窮大。此外,我將希臘字母映射到第 3 和第 4 個條目(mod3 和 mod3+shift)。小寫字母可以正常工作,但大寫字母不適用於 Shift+mod3+S 和 Shift+mod3+W 和 Shift+mod3+X。這不是字型問題,當我使用這些組合時
xev
不顯示任何事件。條目是
keycode 39 = s S Greek_sigma Greek_SIGMA integral integral downarrow downarrow
此外,最後兩個條目大多不起作用。
更糟糕的是,一行會變得特別混亂。我進入了
keycode 51 = zcaron Zcaron zcaron Zcaron dstroke Dstroke dstroke Dstroke
但是當我這樣做
xmodmap -pke
時keycode 51 = zcaron Zcaron zcaron Zcaron dstroke Dstroke dstroke Dstroke zcaron Zcaron dstroke Dstroke zcaron Zcaron dstroke Dstroke
請注意,它複製了所有條目。幾個鍵可以做到這一點,但不是全部!
所以,我的問題是:
- 我是否正確使用了 8 行?
- 為什麼我在不同的鍵碼上得到不同數量的工作鍵符?
- 視窗管理器中的某些東西是否有可能映射這些組合併吞下它們?
- 為什麼有些行在應用時會重複?
- 這是一個不起眼的 xlib 錯誤嗎?
- 修改器功能是否受限?
請注意,我處於一種獨特的情況,根本不可能有任何我不知道的未知快捷方式,因為我的視窗管理器是我自己製作的,我控制著所有這些快捷方式。
更多細節:大寫鎖定的映射是這樣完成的:
keycode 66 = Mode_switch clear lock clear control clear mod1 clear mod2 clear mod3 clear mod4 clear mod5 add control = Control_L Control_R add mod1 = Alt_L Meta_L add mod2 = Num_Lock add mod3 = Mode_switch add mod4 = Super_L Super_R Hyper_L add mod5 = ISO_Level3_Shift
該系統是一個新更新的arch linux。
編輯:我發現問題的一小部分(根本不起作用的 SWX)是由於鍵盤上的鍵相鄰(鍵卡,無法處理此組合中的 3 個同時按下的鍵) . 右移消除了 W 和 X 的問題,但沒有消除 S 的問題(在這個特定的鍵盤上)。
其餘的仍然是個謎,尤其是鍵碼 49 的第 5 和第 6 項損壞(選項卡上方完全沒用的東西)。
我最好回答我自己的問題以供將來參考。
經過一些深入的研究,我發現它
xmodmap
實際上已被棄用,並且大致修補了xkb
鍵盤模型。該xkb
模型不使用備選方案的線性數組,而是將佈局拆分為groups
,每組具有不同班次級別的幾個字元。定義以非常有趣的xmodmap
順序填充條目:第 1 組、第 1,2 級、第 2 組、第 1,2 級、第 1 組、第 3 級….通常使用修飾符但通過切換訪問。例外是Mode_switch
我使用的字元,但它只訪問組 2。這一切都很好,除了鍵有 types。每個鍵都由佈局定義為
TWO_LEVEL
、等FOUR_LEVEL
,FOUR_LEVEL_ALPHANUMERIC
並且每個級別可以有不同的概念,即哪些修飾符映射到哪些級別。我假設的行為(8 個級別,所有組合)實際上LOCAL_EIGHT_LEVEL
根本沒有被佈局使用。因此,在 keycode 的情況下51
,預設值實際上是TWO_LEVEL
,並xmodmap
用 6 個鍵填充 3 組,而不是在第 1 組中添加 6 個級別。Mode_switch
修改器未到達第 3 組。使用另一個鍵會導致不同的行為,因為預定義的類型不同。與列印輸出中的重複一樣
xmodmap
,我不確定會發生什麼(我列印了xkb
定義,一切都很好),但是當您從可變長度多維數組映射到單個數組時發生錯誤我並不感到驚訝符號程式碼列表。無論如何,輸出都不能反映實際狀態。總之,xmodmap 是邪惡的。永遠不要使用它。它的行為是不穩定的,充其量是不明確的。它沒有按照它所說的去做。製作自己的
xkb
地圖。通過 -ing 重用大部分佈局include
並添加您需要的修改。就我而言,解決方案是從希臘佈局中推導出第二組,並在戰略位置替換數學符號,並在第一組中進行一些修改。
大多數便宜的鍵盤在一次按下 3 個鍵時非常有限。這導致某些鍵出現不穩定且依賴於硬體的故障。我將嘗試使用不同的修飾鍵(世界上最沒用的鍵 - 菜單鍵,或類似無用的右 win 鍵),並可能購買更好的鍵盤。這兩個問題(設計破壞的硬體 + 邪惡的欺騙性軟體)的結合創造了一個令人困惑的隨機情況,起初讓我無法將它們視為單獨的問題。
閱讀材料: