![キーボードの再マップ [Alt_L] + {ijkl} を矢印 {上、左、下、右} として](https://rvso.com/image/943141/%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AE%E5%86%8D%E3%83%9E%E3%83%83%E3%83%97%20%5BAlt_L%5D%20%2B%20%7Bijkl%7D%20%E3%82%92%E7%9F%A2%E5%8D%B0%20%7B%E4%B8%8A%E3%80%81%E5%B7%A6%E3%80%81%E4%B8%8B%E3%80%81%E5%8F%B3%7D%20%E3%81%A8%E3%81%97%E3%81%A6.png)
矢印キーのように動作させるために、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 を押してテキストを選択できることです。
お役に立てれば :)