Ubuntu

xmodmap 鍵綁定不起作用

  • April 18, 2015

我正在嘗試使用 Xmodmap 在我的鍵盤上添加一些德語變音符號/變音符號,但 Xmodmap 無法與它們一起使用(但與其他重新映射一起使用)。

我正在關注本指南:X (Ubuntu 10.04) 中美國鍵盤上的德語變音符號

Xmodmap

我已將此添加到我的~/.Xmodmap

keysym a = a A adiaeresis Adiaeresis
keysym o = o O odiaeresis Odiaeresis
keysym u = u U udiaeresis Udiaeresis
keysym s = s S ssharp ssharp

xev

但是它不起作用。這是xev我按下o、按住AltGr、按下o、按下時的輸出x

KeyPress event, serial 34, synthetic NO, window 0x4e00001,
   root 0x8e, subw 0x0, time 642618, (108,138), root:(173,190),
   state 0x10, keycode 32 (keysym 0x6f, o), same_screen YES,
   XLookupString gives 1 bytes: (6f) "o"
   XmbLookupString gives 1 bytes: (6f) "o"
   XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
   root 0x8e, subw 0x0, time 642644, (108,138), root:(173,190),
   state 0x10, keycode 32 (keysym 0x6f, o), same_screen YES,
   XLookupString gives 1 bytes: (6f) "o"
   XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
   root 0x8e, subw 0x0, time 643792, (108,138), root:(173,190),
   state 0x10, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
   XKeysymToKeycode returns keycode: 92
   XLookupString gives 0 bytes: 
   XmbLookupString gives 0 bytes: 
   XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
   root 0x8e, subw 0x0, time 645365, (108,138), root:(173,190),
   state 0x90, keycode 32 (keysym 0x0, NoSymbol), same_screen YES,
   XLookupString gives 0 bytes: 
   XmbLookupString gives 0 bytes: 
   XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
   root 0x8e, subw 0x0, time 645409, (108,138), root:(173,190),
   state 0x90, keycode 32 (keysym 0x0, NoSymbol), same_screen YES,
   XLookupString gives 0 bytes: 
   XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
   root 0x8e, subw 0x0, time 647660, (108,138), root:(173,190),
   state 0x90, keycode 53 (keysym 0xd7, multiply), same_screen YES,
   XLookupString gives 2 bytes: (c3 97) "×"
   XmbLookupString gives 2 bytes: (c3 97) "×"
   XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
   root 0x8e, subw 0x0, time 647722, (108,138), root:(173,190),
   state 0x90, keycode 53 (keysym 0xd7, multiply), same_screen YES,
   XLookupString gives 2 bytes: (c3 97) "×"
   XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
   root 0x8e, subw 0x0, time 650223, (108,138), root:(173,190),
   state 0x90, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
   XKeysymToKeycode returns keycode: 92
   XLookupString gives 0 bytes: 
   XFilterEvent returns: False

你會注意到 pressAltGr被解釋為ISO_Level3_Shift,當它x被按下時,我得到keysym 0xd7, multiply, ie ×,它被設置為我的第三級x。所以AltGr有效。

$ xmodmap -pke | grep 53
keycode  53 = x X x X multiply approximate

但是,當我按下時,o我得到keysym 0x0, NoSymbol了,儘管我設置了第 3 級:

$ xmodmap -pke | grep 32
keycode  32 = o O odiaeresis Odiaeresis

當我嘗試使用AltGr+ ( a| u| s) 時也會發生同樣的事情。

Xmodmap 適用於其他重映射

由於我PgUp筆記型電腦上的鑰匙很小,我已將數字鍵盤重新映射+到我的 Page Up 中~/.Xmodmap,並且效果很好。所以我的 XModmap 文件正在(部分)讀取。

為什麼我對 o/a/u 的重新分配不起作用?

我在 Ubuntu Unity 中使用 Ubuntu 14.0.1 trusty。

初步說明:似乎xmodmap最近發生了變化;舊設置將不起作用。

對於您的情況,請查看鍵碼 53(6 個值:)的值的數量x X x X multiply approximate,它可以工作,而對於鍵碼 32(4 個值:)o O odiaeresis Odiaeresis,它不起作用。

ISO_Level3_Shift將選擇第 5 個或第 6 個值,但在您的情況下,它們未設置為鍵碼 32。因此keysym 0x0, NoSymbol結果。

你需要的是:

keysym a = a A a A adiaeresis Adiaeresis
keysym o = o O o O odiaeresis Odiaeresis
keysym u = u U u U udiaeresis Udiaeresis
keysym s = s S s S ssharp ssharp

但是直接使用 XKB 可能會更好(範例)。

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