LoginSignup
1
1

More than 1 year has passed since last update.

OSがLinuxのPCでキーボードマッピングを行う

Last updated at Posted at 2021-05-07

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内部
※表示及び保存の関係上,テキスト形式でアップしています.

xmodmap.txt
  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

参考にしたサイト

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1