Keyboard-Shortcuts

Sun Type 7 鍵盤 + KDE 快捷鍵:為什麼控制中心忽略了左側邊緣的大部分功能鍵?

  • August 2, 2021

我最近為我的 OpenSuSE 15.2 配備了 KDE 5 和 Sun Type 7 鍵盤,現在想使用其左側邊緣的功能鍵來實現各種系統範圍的快捷方式。唯一的問題是,在 KDE 控制中心的快捷方式列表中,其中一些鍵被簡單地忽略了:

快捷鍵選擇器

Help、Cut、Copy、Paste 和 Open 鍵被辨識為這樣,而 Cancel、Redo、Undo、Properties、Foreground 和 Find 不是,我不知道為什麼。它們都發出自己的掃描碼,並將xkb它們映射到相應的鍵符號。例如,以下是 Properties 鍵發出的內容(來自 的輸出xev):

KeyPress event, serial 40, synthetic NO, window 0x7800001,
   root 0x561, subw 0x0, time 3103717, (-256,541), root:(1374,570),
   state 0x10, keycode 138 (keysym 0x1005ff70, SunProps), same_screen YES,
   XLookupString gives 0 bytes: 
   XmbLookupString gives 0 bytes: 
   XFilterEvent returns: False

這些鑰匙有什麼問題?這是我的xkb配置供您參考:

╭─jacek@epica ~  
╰─➤  setxkbmap -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc102
layout:     de
variant:    pl
options:    terminate:ctrl_alt_bksp,altwin:meta_win,lv3:ralt_switch,compose:menu
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwertz)
types:      complete
compat:     complete
symbols:    pc+de(pl)+inet(evdev)+terminate(ctrl_alt_bksp)+altwin(meta_win)+level3(ralt_switch)+compose(menu)+terminate(ctrl_alt_bksp)
geometry:   pc(pc102)

**更新:**我查看了目前xkb配置,發現在symbols/inet文件中,有一個完整的塊專門用於專有的 Sun Type 6/7 功能鍵:

partial alphanumeric_keys
xkb_symbols "evdev" {
   key <MUTE>   {      [ XF86AudioMute         ]       };
   key <VOL->   {      [ XF86AudioLowerVolume  ]       };
   key <VOL+>   {      [ XF86AudioRaiseVolume  ]       };
   key <POWR>   {      [ XF86PowerOff          ]       };
   key <STOP>   {      [ Cancel                ]       }; // KDE ignores me!
   key <AGAI>   {      [ Redo                  ]       }; // KDE ignores me!
   key <PROP>   {      [ SunProps              ]       }; // KDE ignores me!
   key <UNDO>   {      [ Undo                  ]       }; // KDE ignores me!
   key <FRNT>   {      [ SunFront              ]       }; // KDE ignores me!
   key <COPY>   {      [ XF86Copy              ]       };
   key <OPEN>   {      [ XF86Open              ]       };
   key <PAST>   {      [ XF86Paste             ]       };
   key <FIND>   {      [ Find                  ]       };
   key <CUT>    {      [ XF86Cut               ]       };
   key <HELP>   {      [ Help                  ]       };
   key <LNFD>   {      [ Linefeed              ]       };
};

這意味著鍵碼和符號以xkb正確的方式註冊,但不幸的是,它是 KDE 的控制中心,它忽略了 Sun 特定的鍵符(參見上面的註釋)。這是否意味著我必須向 KDE 人員送出一張票?

在收到一些好的提示(謝謝!)後,我發現是文件Evdev Standardized Keycodes部分中的關鍵符號symbols/inet導致 KDE 出現問題:大多數以 開頭的符號XF86在某些情況下會被 KDE 忽略神秘的原因(可能是一個錯誤?),所以我只是用一些已經存在的 XF86 鍵符號替換它們,這最適合我的需要。例如,我將鍵碼Cancel的鍵符替換為. 然後,該鍵被 KDE 的熱鍵定義對話框辨識。<STOP>``XF86Stop

Sun 7 鍵盤預設提供兩個選項

  • 預設的 Sun 7 映射使用您發現 KDE 和 Gnome 都無法辨識的鍵綁定Cancel Redo SunProps Undo SunFront
  • suncompat選項將所有左鍵綁定到功能鍵,但與頂行功能鍵重疊,並綁定XF86AudioMute XF86AudioLowerVolume XF86AudioRaiseVolume XF86PowerOff到前綴為SunKDE 和 Gnome 均不辨識的符號。

因此,這兩種預設配置都以不同的方式存在缺陷。對此有 3 種可能的修復方法:

  • 用於xmodmap正確重新映射鍵,但這已經過時並且被 KDE / Gnome 中的多個東西踩到了
  • 創建一個正確的新 xkb 綁定並將其作為錯誤更新檔送出(我一直打算這樣做但還沒有解決它 - 可能很快,如果我這樣做,我會在這裡更新內容)
  • 為 KDE 和 Gnome 送出錯誤報告以辨識失去的符號

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