setxbdmapを使用してメニューキーをAltキーにマッピングする

setxbdmapを使用してメニューキーをAltキーにマッピングする

Xubuntu 14.04を実行しているAsus X551Mで、次のキーボード設定を設定したいと思います。

スペースバーのすぐ隣の修飾子キーペアはコントロールにマップされます。次に、最も近いペアがにマッピングされますAlt

つまり、私のキーボードの一番下の行は次のようになります。

[ctrl] [fn] [win] [alt] [    space    ] [alt] [menu] [ctrl]

そして私はそのロジックが次のように動作したいと思います:

[ctrl] [fn] [alt] [ctrl] [    space    ] [ctrl] [alt] [ctrl]

(私は最も外側のCtrlキーペアを使用しないので、マッピングはランダムです。)

過去にxmodmapファイルを手動で編集してこれを実行しましたが、最初の試みでは機能しませんでした。また、xmodmapロード時に構成ファイルがロックされる現象が既知の問題です。このトピックについて私が読んだすべてのコンテンツには廃止xmodmapされ、使用する必要があることが示されていますsetxbdmap

だから最初に次のことを試してみてください。

setxbdmap -option altwin:ctrl_alt_win

これはほぼ完璧に動作します。今私のキーボードロジックは次のようになります。

[ctrl] [fn] [alt] [ctrl] [    space    ] [ctrl] [menu] [ctrl]

Menuつまり、キーをにマッピングするだけですAlt。を使用してこれを行う方法はありますかsetxbdmap

/usr/share/X11/xbd/rules/evdev.lst次に、次の行が見つかるまで見てください。

altwin:menu     Add the standard behavior to Menu key

そして試してみましたが、何の違いもないようです。オプションがあります:

ctrl:menu_rctrl   Menu as Right Ctrl

もちろん、これが代わりにマッピングされることを除いて、これは私が望むものですMenuCtrlそれではAltこれを行う方法はありますかsetxbdmap

答え1

次の内容でファイルを作成できます~/.xkb/symbols/local

xkb_symbols "local" {
    key <LWIN> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <MENU> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <LALT> {         [       Control_L ] };
    key <RALT> {         [       Control_R ] };
};

または

xkb_symbols "local" {
    key <LWIN> {
        type= "ONE_LEVEL",
        symbols[Group1]= [            Alt_L ]
    };
    key <MENU> {
        type= "ONE_LEVEL",
        symbols[Group1]= [            Alt_R ]
    };
    key <LALT> {         [       Control_L ] };
    key <RALT> {         [       Control_R ] };
};

(またはその間のもの)、あなたが望むAltの種類によって異なります。 Xを起動するたびに、次の手順を実行します(たとえば、ファイルが~/.xsessionある場合はファイル内)。

mkdir -p .xkb/keymap
setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' > $HOME/.xkb/keymap/custom
xkbcomp -w0 -I$HOME/.xkb -R$HOME/.xkb keymap/custom $DISPLAY

2行目は、when(3行目)がこのオプションで使用される~/.xkb/keymap場合をxkb_symbols { include "...+local" };含むファイルを生成します。このファイルを実行する前に確認できます。~/.xkb/symbols/localxkbcomp-I$HOME/.xkbxkbcomp

まだ完全に試していませんが、これは私がやっていることに基づいています。https://www.vinc17.net/unix/xkb.htmltypes目次なし)。

関連情報