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


9

目的:

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キーを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

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

    ロックを削除= Caps_Lock keysym Caps_Lock = Alt_L

    さて、私はAltにマップされたCapsLockキーを本当に持っています。でもこれは:

    keysym Alt_L = Meta_L

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

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

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

概要:

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


答えが見つかった場合は、そのように投稿し、興味があると思われる他の人に十分な情報を提供してください。(別の場所で、または自分で答えを見つけた場合は、自分の質問に答えても問題ありません。必要に応じて、回答を承認済みとしてマークすることもできます。)
Gilles「SO-悪をやめ

@ギレス、わかりました、でも私はあなたの答えを答えのままにしておきます。その上、あなたの助けは私にとって非常に貴重でした。
greenoldman 2011年

とにかく自分の答えを受け入れてもポイントはもらえません。(あなたはあなた自身の答えに対する投票のポイントを得ます、あなたが仕事をしたので公平です。)最も重要なことは情報が明確に提示されることです。この質問に対する回答は2つあります。1つはxmodmapに関するもので、もう1つはxkbに関するものです。両方が回答として投稿された場​​合、ページはより明確に表示されます。
Gilles「SO-邪悪なことをやめよう」

回答:


7

(この回答はxmodmapについてのみです。XKBでこれを実行することは可能だと確信しています。方法はわかりません。)

修飾子とキーシムは個別に割り当てられます。しかし、それらを一貫して設定しないと、奇妙な効果が得られます。不足しているのは、修飾キーaddをに割り当てるコマンドMeta_Lだけですが、修飾キーをクリアして再割り当てする必要がある場合もあります。あなたは交換することができるMod1Mod2することによりMod3Mod4およびMod5:彼らは互換性があり、ちょうどあなたが二つの異なる目的のための1つを使用していないことを確認してください。

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

本当にありがとう。実際、私はメタにMod2の代わりにMod5を使用しましたが、期待どおりに書き込むことができます(多くの国の文字にmeta + keyを使用しています)。しかし、奇妙なことに、CapsLockキーに再び問題が発生しました-バインドされています...メタ。なぜかと思います。Altにバインドすると、Altが再定義されるからです。では、どのように違いを生み、コードを主張し、シンボルをもう一度主張するのでしょうか?生のキーコードはキーボードごとに変わる可能性があるため、使用しないでください。キーシムの順序を入れ替えることはできません。最後の行でエラーが発生するためです。
greenoldman 2011年

問題keysym Caps_Lock = Alt_Lは、2回実行すると、システムが望ましくない状態に戻ることです。そのため、私はキーコードを使用しています。オペレーティングシステムとアーキテクチャ(キーボード間ではなく)によって異なりますが、それほど頻繁ではありません。
Gilles「SO-邪悪なことをやめなさい」

説明してくれてありがとう、私はすぐに推測した:-)。よろしければ、未回答の質問としてもう少し長く保管しますが、おそらく誰かがxkbレベルで問題を解決できるでしょう。
greenoldman 2011年

多大な感謝を込めて、シンボル/ PCとの戦いを続けましたが、成功しませんでした。
Cody Craven

9

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

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

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


これは、おそらくXKBを使用する正しい方法です。私はLinux Mintを実行していて、書いたカスタム構成Keyboard PreferencesCapslock上書きするためのオプションで問題が発生していますXKB。これはラジオボタンによる選択であるため、GUIからのルールの1つが適用されないようにする方法はありません。
dcunited001

LALTの動作を維持できますか?つまり、それをLMTAに変更しないのですか?私は試しましたが、どうやら<LALT> = ...の形式の2つの割り当てを持つことはできません
ダニエル

これにより、ubuntuでLALTとRALTを切り替えるのがとても簡単になりました...ありがとうございます。すべてのグーグルの場合:altを他の主要なubuntuにマップしますaltをaltgrにマップしますubuntuはaltをctrlに再マップします
Noel Schenk

4

これを試して:

    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この回答を参照してください(したがって、ルートである必要はありません)。そのような場合、ローカルシンボルファイルに次のような小さなセクションが必要になります。

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 };
};
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.