AltGrを含むxmodmapバインドが一部のキーでしか機能しないのはなぜですか?


12

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

これらは、現在テストしているxmodmapファイルの内容です。私のキーボードでは、38は「a」のキーコード、48はアポートロフィ/ダブルクォートのキーコード、134は右のウィンドウキーのキーコードです。

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 + apostropheを押すと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)

何が起こっているのか正確xevにはわかりませんが、まだ行っていない場合は、実行してさまざまなキーの組み合わせを押し、ハードウェアとXwindowsレベルまでのキープレスが最初から区別できるキープレスになっているかどうかを確認してください。
Joe

まったく同じ問題が発生しています。カンマとドットを変更して、チェコ語と英語の二重引用符(„ /“ /”)の印刷もサポートしたかったのです。us(cz_sk_de)キーボードレイアウトとxmodmap を使用しています。
PavelŠimerda16年

ならどうしよう?別の報奨金を無駄にしたり、問題がかなりよく説明されているときに新しい質問を始めたりすることは現実的ではありません。xorgのバグのように見えますが、参照は見つかりませんでした。自動的に授与されるにもかかわらず、既存の答えは明らかに間違っています。
PavelŠimerda2016

私はあきらめて、作業を知っているさまざまなキーバインドを使用しました:/これはバグのように見えますが、どのシステムに関連し、どこに報告するか
わかりませ

私はここにいくつかの情報を見つけました... blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html
パベルŠimerda

回答:


7

xmodmapを使用して個別のキーマッピングを構成する

私自身の研究結果を書き留める時がきました。

私はxmodmapで何かを見逃していたに違いないと思い、それはあまりよく文書化されておらず、人々は混乱しています。しかし、XKBとxmodmapに関するX.Orgの設計はばかげていることがわかりました。

エピック失敗:xmodmap

既存のマッピングが元のキーボードレイアウトに実際に存在する限り、xmodmapを使用して既存のマッピングを再定義できます。質問で説明されているケースでは、AltGrを使用するようにキーの動作を拡張することはできません。すでにAltGrを使用しているキーコードのAltGr keysymsのみを変更できます。

参照:http : //blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

回避策:Mode_switch

この回避策は、@ Ned64の回答に記載されています。AltGrからISO_Level3_Shiftに再マップできMode_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の過剰設計された悪いデザインの例のようです。キーコードと修飾子の組み合わせをシンボルにマッピングするような些細なことでさえ問題であることが判明しています。ツールは、副作用なしでユーザー構成の個々のキーマッピングを変更するだけの合理的な方法を提供していないようです。


「AltGrを使用するようにキーの動作を拡張することはできません」-これがずっと問題だったようです!ありがとう。
hugomg 2016年

5

ステップ1:AltGrを使用可能にする

次のように、AltGr-Keyをに再マップした場合にのみ、AltGrで変更されたキーが私のシステムで機能することがわかりましたMode_switch

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コマンドを受け取り、デフォルトのキーボードに対するすべての(ただし唯一の)変更をファイルに書き込みます。これは、完全なキーマップをロードするよりも高速です。ログインごとに1回、およびキーマップが何らかのプロセスによってリセットされるたびに、このスクリプトを開始します。

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


1
これにより、右側のウィンドウキーが「1」ではなく「3」として機能し始めました。ただし、現在、すべての既存のaltgr修飾子が機能しなくなっています(機能するには、「3」ではなく「5」である必要があると思いますか?)
hugomg

これを試してくれてありがとう。この状況で、もう機能しないキーを投稿xmodmap -pmxmodmap -pke | grep -w SOMECHANGEDKEYてください。
Ned64

(その後xmodmap、出力に従って新しいモディファイアを追加する必要があります)
Ned64

xmodmap -pke | grep Alt_R私のシステムでは結果を返しません。私のシステムはGentooが安定したLenovo ThinkPad X230です。私もgrep -i無駄にしようとしました。
PavelŠimerda16年

私が試してみましたが、問題はアクセント文字が機能しus(cz_sk_de)なくなったことです。したがって、この答えは私にとってはうまくいかず、他の多くの人にとってはうまくいきません。
PavelŠimerda16年

1

どうやら、xmodmapはデフォルトのAltGRを正しく読みません。特定のキーボードレイアウトに制限されている可能性があります。いずれにせよ、すべてUS以外のレイアウトである可能性があります。本当の問題は、キーボードレイアウトを置き換えることができないことです。彼らが慣れているレイアウトで特殊文字を使用する必要があるので(ðþæöáúíóåůなどの文字が含まれているスカンジナビアのキーボードレイアウトなど)、他のキーボードレイアウトで構成するのは面倒です。

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

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モードにロックされます。キーを離したときにスクリプトを自動的に解除するスクリプトを作成するのは簡単なことですが、私の試みは、控えめに言っても、かなりバグが多いものでした。

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