Xorg

xmodmap 問題和每個鍵超過 4 個替代符號的不一致

  • August 24, 2021

我試圖讓我的鍵盤更有用,並用於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+m​​od3+S 和 Shift+m​​od3+W 和 Shift+m​​od3+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_LEVELFOUR_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 鍵),並可能購買更好的鍵盤。這兩個問題(設計破壞的硬體 + 邪惡的欺騙性軟體)的結合創造了一個令人困惑的隨機情況,起初讓我無法將它們視為單獨的問題。


閱讀材料:

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