web-dev-qa-db-ja.com

xmodmapキーバインディングが機能しない

Xmodmapを使用してドイツ語の糖尿病/ウムラウトをキーボードに追加しようとしていますが、Xmodmapはそれらを使用していません(ただし、他の再マッピングを使用しています)。

私はこのガイドに従っています: XのUSキーボードのドイツ語ウムラウト(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

あなたは押すことに注意するでしょう AltGrISO_Level3_Shiftとして解釈され、 x が押されると、keysym 0xd7, multiply、つまり×が表示されます。これは、の3番目のレベルとして設定されています。 x。そう AltGr 動作します。

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

しかし私が押すと o 3番目のレベルを設定したにもかかわらず、keysym 0x0, NoSymbolを取得します。

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

使おうとすると同じことが起こります AltGr +(a|u|s)。

Xmodmapは他の再マッピングで機能します

私の PgUp 私のラップトップのキーは小さいです、私は数字パッドを再マッピングしました + 私の~/.XmodmapのPageUpで、それは問題なく動作します。したがって、私のXModmapファイルは(部分的に)読み取られています。

O/a/uへの再割り当てが機能しないのはなぜですか?

UbuntuUnityで信頼できるUbuntu14.0.1を使用しています。

4
Rory

予備メモ: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を直接使用する方がよい場合があります( )。

1
vinc17

正しいAltキーをAlt Grとして機能させるには、行を追加して、Mode_switchではなくISO_Level3_Shiftにマップする必要があります。

keycode 108 = Mode_switch

to ~/.Xmodmap

keycode 108 = Mode_switch
keycode  38 = a A adiaeresis Adiaeresis
keycode  30 = u U udiaeresis Udiaeresis
keycode  32 = o O odiaeresis Odiaeresis
keycode  39 = s S ssharp

ドイツ語キーボードのキーにウムラウトが必要な場合は、次を使用します。

keycode 108 = Mode_switch
keycode 48 = apostrophe quotedbl adiaeresis Adiaeresis
keycode 47 = semicolon colon odiaeresis Odiaeresis
keycode 34 = bracketleft braceleft udiaeresis Udiaeresis
keycode 20 = minus underscore ssharp

(もちろん、それらを組み合わせることができます。)

0
Volker Siegel