web-dev-qa-db-ja.com

X11のAltキーに別の修飾子を割り当てる方法

目的:

AltをCapsLockキーに割り当て、MetaをAltキーに割り当てたいと思います。しかし、そのようにすると、AltキーはAltとして認識されなくなり、CapsLockキーはCapsLockとして認識されなくなります。

openSUSE 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キーをメタに設定するレイアウトファイルを定義するにはどうすればよいですか?

    編集:ここで成功の半分!今、私はそのようなエントリを持っています:

    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によってメタとして認識されますが、Alt + Fでメニューを開いたり、ウィンドウを切り替えたりすることはできますが、そうすべきではありません。その一方で、私は国民性を入力することはできません。

  2. xfree86

    しかし、これは機能しません。xfree86の代わりに他のファイルテーブルが読み取られると思います。

    質問:システム(X/Gnome)で使用されているキーコードテーブルファイルを見つける方法は?

    編集:私にとって最良のオプション-キーコードテーブルの編集-は解決されました maciasの答えによる

  3. xmodmap

    ここでの成功の半分。この部分は必要に応じて機能します。

    lock = Caps_Lockkeysymを削除しますCaps_Lock = Alt_L

    これで、AltにマップされたCapsLockキーができました。しかしこれは:

    keysym Alt_L = Meta_L

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

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

    編集:この部分は Gillesの答え によって解決されます。

概要:

質問に答えることで(うまくいけば)私の問題は解決しますが、xkbのすべてのファイルをパックして1つの場所でレイアウトを変更できるため、xkbを完全に使用することを好みます。よろしくお願いします!

9
greenoldman

キーコード編集アプローチ

ポーランドの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」ファイルを見るだけです。

ログアウト、ログイン、新しいキーボードをお楽しみください:-)。

8
greenoldman

これを試して:

    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 };

2つのレベルの定義に注意してください。これは、LALTのデフォルトが[Alt_L、Meta_L]であるためです。 2番目のものを再定義しない場合、Meta_Lのままになります。

メインのデフォルトファイルを編集せずにいくつかのキーを再定義する方法については、 xkbに関するこの回答 を参照してください(したがって、rootである必要はありません)。そのような場合、ローカルシンボルファイルに次のような小さなセクションが必要になります。

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 };
};
4
Pablo Saratxaga