xmodmapを使用した個々のキーマッピングの設定

xmodmapを使用した個々のキーマッピングの設定

AltGR+Right_Windowsを再マップしたいのですが、方法がわかりません。何を試しても、右のWindowsキーを押すと、右のAltキーを押したかどうかにかかわらず、キーシムという名前が表示されます。

私が今テストしているxmodmapファイルの内容です。私のキーボードでは、38は「a」のキーコード、48はアポストロフィ/二重引用符のキーコード、134は右側のWindowsキーのキーコードです。

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Right_Alt+アポストロフィを押すと5が出力されますが、Right_Alt+aとRight_Alt+Right_Windowsは1(右のAltを押すか押さないとき)を提供しますが、これは私が望むものではありません。

現在のキーボードレイアウトは、us(alt-intl)正しいAltが明らかにAltGr / Iso_Level3_Shiftとして機能するように設定されていることです。出力はxmodmap -pm次のとおりです。

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

答え1

xmodmapを使用した個々のキーマッピングの設定

今私自身の研究結果を書く時間です。

私の考えにはxmodmapに何か抜けたものがあるようですが、よく文書化されていないので、人々が混乱しています。しかし、X.OrgのXKBとxmodmapの設計は愚かであることがわかりました。

途方もない失敗:xmodmap

元のキーボードレイアウトに実際に存在する限り、xmodmapを使用して既存のマッピングをオーバーライドできます。質問で説明されている状況では、AltGrを使用するためにキーの動作を拡張することはできません。使用されているAltGrキーコードのAltGrキーシンボルのみを変更できます。

また見なさい:http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

解決策:Mode_switch

この回避策は@ Ned64の答えで説明されています。からAltGrに再マップできます。ISO_Level3_ShiftMode_switch

次のコマンドラインを使用して正常に再マッピングしましたAltGr

xmodmap -e 'keycode 108 = Mode_switch'

xmodmap欠点は、現在のキーボードレイアウトが破壊されることです。ただし、すでに述べた@Ned64メソッドを使用して、すべてのマッピングを1つずつ再作成できます。

回避策:キーボードレイアウトの変更

キーボードレイアウトを使用しておりus(cz_sk_de)、拡張したいキーの設定を追加して変更したいと思います。

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

xkb_symbols "cz_sk_de"一部/usr/share/X11/xkb/symbols/us

修正版を使用するには、キーボードレイアウトをリセットしてください。

setxkbmap 'us(cz_sk_de)'

,(1).とキーShiftの組み合わせを使用してチェコ語と英語の引用符と省略記号を入力するAltGrか、(2)xmodmap定義されたキーを使用してこれらのキーを再マップすることができます。

主な欠点は、setxkbmapどこでもキーボードレイアウトをサポートしていないようで、ホームディレクトリの代わりにシステム構成に書き込む必要があることです。

結論として

これは、X.Orgが過度にエンジニアリングされ、正しく設計されていない例のように見え、キーコードと修飾子の組み合わせをシンボルにマッピングするなどのマイナーなものでさえ問題になる可能性があります。これらのツールは、副作用なしにユーザー設定の個々のキーマップを変更する合理的な方法を提供しないようです。

答え2

ステップ1:AltGrを有効にする

Mode_switch次のように、AltGr-Keyをに再マッピングする場合にのみ、AltGr修飾キーが私のシステムで機能することがわかりました。

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

108他のキーボードがある場合は、コードと交換する必要があります。入力して確認してください。

xmodmap -pke | grep Alt_R

その後、その番号を使用します。 (このキーはAlt_R私が知っているシステムで通常呼び出されます。)

あるいは、Alt_Rが他の項目に割り当てられていない場合でも機能できます。

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

AltGr修飾子は、修飾子リストの位置3(Shift:4)を提供します。

ステップ2:必要に応じてキーを割り当てる

キーボードのすべてのキーにAltGrバリアントを割り当てることができます。必須コードに該当しない他のキーがある場合は、他のキー(テスト済みキー)と同様に、そのキーを再割り当てする必要があります。

ステップ3:スクリプトに変換

これでxmodmapコマンドを実行し、デフォルトのキーボードに対するすべての修正のみをファイルに書き込みます。これはキーマップ全体をロードするよりも高速です。このスクリプトはログインするたびに一度実行され、プロセスによってキーマップがリセットされるたびに実行されます。

私はSolaris、IRIX、Linuxで長年にわたってこれを何度も実験してきましたが、私が知っている限り、これはAltGrを動作させる唯一のソリューションであり、20年以上私のために働きました。

答え3

明らかに、xmodmapはデフォルトのAltGRを読みません。おそらく特定のキーボードレイアウト(アメリカ以外のレイアウト)に制限されているでしょう。どちらにしても、実際の問題はキーボードレイアウトを置き換えることができますが、一部の人はそうする可能性があるということです。おなじみのレイアウト(ðæöáúíóåůなどの文字を含むスカンジナビアのキーボードレイアウトなど)で特殊文字を使用する必要があるため、実際にこれを実行したくありません。これは他のキーボードレイアウト構成では不可能です。起きにくい。

あなたは実行することができます

xmodmap -e "keycode 108 = Mode_switch"

AltGRをxmodmapに再バインドするには、今すぐAltGRを押すとキーボードの3番目の割り当てを実際に出力することができますが、AltGRキーバインディングはもうAltGRキーと一緒に使用されなくなり、元のキーボードレイアウトが完全に破壊されます。

既存のキーボードレイアウトを損なうことなくレイアウト切り替えを含まない2つの解決策が見つかりました。、1つはMode_switchを別のキーにバインドすることです。

理想的なキーはAltGRのすぐ隣にあるSuper_Rで、キーコードは134です。しかし、すべてのキーボードにこの機能があるわけではなく、私のラップトップにはないので、ほとんど使用しない最後の残りのキーであるRight Controlにバインドすることにしました。

xmodmap -e "keycode 105 = Mode_switch"

アメリカの物理的なキーボードレイアウトがありますが、ヨーロッパのレイアウト構成があり、通常、これらのキーボードではZの横にless / greater / barキーがありません(ISO_Backslashとも呼ばれ、xmodmap自体では認識されません)。メニュー(135)にバインドしていますが、R_CtrlとSuper_Rを置き換える役割を果たします。

私はこれが汚い修正だと思います。

2番目の解決策それを調べるのに長い時間がかかりました。 sxhkdを使用する(xbindkeysの代替)

に追加すると~/.config/sxhkd/sxhkdrc:

~ISO_Level3_Shift
    xdotool key Mode_switch

AltGR は正常に動作しますが、Mode_switch を押したときに切り替えられます(Caps Lock に似ていますが、Mode_switch の場合)、それを使用するすべての xmodmap キーは、AltGR をもう一度押して切り替えを解除するまで AltGR モードにロックします。キーを離したときに自動的にトグルを解除するスクリプトを作成するのは簡単なことですが、そうしようとする私の試みはいくら言ってもやや疑わしかったです。

関連情報