左右のシフトキーを個別にマッピングするにはどうすればよいですか?


10

まず、私のXとXKBについての無知を許してください。私は、ソリューションを詳細に把握することなく必要なものを達成できることを期待して、ソリューションを一緒にハッキングしようとしています。

Ubuntu 12.04でXKBキーボードマップを作成しようとしています。これにより、2つのシフトキーのどちらがLevel2修飾子を構成するかを指定できます。具体的には、4キーは$、左シフトではなく右シフトが保持されている場合にのみaを生成する必要があります。

これまでの私の読書:

カスタムタイプを定義して、シンボルマップで明示的に参照しようとしました。

/usr/share/X11/xkb/types/mbfisher

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

次に、UbuntuキーボードレイアウトGUIでマップを選択します。

これにより、4キーとは別に英数字キーボードが無効になりますが、ドル記号はどちらのシフトキーでも入力できます。

無駄な情報がたくさんある大量の質問を書くことを意識しているので、ここで終了します。見逃したことは何でも聞いてください。

何か案は?

回答:


2

それがあなたが望む解決策かどうかはわかりませんが、左シフトキーを無効にする1つの可能性はxmodmapを使用することです。~/.Xmodmap内容を含むファイルを作成する

clear shift
add shift = Shift_R

と実行しxmodmap ~/.Xmodmapます。


コメント/チャットを参照:

他のプログラムによってxkbmapに他の変更が加えられている場合、問題が発生する可能性があります。そのため、デフォルトのxkbmapにリセットするsetxkbmap us必要があります。

一部のキーを1つのシフトキーだけに応答させる場合は、現在のキーボードレイアウトを取得できます。xmodmap -pke > .Xmodmapこれにより.Xmodmap、すべてのキーのリストがの形式で表示されkeycode XX = functionsます。この割り当てでは、各キーコードは右側にいくつかの機能を持つことができます。それぞれが異なる修飾子とそのキーに対応しています。その後、上からclear + addを挿入して、などを追加できますadd mod5 = Shift_L。右のシフトキーはmod2に対応し、左のシフトキーはmod5になります。次にNoSymbol、右の列に到達するまで挿入およびスペースを挿入するだけで、左シフトキーで呼び出すキーのmod2関数をmod5に移動できます(keycode 57 = n N-> keycode 57 = n NoSymbol NoSymbol NoSymbol N)。


お役に立ててうれしいです。うまくいきましたか?
Trudbert、2012年

すみません、忙しい日。xmodmapを実行した後もまだ両方のシフトキーを使用できますが、変更を取得するには他に何かする必要がありますか?
mbfisher 2012年

xmodmap -e "clear shift"を試してみてください。それでも機能する場合は、シフトキーを使用できないようにしてください
Trudbert

いいえ、まだシフトキーを持っています。# xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
mbfisher 2012年

奇妙な。エラーメッセージはありませんか?clearは修飾子に関連するすべてを削除するので、何も残っていないはずです。私は1時間ほどでLinuxシステムを手に入れ、これをもう一度調べます。
Trudbert、2012年

2

これが最終的に機能したものです!私はxkb構成ではなくファイルを使用xmodmapしました~/.Xmodmap

~/.Xmodmap

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

コメント付きの2行(で!始まる)は、変更前と変更後の列見出しを示しています。これにより、shift_RをMode_switchとしてマップしたので、col 2をShift_Lとして、col 3をShift_Rとして指定できます。

変更は、以下を実行することによって行われます。

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap us白紙の状態で作業するようにデフォルトのUSマップを設定し、それにxmodmapカスタム変更を追加します。

実装されている場合は!@#$および%文字だけ右シフトキーを入力することができ、かつ^&*()だけ左シフトキーを入力することもできます。

次に、キーボードの左側にあるすべてのキーをマッピングして、右シフトキーのみで変更できるようにします(つまり、アルファベット文字とその大文字の変更)。逆も同様です。このソリューションは、左側のみを再マップする必要があることを意味します。

途中で見つかった他の便利なリンク:

@Trudbertに回答していただき、ありがとうございます。

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