web-dev-qa-db-ja.com

キーをCtrlに再マップし、テキスト編集中にCtrlのように動作させる

韓国でおしゃれなメカニカルキーボードを購入しました。一般的に、それは1つのことを除いて本当にうまく機能します-それは持っていても Alt そして Ctrl その右側のキー、これらのキーは「通常の」キーボードと同じコードを生成しません。

長い話、短い Alt ハングルキー(ラテン文字と韓国語文字の間の変更)および Ctrl はハンジャです(ハングルと「古い」韓国語文字の間で変換します)。私は複数のレイアウト-韓国語と私のローカル(ポーランド語)を使い、両方の世界のベストを保ちたい-それは正しいことを意味します Alt のキーコードを出力します Alt ポーランド語を入力しながら、ハングルでは韓国語で入力します。

韓国人は(キーコードが正しいので)箱から出して働いたが、ポーランド人は微調整が必​​要だった。アクティブな/usr/share/X11/xkb/symbols/plセクションに次の行を追加して、レイアウト(xkb_symbols)を変更しました。

key <HNGL>  { [ ISO_Level3_Shift ] };
key <HJCV>  { [ Control_R ] };

そして、「inet」レイアウトのHNGLHJCVに関連する行をコメントアウトしました。これらは私の変更を上書きしていたからです。

これらの変更の後、私は得た Alt 完全に動作しますが、まだ問題がありました Ctrl キーが正しく機能していません。一般的には動作しますが、テキストを編集するとき、たとえばを使用して1つのWordを削除します Ctrl+Backspace 組み合わせ、私はそうすることはできません。

このためにキーの繰り返しを無効にするためにxset -r 131を実行しました Ctrl/ Hanjaキーですが、実際のようには動作しません Ctrl

再マップxevHanja出力は次のとおりです。

KeyPress event, serial 34, synthetic NO, window 0x1000001,
root 0x13f, subw 0x0, time 49086462, (88,89), root:(3928,141),
state 0x10, keycode 131 (keysym 0xffe4, Control_R), same_screen YES,
XKeysymToKeycode returns keycode: 105
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

そして、ここはレギュラーです Ctrl (他のキーボードから):

KeyPress event, serial 39, synthetic NO, window 0x1000001,
root 0x13f, subw 0x0, time 49144922, (616,377), root:(4456,429),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

システムがそのキーを本格的なものとして扱うように変更できるものはありますか Ctrl

5
user1234567

キーが修飾子である場合、キーを別のキーに割り当てることは一意です。これ answer には良い説明があります:

このアクションは、このような修飾子アクションである場合、現在の修飾子の状態を変更します。これは、単に「オン」の修飾子を記録するオペレーティングシステムに記録されたフラグのセットです。 [このレコード]は、さらにキーを押してマップするアクションに影響します。

したがって、キーをマップしようとすると、通常のキーとしてマップされ、複数のキーが押されたときの動作を指定する情報が失われます。

デモするには、xmodmapを実行します。 control修飾子にマップされる2つのデフォルトキー(Control_LおよびControl_R)があることに注意してください。 xmodmap -e 'keycode 131 = Control_L'を実行してからxmodmapを実行する場合、コントロール修飾子にはまだ2つのキーがあるはずなので、キーは修飾子として認識されません。

修飾子としてマップするには:

修飾キーをクリアcontrol

xmodmap -e 'clear control'

ハンジャキーのキーコードを追加します

xmodmap -e 'keycode 131 = Control_L'

最後に、デフォルトの修飾子を追加し直します。

xmodmap -e 'add control = Control_L'
xmodmap -e 'add control = Control_R'

これで、xmodmapを再度実行すると、モディファイアコントロールに新しいキーが追加されたことに気付くでしょう。これは今では正しく動作するはずです。

ここ は、キーボードのキーに修飾子を再割り当てする公式のArch Linuxの手順へのリンクです。

編集:

永続的な変更の場合は、/usr/share/X11/xkb/symbols/plに追加します。

key <HJCV> { [ Control_L ] };

modifier_map Control { Control_L, Control_R, <HJCV> };
2
jackw11111