問題:mod3(スーパー)とmod4(ハイパー)で特定のキーを押すと、通常とは異なる文字が返されるように、キーボードレイアウト(pc105 se)を変更/再定義したい。
例えば。
キーコード61は、通常押したときに「マイナス」(-)を生成し、Shiftキーを押しながら押したときに「アンダースコア」(_)を生成します。最初の修飾子グループ(AltGr)で押すと、「dead_belowdot」と「dead_abovedot」が生成されます(シフトなし/あり)。
私が欲しいのは、Super(win)キーも押したままキーを押したときの左のparanthesisまたは右のparanthesis(Shiftなし/あり)と、Hyperキー(Caps Lockに構成した)のスラッシュ/バックスラッシュです。
.Xmodmap
をホームディレクトリに追加し、次の構文を使用してxmodmap ~/.Xmodmap
で実行しようとしました。
keycode 61 = minus underscore a b c d e f g h i j k l m n o p
ただし、これによりAltGrはc/dになりますが、win/capslockは-/ _になります。
また、/ usr/share/X11/xkb/symbols/seを直接変更して、次の変更を試みました。
key <BKSL> { [apostrophe, asterisk, acute, multiply], [a,b,c,d], [e,f,g,h], [i,j,k,l]};
ただし、発生するのは '*´× '*' *(通常、altgr、win、およびcaps lockの場合)だけです。私も試しました
key <BKSL> { [apostrophe, asterisk, acute, multiply, a,b,c,d, e,f,g,h, i,j,k,l]};
しかし、指定されたフィールドが4つを超えるとすぐに、キーが完全に壊れたように見え、キーはデフォルトのpc105(us?)の動作に戻ります。
シナリオの処理方法について、stackoverflow、スーパーユーザー、またはgoogleで何も見つからなかったので、ここで質問します。
これは私のxmodmap -pm
です
xmodmap: up to 3 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3 Hyper_L (0x42), Hyper_L (0xcf)
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
2年後、私はついに自分の質問に答えることを誇りに思います。
最も簡単で、最も信頼性が高く、最も拡張可能な方法は、xmodmap
のみに依存することです。
xev
を実行して、モードスイッチャーとして使用するキーのキーコードを決定します。次に、興味のあるキーを押して、keycode
を書き留めます。
$ xev
KeyRelease event, serial 40, synthetic NO, window 0x2600001,
root 0x2a6, subw 0x0, time 1221887800, (885,743), root:(3447,805),
state 0x2010, keycode 66 (keysym 0xff7e, Mode_switch), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
キーコードは3行目のキーコード66にあります。
私にとって、これらは私が特に興味を持ったキーであり、それに対応するキーコードは次のとおりです。
Caps Lock
、キーコード66Pause|Break
、キーコード128Left Windows key
、キーコード133Num Lock
、キーコード77これは私が選択したセットアップですが、独自のセットアップを選択できます。これをファイル$HOME/.xmodmap
に保存しました。
~/.xmodmap
keycode 66 = Mode_switch
keycode 127 = Multi_key
keycode 133 = Super_L
...
このようにして、Caps Lock
をMode_switch
に、Pause Break
をCompose
に、左側のWin
キーをSuper_L
にバインドしました。 Compose
キーは、2つのキーを組み合わせて合字にすることができるため、特に便利です。例えば。 Compose
の後にT
とM
が続くと、商標記号™
になります。
xmodmap
の現在のキーマップバインディングを取得しますキーボードのレイアウトを壊さないために、キーを元のレイアウトにできるだけ近づけたいと思いました。そのために、現在のキーマップを印刷して、変更したいキーコードを探しました。
$ xmodmap -pke | ag 'keycode 51'
もちろん、使用するツールに応じて、grep
またはack
を簡単に使用できます。
$ xmodmap -pke | grep 'keycode 41'
$ xmodmap -pke | ack 'keycode 31'
これの出力は、次のように~/.xmodmap
で指定したものと同じ形式になります。
keycode 31 = i I i I rightarrow idotless rightarrow idotless i I rightarrow idotless i I rightarrow idotless
xmodmap
をバックアップします何か問題が発生した場合に備えて、現在のxmodmap
を簡単にフォールバックできるようにしておくことは決して悪い考えではありません。
$ xmodmap -pke > ~/.xmodmap.bak
私の知る限り、.xmodmap
ファイルの形式は次のとおりです。
keycode <keycode> = <1st level> <Shift+1st> <2nd level> <shift+2nd> <3rd level> <shift+3rd level> <4th level> <shift+4th> ...
さて、私はそれらすべてのレベルを理解していませんが、Mode_Switch
(私の場合はCaps Lock
)はあなたにレベル2を与え、Alt Gr
は私にレベル3を与えます、そしてそれは私がほとんどすべてです興味があるので、その行の残りを~/.xmodmap.bak
に残し、3、4、5、6列目(レベル2と3、およびシフト)を有効な文字に変更しました( を参照)有効な文字のリストについては、こちらをご覧ください )。
~/.xmodmap
...
keycode 51 = apostrophe asterisk dollar ampersand acute multiply acute multiply apostrophe asterisk acute multiply apostrophe asterisk acute multiply
keycode 59 = comma semicolon parenleft parenright dead_cedilla dead_ogonek dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek
keycode 60 = period colon bracketleft bracketright periodcentered dead_abovedot periodcentered dead_abovedot period colon periodcentered dead_abovedot period colon periodcentered dead_abovedot
keycode 61 = minus underscore braceleft braceright slash backslash braceleft braceright
keycode 65 = space space space space space underscore space space
...
.xmodmap
をテストします次に、xmodmap
に.xmodmap
を実行させて、新しいキーボードレイアウトをテストします。
$ xmodmap /home/user/.xmodmap
これを$HOME/.xinitrc
に追加しました:
~/.xinitrc
...
[-f $HOME/.xmodmap] && xmodmap $HOME/.xmodmap
...
これがお役に立てば幸いです。