キーボードの再マップ [Alt_L] + {ijkl} を矢印 {上、左、下、右} として

キーボードの再マップ [Alt_L] + {ijkl} を矢印 {上、左、下、右} として

矢印キーのように動作させるために、Alt と一緒に 'ijkl' を使いたいです。つまり、Alt+i = 上、Alt+K = 下などです。

私が試してみましたxmodマップ続くこの答え回答によると、Alt 修飾キーは xmodmap の 3 列目にあります。ただし、 xmodmap -e "keycode 31 = i I Up"Alt+i までは割り当てられません。

私も試してみましたxbindキー続く別の答えしかし、これもうまく機能しません。

"xvkbd -xsendevent -text '\[Left]'"
m:0x18 + c:44
alt + j

"xvkbd -xsendevent -text '\[Down]'"
m:0x18 + c:45
alt + k

"xvkbd -xsendevent -text '\[Right]'"
m:0x18 + c:46
alt + l

"xvkbd -xsendevent -text '\[Up]'"
m:0x18 + c:31
alt + i

解決策があればありがたいのですが、できれば、ターミナルを開くための ctrl+alt+t などの他の alt の組み合わせを壊さないものが望ましいです。

編集:(答えに役立つなら)私がやった後xmodマップ再割り当て xev を実行して Alt+i を押すと、次が返されます。

KeyPress event, serial 37, synthetic NO, window 0x2e00001,
    root 0x66b, subw 0x0, time 35626163, (161,-15), root:(261,144),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 37, synthetic NO, window 0x2e00001,
    mode NotifyGrab, detail NotifyAncestor

KeyPress event, serial 37, synthetic YES, window 0x2e00001,
    root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
    state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic YES, window 0x2e00001,
    root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
    state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic YES, window 0x2e00001,
    root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
    state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic YES, window 0x2e00001,
    root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
    state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusIn event, serial 37, synthetic NO, window 0x2e00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 37, synthetic NO, window 0x0,
    keys:  4294967216 0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 37, synthetic NO, window 0x2e00001,
    root 0x66b, subw 0x0, time 35628444, (161,-15), root:(261,144),
    state 0x18, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

まず、なぜなのか分からないシフトL第二に、それはキー押下は何らかの形で登録されますが、カーソルが上に移動しないなど、何の効果もありません。

(私はUbuntu 20.04を使用しています)

答え1

私はこれを、対応するファイルを編集することで行いました。/usr/share/X11/xkb/シンボルディレクトリです。私はドイツ語のキーボードレイアウトを使用しているので、これは./deファイルの最初のブロックに次の行を追加/変更しました。

xkb_symbols "基本" {

...

key <AD08>  { [         i,          I,    Up,          Up ] };
key <AC07>  { [         j,          J,    Left,        Left ] };
key <AC08>  { [         k,          K,    Down,        Down ] };
key <AC09>  { [         l,          L,    Right,       Right ] };

...

include "level3(alt_switch)"

};

最初の数行は、ALTGR + I = Up などとしていますが、私はこれらの組み合わせを使わないので、これで問題ありません。そして最後の行は、基本的に ALT を ALTGR と同じ動作をするようにしています。これは目的を果たしますが、あなたが言ったように、他の ALT の組み合わせを台無しにしてしまうので、ちょっと格好悪いです。これに対する私の解決策は、ALT をこの目的に使用せず、適切な位置にあり、そもそも必要のない他のキー、RWIN を使用することです。言い換えると、最後の行を次のように置き換えました。

include "level3(rwin_switch)" 

こうすることで、小指で RWIN を押して、ijkl を矢印キーとして操作できるようになりました。素晴らしいのは、他のソリューションとは異なり、たとえば SHIFT + RWIN + L を押してテキストを選択できることです。

お役に立てれば :)

関連情報