2021/05/08
@shiracamus さん ご教授ありがとうございます.
numlockに関しては一切考えてませんでした.
フルサイズキーボードではないから
ということで関係ないだろうと思ってました.
教えて頂きありがとう御座います.
BIOSを確認次第,他の方に参考になるような情報があれば追記いたします.
書き漏れがあったので追記
起動するたびに設定を読み込んでくれないと困るので,rc.localに記載します.
$ touch /etc/rc.local #無ければ作成
$ vi /etc/rc.local
xmodmap /home/your-username/.Xmodmap
設定PCのスペックやOSなど
メーカー:jumper
モデル:jumper-EZBOOK-X4
製品リンクは以下
OS:Linux Mint 20 Ulyama
CPU:Intel celeron j3455
ストレージ:SSD(128GB)標準搭載です.
メモリ:4GB
キーボード配列:US
密林で3万円位で購入できます.
初期状態ではWin10が入ってますが,動きがモッサリで使い物になりません.
状況
キーボードのh,j,k,u,iを入力すると数字が入力される.
ログイン画面でパスワードが違いますという表示が出て初めて発覚.
いつもは無線のキーボードを使っていたため,気づかなかった.
じゃあ,直して行くよっと
大まかにやったことは2つ
①キー配列(ソフト側)を変更→結果的に失敗
②1から割り当てる
キーボード配列(ソフト側)を変更する
まず最初に思い浮かぶのは,US配列に変えてしまえばいいんじゃね?
キーボード配列を確認,日本語配列となっている.
US配列にしてみる.
日本語入力のためにfcitx-mozcをインストールしているが,US配列だと動かない.
US配列だと日本語打てない.
日本語配列だと,そもそもキーボードの出力がおかしい.
はい,ダメ.
半ば強引に1から割り当てる
じゃあ,US配列で日本語打てるようにして,半角全角キー割り当てて,パイプ機能を使うために | も割り当てればいいんでしょ!
くそだりぃなまじで.
やっていきましょう.
まずはキー押下時の反応を探る
ターミナルを立ち上げます.
ディレクトリの場所はどこでもいいですが,最終的にホームディレクトリに設定ファイルを記述します.
xevと打ち込むと,白いウィンドウとターミナル上に変な出力が出てきます.
そこで試しにキーボードの e を押してみます
すると以下の出力が得られます.
上のブロックはキーが押されたときの出力情報
KeyPress event 〜〜〜
下のブロックはキーが離されたときの出力情報
KeyRelease event 〜〜〜
user@mint43 $ xev
KeyPress event, serial 38, synthetic NO, window 0x4a00001,
root 0x5e1, subw 0x0, time 1704948, (658,339), root:(1529,791),
state 0x10, keycode 26 (keysym 0x65, e), same_screen YES,
XLookupString gives 1 bytes: (65) "e"
XmbLookupString gives 1 bytes: (65) "e"
XFilterEvent returns: False
KeyRelease event, serial 38, synthetic NO, window 0x4a00001,
root 0x5e1, subw 0x0, time 1705098, (658,339), root:(1529,791),
state 0x10, keycode 26 (keysym 0x65, e), same_screen YES,
XLookupString gives 1 bytes: (65) "e"
XFilterEvent returns: False
上記のkeycode 26という情報がほしかった情報である.
これをひたすら行い,すべてのキーに対して行います.
※私はすべて調べて,出力がおかしいキーだけ割り当てしなおしました.
キー押下時の設定をファイルに記述していく
前段階で取得したキーコードを設定ファイルに書き込んでいく.
pwd
/home/your-username/
vi .Xmodmap
以下,.Xmodmap内部
※表示及び保存の関係上,テキスト形式でアップしています.
keycode 11 = 2 quotedbl
keycode 15 = 6 ampersand
keycode 79 = 7 apostrophe
keycode 80 = 8 parenleft
keycode 81 = 9 parenright
keycode 63 = 0
keycode 83 = u U
keycode 84 = i I
keycode 85 = o O
keycode 106 = p P
keycode 34 = at grave
keycode 35 = bracketleft braceleft
keycode 51 = bracketright braceright
keycode 88 = k K
keycode 89 = l L
keycode 82 = semicolon plus
keycode 48 = colon asterisk
keycode 90 = m M
keycode 91 = period greater
keycode 86 = slash
keycode 62 = backslash underscore
上記のように記入する.
読みかたは keycode 106 = p Pならば,
pを押すと,pを出力
Shift + p を押すと Pを出力
キーマップの正式名称わからないよ.ぴえん.
アルファベットならわかるけど,キーボード上の記号とかの正式名称わからいよ.ぴえん.という方いると思います.
その場合の調べ方は以下の手順で調べます.
setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete+japan" };
xkb_symbols { include "pc+jp+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
この中のsymbolsが必要
これシンボル以外の情報はなんなのか知りません.
symbolsを見に行かなければいけません.
人によってディレクトリの場所が異なることは無いと思いますが,異なった場合は探してみて下さい.
cd /usr/share/x11/xkb/symbols
vi jp #エディタviでやってますが,nanoやgeditなど何でも可
cat jp #これだとすべてターミナル上に出力されます
以下,jp内部
default partial alphanumeric_keys
xkb_symbols "106" {
include "jp(common)"
name[Group1]= "Japanese";
key <AE10> { [ 0, asciitilde ] };
key <AE13> { [ backslash, bar ] };
};
hidden partial alphanumeric_keys
xkb_symbols "common" {
// "Common" keys for jp 106/109A layouts.
key <HZTG> {
type[Group1]="PC_ALT_LEVEL2",
symbols[Group1]= [ Zenkaku_Hankaku, Kanji ]
};
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, quotedbl ] };
key <AE03> { [ 3, numbersign ] };
key <AE04> { [ 4, dollar ] };
key <AE05> { [ 5, percent ] };
key <AE06> { [ 6, ampersand ] };
key <AE07> { [ 7, apostrophe ] };
key <AE08> { [ 8, parenleft ] };
key <AE09> { [ 9, parenright ] };
key <AE10> { [ 0,] };
key <AE11> { [ minus, equal ] };
key <AE12> { [ asciicircum, asciitilde] };
key <AD01> { [ q, Q ] };
key <AD02> { [ w, W ] };
key <AD03> { [ e, E ] };
key <AD04> { [ r, R ] };
key <AD05> { [ t, T ] };
key <AD06> { [ y, Y ] };
key <AD07> { [ u, U ] };
key <AD08> { [ i, I ] };
key <AD09> { [ o, O ] };
key <AD10> { [ p, P ] };
key <AD11> { [ at, grave ] };
key <AD12> { [ bracketleft, braceleft ] };
key <AD13> { [ bracketright, braceright ] };
key <CAPS> { [ Eisu_toggle, Caps_Lock ] };
key <AC01> { [ a, A ] };
key <AC02> { [ s, S ] };
key <AC03> { [ d, D ] };
key <AC04> { [ f, F ] };
key <AC05> { [ g, G ] };
key <AC06> { [ h, H ] };
key <AC07> { [ j, J ] };
key <AC08> { [ k, K ] };
key <AC09> { [ l, L ] };
key <AC10> { [ semicolon, plus ] };
key <AC11> { [ colon, asterisk ] };
key <AB01> { [ z, Z ] };
key <AB02> { [ x, X ] };
key <AB03> { [ c, C ] };
key <AB04> { [ v, V ] };
key <AB05> { [ b, B ] };
key <AB06> { [ n, N ] };
key <AB07> { [ m, M ] };
key <AB08> { [ comma, less ] };
key <AB09> { [ period, greater ] };
key <AB10> { [ slash, question ] };
key <AB11> { [ backslash, underscore] };
key <LCTL> { [ Control_L ] };
この莫大なキーセットの中から探して下さい.
この設定を反映します
usr@mint43 $ xmodmap .Xmodmap
以下のようなエラーが出なければ成功です.
xmodmap: unknown command on line .Xmodmap:2
xmodmap: 1 error encountered, aborting.
大抵はスペルミス or キーセット名が間違ってます.
根気強く設定して下さい.
USキーボードだと|
のボタン無いじゃん!
そう思った方はShift + 0
に割り当てて下さい.
参考までにキーセット一覧表
文字 | キーセット | 文字 | キーセット |
---|---|---|---|
全角半角 | Zenkaku_Hankaku | ! | exclam |
" | quotedbl | # | numbersign |
$ | dollar | % | percent |
' | ampersand | ( | parenleft |
) | parenright | - | minus |
= | equal | ^ | asciicircum |
~ | asciitilde | 縦棒 | bar |
@ | at | ` | grave |
[ | bracketleft | { | braceleft |
; | semicolon | + | plus |
: | colon | * | asterisk |
] | bracketright | } | braceright |
, | comma | < | less |
. | period | > | greater |
/ | slash | ? | question |
\ | backslash | _ | underscore |
参考にしたサイト