X11のAltキーに他の修飾子をどのように割り当てますか?

X11のAltキーに他の修飾子をどのように割り当てますか?

目的:

CapsLockキーにAltを割り当て、AltキーにMetaを割り当てたいです。ただし、この場合、AltキーはもうAltキーとして認識されず、CapsLockキーもCapsLockキーとして認識されなくなります。

SUSE 11.4を開く

前に:

openSUSE 11.1 - 私は私のコンピュータの唯一のユーザーなので、/usr/share/X11/xkb/keycodes/xfree86ファイルを「単純に」編集し、問題なく動作しました。キーは最低レベルのシンボルにリンクされます。

質問:

  1. xkb

    私は(テストのために)次の項目で構成されるポーランドのレイアウト(pl_ext)のバリエーションを作成しました。

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    

    しかし、これはまったく効果がありません。 xevのCapsLockキーはAlt_Lとして認識(シンボル化)されますが、CapsLockキーを押すとCapsLockのように動作します(たとえば、メニューにファイルがあると仮定すると、Alt + Fを押すとこのメニューが開きますが、そうではありません)。

    質問:CapsLockキーをAltに設定し、AltキーをMetaに設定するには、レイアウトファイルをどのように定義しますか?

    編集する:これは戦闘の半分です!今、次の項目があります。

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { <CAPS> }; // this is a difference
    

    これは期待どおりに機能します。以下は行われません。

    key <LALT> { [ Meta_L ] } ;
    key <RALT> { [ Meta_R ] } ;
    modifier_map Mod5 { <LALT>,<RALT> };
    

    Alt キーは xev で Meta として認識されますが、まだ Alt+F を使用してメニューを開いてウィンドウを切り替えることはできますが、そうしないでください。一方、国の文字は入力できませんが、入力する必要があります。

  2. 自由 86

    しかし、今は動作しません。 xfree86の代わりに別のファイルテーブルを読むようです。

    質問:システム(X / Gnome)がどのキーマップファイルを使用しているのか、どうすればわかりますか?

    編集する:私に最適なオプションであるキーコードテーブルの編集が修正されました。マシアスの答え

  3. xmodmap

    これは戦闘の半分です。この部分は期待どおりに機能します。

    ロックを削除 = Caps_Lock キーシップ Caps_Lock = Alt_L

    Altにマップされた実際のCapsLockキーがあります。しかし、これは:

    キー記号 Alt_L = Meta_L

    ...奇妙なことをしました。 xevは、AltキーがMetaにマップされていることを示しますが、Alt + F(Meta + Fにマップする必要があります - >何もしません)を押すと、ファイルメニューが開きます。さらに、Alt+Tab キーを押すと、ウィンドウ スイッチャーが表示されます。

    質問:Altキーの以前の動作を「削除」する方法は?

    編集する:この部分の解決方法はザイルズの答え

要約:

どんな質問にも答えると、私の問題は(希望的に)解決されますが、xkbのすべてのファイルをパッケージ化して1つの場所でレイアウトを変更できるため、xkbを完全に使用することをお勧めします。助けてくれてありがとう!

答え1

キーコード方式の編集

ポーランドのUbuntuフォーラムで答えを見つけました。 「xfree86」ファイルを編集するのではなく、「evdev」ファイルを編集します。これにより、すべてのレイアウトに適用される永続的な変更を実行できます。

はい(Gillesのリクエスト) - rootとしてログインし、次に進みます。

/usr/share/X11/xkb/keycodes

"evdev"ファイルをバックアップして編集してください。私の場合のように、必要に応じてコードを変更します。

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

「xev」コマンドを実行するとコードが見つかりますが、元の「evdev」ファイルだけを見ることができます。

ログアウトしてログインして新しいキーボードを楽しんでください:-)。

答え2

(この答えは単にxmodmapに関するものです。XKBを使って行うことができると確信していますが、方法はわかりません。)

修飾子とキー記号は独立して割り当てられます。ただし、一貫しないように設定すると、奇妙な効果が表示されます。修飾子キーを消去して再割り当てする必要があるかもしれませんが、欠落しているのはadd修飾子を割り当てるコマンドだけだと思います。 andを、andに置き換えることMeta_Lができます。お互いを交換することができます。ただし、1つを2つの異なる目的に使用しないように注意してください。Mod1Mod2Mod3Mod4Mod5

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R

答え3

この試み:

    key <CAPS>  { [ Alt_L, Alt_L ] };
    key <LALT> { [ Meta_L, Meta_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    modifier_map Mod5 { Meta_L, Meta_R };

両方のレベルの定義を参照してください。これは LALT のデフォルト値が [Alt_L, Meta_L] であるためです。 2番目の値を再定義しないと、Meta_Lのままになります。

見ているこの答えはxkbにあります。デフォルトの基本ファイルを編集せずに特定のキーをオーバーライドする方法を学びます(ルートは必要ありません)。この場合、次のようにローカルシンボルファイルに小さなセクションを含める必要があります。

partial modifier_keys
xkb_symbols "capsasalt_altasmeta" {
        replace key <CAPS>  { [ Alt_L, Alt_L ] };
        replace key <LALT> { [ Meta_L, Meta_L ] };
        modifier_map Mod1 { Alt_L, Alt_R };
        modifier_map Mod5 { Meta_L, Meta_R };
};

関連情報