開発ツールを整える
初級US・JISキーボード配列を整える。
= SSHで「@」が「[」になる事故を、逆引きと図で防ぐ
キーボード配列が初めての方は、先に そもそもキーボード配列とは・どんな場面で使うか をどうぞ。
「サーバー側」は、キー入力を実際に解釈している側を指します。ローカルOSのキーボード配列設定のこともあれば、リモートのコンソール/仮想KVM・VNC経由でサーバーのキーマップ(setxkbmap/loadkeys等)が直接効くこともあり、経路は環境によって変わります。共通しているのは「物理キーの位置」と「それをどちらの配列として解釈するか」がズレると記号が変わる、という点です。
① 打ちたい文字 ⇄ 押すキー
対象は英字・数字を除く記号キー(@ [ ] { } \ | _ " ' = + * ^ ~ ` & ( ) : ; < > ? / - と、JIS固有の ¥・ろ)。英字・数字はJIS/USでズレないため対象外です。
上の記号をクリックするか、文字を入力してください。
打ちたい文字
押すキー(手元のキーに印字された文字で)
- 場所
- 刻印
- 「」
- キーコード
(KeyboardEvent.code。Chrome リモートデスクトップのキーマッピング等で使う名前)
この設定でその文字を出せる物理キーが見つかりませんでした(対応表に無いか、サーバー側にその記号の割り当てがありません)。
手元キーボードでの刻印(参考)
「」のつもりで押すと…
サーバー側の解釈で実際に入力される文字
② 配列図で見る
記号キーだけを色分け表示。オレンジ=JISとUSで出力が違う(またはどちらかにしかない)キー、グレー=同じキー。クリックで両配列の出力と、今の設定でこのキーを押した結果を表示します。
上の図の記号キーをクリックすると、詳細がここに出ます。
位置:
JIS配列での刻印
/ Shift:
US配列での刻印
/ Shift:
今の設定(手元・サーバー)でこのキーをShiftなしで押すと:
Shiftを押しながらだと:
JIS / US 記号キー対応表(全23キー)
物理キーの位置ごとに、JIS配列とUS配列でそれぞれ何が出るかの一覧です。左右で出る文字が違うキーに印を付けています。キーコードは KeyboardEvent.code で、Chrome リモートデスクトップのキーマッピング設定などで使う名前です。
| キーの位置 | JIS(通常 / Shift) | US(通常 / Shift) | キーコード |
|---|---|---|---|
| 数字キー列の左端 | このキーは無い | ` / ~ ズレる | Backquote |
| 数字「1」の位置 | 1 / ! | 1 / ! | Digit1 |
| 数字「2」の位置 | 2 / " | 2 / @ ズレる | Digit2 |
| 数字「3」の位置 | 3 / # | 3 / # | Digit3 |
| 数字「4」の位置 | 4 / $ | 4 / $ | Digit4 |
| 数字「5」の位置 | 5 / % | 5 / % | Digit5 |
| 数字「6」の位置 | 6 / & | 6 / ^ ズレる | Digit6 |
| 数字「7」の位置 | 7 / ' | 7 / & ズレる | Digit7 |
| 数字「8」の位置 | 8 / ( | 8 / * ズレる | Digit8 |
| 数字「9」の位置 | 9 / ) | 9 / ( ズレる | Digit9 |
| 数字「0」の位置 | 0 / — | 0 / ) ズレる | Digit0 |
| 「0」の右隣 | - / = | - / _ ズレる | Minus |
| さらにその右(JISでは¥キーの左、USではBackspaceの手前) | ^ / ~ | = / + ズレる | Equal |
| Backspaceの手前(JIS固有キー) | ¥ / | | このキーは無い ズレる | IntlYen |
| 「P」の右隣 | @ / ` | [ / { ズレる | BracketLeft |
| ひとつ右のキー(Pから2つ右) | [ / { | ] / } ズレる | BracketRight |
| (US)アルファベット最上段の行末/(JIS)Enterの左 | ] / } | \ / | ズレる | Backslash |
| 「L」の右隣 | ; / + | ; / : ズレる | Semicolon |
| ひとつ右のキー(Enterの左) | : / * | ' / " ズレる | Quote |
| 「M」の右隣 | , / < | , / < | Comma |
| Commaの右隣 | . / > | . / > | Period |
| Periodの右隣 | / / ? | / / ? | Slash |
| Slashの右、右Shiftの手前(JIS固有キー・刻印「ろ」) | \ / _ | このキーは無い ズレる | IntlRo |
「—」はその配列でShift(または通常)に文字が割り当てられていないことを、「このキーは無い」はその配列に物理キー自体が存在しないことを表します。英字・数字はJIS/USでズレないため一覧から外しています。
③ サーバー側の配列を直す
ズレの元を断つには、サーバー側(またはコンソール)の配列設定を、手元のキーボードに合わせます。コマンドやファイルの場所はディストリビューションによって異なるため、以下は代表的なコマンドです。
X Window System(デスクトップ環境のGUIログイン中)
ログイン中のセッションだけ即座に切り替わる。再起動やログアウトで元に戻る設定と、恒久設定は別(ディストリごとに設定ファイルの場所が違うため個別に確認)。
US配列にする
setxkbmap us 日本語JIS配列にする
setxkbmap jp systemd(localectl・要root)
コンソール(TTY)とX11の既定値を設定に書き込む。反映のタイミングや対象範囲はディストリビューションの設定次第。
US配列にする
sudo localectl set-keymap us 日本語JIS配列にする(106/109キーボード)
sudo localectl set-keymap jp106 コンソール(TTY)個別に切り替え
ログイン中のTTYだけ即座に切り替わる、より低レベルなコマンド。
US配列にする
sudo loadkeys us 日本語JIS配列にする
sudo loadkeys jp106 確認だけしたいとき(設定は変えない)
実際に押したキーが何と解釈されているかをその場で確認できる。設定変更の前に「今どうなっているか」を見るのに使う。
端末上でキーコードを確認
showkey X11でキーイベントを確認
xev そもそもキーボード配列(JIS と US)とは
同じ「@」でも、押すキーの場所が国ごとに違う。
キーボードの文字の並びを配列といいます。日本の標準は JIS 配列(JIS = Japanese Industrial Standards、日本産業規格)で、アメリカで一般的なのが US 配列(ANSI 規格に基づく)です。数字や英字の位置はほぼ同じですが、@ " _ | などの記号は、置かれている場所が違います。たとえば @ は、JIS では P の右隣のキーですが、US では Shift を押しながら 2 のキーです。
もう一つ大事なのは、キーに刻まれた印字と、パソコンやサーバーが「このキーは何の文字」と解釈する設定は別物だという点です。手元は JIS のキーボードでも、接続先が US 配列のつもりで受け取ると、押した文字と画面に出る文字がずれます。
どこで・どんな場面で使うか
-
SSH でリモートサーバーに入るとき
手元は JIS なのに、サーバー側が US 配列の設定で、
@を打つと別の文字が出る、という事故が起きます。 -
クラウドや仮想マシンを初めて立ち上げたとき
最初のコンソール画面は、US 配列のまま始まることが多く、記号が打てずに戸惑います。
-
US 配列のノートパソコンを日本語環境で使うとき
海外で買った機種や、プログラマー向けに US 配列を選んだ人は、日本語の変換キーの扱いも含めて設定を合わせる必要があります。
-
リモートデスクトップや仮想画面から操作するとき
手元と画面の向こうで、それぞれ別の配列設定になっていると、文字がずれて入力されます。
-
見えないパスワードを打つとき
入力した文字が画面に出ないため、記号がずれていても気づけず、何度やってもログインできません。
知らないと何が困るか
- 「パスワードが違う」と何度も言われる。原因はパスワードではなく配列のずれ。気づくまでに時間を失い、場合によってはロックされます。
- コマンドが打てない。パイプ(縦線)やアンダースコアなど、コマンド操作で多用する記号が出ずに、作業が止まります。
- 直し方が分からず、遠回りする。設定を変えれば済むのに、打ちやすいキーを探して手元で工夫し続けることになります。
上のツールで、いまの配列を選び、打ちたい記号を入れて、どのキーを押せばよいか確かめてみてください。
対応表の根拠と対象範囲
推測で埋めず、標準配列だけを載せています。
- 対応表は標準的な JIS(日本語 106/109・Windows/Linux向け)とUS(ANSI 104)の配列を根拠にしています。数字・記号キーの刻印は、この2配列であれば機種を問わずほぼ共通です。
- Mac の JIS キーボードは対象外です。 Mac の JIS キーボードは ¥ と \ の扱いなど、Windows/Linux 向け JIS と一部異なる点があり、本ツールは対応していません。Mac をお使いの場合は目安程度にご覧ください。
- 英字(A〜Z)と数字(0〜9 の数字そのもの)は JIS/US でズレないため、対応表・逆引きの対象から外しています。
- JIS の ¥ キー(IntlYen)は、環境によって ¥ ではなく \(バックスラッシュ)として扱われることがあります(Shift-JISの歴史的な経緯によるもので、本ツールでは標準的な刻印どおり ¥ / Shift+| として扱っています)。
- 自信の持てない挙動(例:JISの「半角/全角」キーが実際に何を送るか)は載せていません。空欄・注記のままにしてあります。
🔒 配列の選択・文字の入力・キーの選択はすべてこの端末(ブラウザ)の中だけで処理します。サーバーには何も送信しません(送信ゼロ)。
このツールについて
SSHでリモートサーバーに入ったとき、手元の物理キーボード(JIS/US)とサーバー側が解釈する配列が食い違うと、@ を打ったつもりが [ になる、_ や | が出ない、といった事故が起きます。「打ちたい文字→今の環境で押すべきキー」を逆引きし、配列の違いを図で見せ、直すコマンドまで揃えました。対応表はWindows/Linux向けのJIS 106/109とUS ANSI 104配列が根拠です。入力はこの端末から一切出ません(送信ゼロ)。
SSHで @ が [ になるような配列ズレ事故を防ぐ。「打ちたい文字→押すキー」を逆引きし、「押したキー→実際に出る文字」も確認。配列図をクリックで比較、setxkbmap/localectl/loadkeysの直し方コマンドつき。根拠はWindows/Linux向けJIS 106/109とUS ANSI 104(Mac JISは対象外)。
主な機能
- 「打ちたい文字→押すキー」の逆引き(@ [ ] { } \ | _ " ' = + * ^ ~ ` & ( ) : ; < > ? / - とJIS固有の¥・ろに対応)
- 「押したキー→実際に出る文字」の順引きも同じ画面で確認
- JIS/US配列図を左右に並べて色分け表示、クリックで両配列の出力を比較
- 同じ配列同士(JIS-JIS・US-US)はズレ無しと明示
- setxkbmap/localectl/loadkeysなど状況別の直し方コマンドをコピーボタン付きで掲載
- 対応表はWindows/Linux向けJIS 106/109とUS ANSI 104が根拠(Mac JISは対象外と明記)・送信ゼロ
よくある質問
Q. なぜ SSH でリモートに入ると @ が [ になるのですか?
A. キーボードは物理的な位置(スキャンコード)を送るだけで、それを「どの文字にするか」は配列(JIS/US)の設定側が決めています。手元がJISキーボードで、サーバー側がUS配列として解釈する設定になっていると、JISの「@」キー(Pの右隣・Shiftなし)は、US配列では「[」の位置と同じ物理キーなので「[」と解釈されます。逆に、その位置をUS配列で「@」にするにはShift+2を押す必要があります(本ツールの逆引きが示すとおりです)。原因は「打ち間違い」ではなく、物理キーの位置と、それをどちらの配列として解釈するかのズレです。
Q. 今使っているのがJISとUSどちらの配列か調べるには?
A. 手元のキーボードは見た目で判断できます。JISキーボードは¥キーや「ろ」「無変換」「変換」「カタカナひらがな」などの日本語専用キーがあり、キー数が多め(106/109)です。USキーボードにはこれらが無く、Enterキーの左に大きめの記号キー(\ |)があります。サーバー側の設定は、Linuxなら `localectl status`(Xやコンソールの既定を表示)や、Xが動いていれば `setxkbmap -query` で今の設定を確認できます。手っ取り早く確かめたいときは、Shift+2を押して「"」と「@」のどちらが入力されるかを見る方法もあります(JISなら"、USなら@)。
Q. JISキーボードの¥キーを押すと \(バックスラッシュ)になるのはなぜですか?
A. 歴史的な経緯によるものです。日本語の文字コード(Shift-JIS)は、ASCIIのバックスラッシュ(0x5C)の位置に¥記号の意味を重ねて使ってきたため、環境によっては¥キーを押しても内部的には\として扱われることがあります。本ツールの対応表では、JISキーボードに刻印されている標準どおり「¥(Shiftで|)」として扱っていますが、実際の入力結果は環境(OS・フォント・アプリ)によって¥表示のままのこともあれば\として扱われることもある、という点は覚えておくと混乱を避けられます。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。