X11

如何將未充分利用的鍵盤鍵更改為修飾鍵

  • July 23, 2016

我有一個看起來像這樣的韓語鍵盤:

在此處輸入圖像描述

한자左側的漢字space _ 這將在我的程式碼編輯器中釋放出來使用。Alt

我的問題是:如何將漢字鍵變成修飾鍵?

我驗證了密鑰xev

KeyPress event, serial 32, synthetic NO, window 0x2200001,
   root 0x281, subw 0x0, time 11955968, (-132,626), root:(491,646),
   state 0x0, keycode 131 (keysym 0xff34, Hangul_Hanja), same_screen YES,
   XLookupString gives 0 bytes: 
   XmbLookupString gives 0 bytes: 
   XFilterEvent returns: False

KeyRelease event, serial 32, synthetic NO, window 0x2200001,
   root 0x281, subw 0x0, time 11955968, (-132,626), root:(491,646),
   state 0x20, keycode 131 (keysym 0xff34, Hangul_Hanja), same_screen YES,
   XLookupString gives 0 bytes: 
   XFilterEvent returns: False

鍵碼 131 = 0x83

從 的輸出中xmodmap,我看到這mod3是可用的。

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

我嘗試xmodmap -e "add mod3 = Hangul_Hanja"導致以下結果…

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Hangul_Hanja (0x83)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

…添加set $mod Mod3到我的 i3 配置文件並重新啟動後,我最終沒有任何修飾鍵,即它不起作用。

此外,漢字鍵的行為與典型的修飾鍵不同。如果我按住該鍵,它會創建重複的擊鍵,而典型的修飾鍵則不會。

我希望房子裡有一些鍵盤專家可以提供他們的一些專業知識。

Linux Mint 18 (Cinnamon) i3 視窗管理器

X11 修飾符處理有點奇怪。您不能使用任何鍵並將其聲明為修飾符:修飾符設置和鍵符設置之間必須保持一致。

經典的修飾符是Shift, Control, Alt, Meta, Hyperand Super(每個有兩個鍵符,例如Shift_LShift_R)(加上 Caps Lock 和 Num Lock ,它們的行為有些不同)。大多數應用程序不能與用作修飾符的其他鍵符一起使用。

因此,要將漢字鍵用作修飾符,請使其成為Hyper_L(例如)。

keycode 131 = Hyper_L
remove Mod4 = Hyper_L
add Mod3 = Hyper_L

這使得密鑰不再用作漢字密鑰。如果您使用 XKB 而不是 xmodmap,可能有一種方法可以保留這兩個功能,但我不知道如何。

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