「キーボード入力」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:キーボード設定 de:Hotkeys en:Keyboard input ru:Keyboard input {{Related articles start}} {{Related|特別なキーボードキー}} {{Rela…」)
 
(翻訳)
8行目: 8行目:
 
{{Related articles end}}
 
{{Related articles end}}
   
キーマッピングを変更する前に、キーを押した結果どの記号になを知っておく必要があります:
+
キーマッピングを変更する前に、キーを押し記号が入力され過程を知っておく必要があります:
   
  +
# キーボードがコンピュータに[[Wikipedia:ja:スキャンコード|スキャンコード]]を送信する。
# The keyboard sends a [[Wikipedia:Scancode|scancode]] to the computer.
 
  +
# Linux カーネルがスキャンコードを '''キーコード''' にマッピングする。[[スキャンコードをキーコードにマップ]] を見てください。
# The Linux kernel maps the scancode to a '''keycode''', see [[Map scancodes to keycodes]].
 
  +
# [[Wikipedia:ja:キー配列|キーボードレイアウト]]によりキーコードが記号あるいは '''キーシム''' にマッピングされる (どの[[Wikipedia:ja:修飾キー|修飾キー]]が押されているかに依存します)。
# The [[Wikipedia:Keyboard layout|keyboard layout]] maps the keycode to a symbol or '''keysym''', depending on what [[Wikipedia:Modifier key|modifier keys]] are pressed.
 
  +
#* [[Linux コンソール]]の場合は [[コンソールでのキーボード設定]] を見てください。
#* For the [[Linux console]], see [[Linux console/Keyboard configuration]].
 
#* For [[Xorg]] and [[Wayland]], see [[Xorg/Keyboard configuration]].
+
#* [[Xorg]] [[Wayland]] の場合は [[Xorg でのキーボード設定]] を見てください。
   
  +
ほとんどのキーにはすでに ''キーコード'' が割り当てられています (少なくとも ''スキャンコード'' は割り当てられています)。''スキャンコード'' が存在しないキーはカーネルによって認識されません。ゲーミングキーボードに追加されているキーなどで''スキャンコード''がないことがあります。
Most of your keys should already have a ''keycode'', or at least a ''scancode''. Keys without a ''scancode'' are not recognized by the kernel; these can include additional keys from "gaming" keyboards, etc.
 
   
In Xorg, some ''keysyms'' (e.g. {{ic|XF86AudioPlay}}, {{ic|XF86AudioRaiseVolume}} etc.) can be mapped to actions (i.e. launching an external application). See [[Keyboard shortcuts#Xorg]] for details.
+
Xorg では、特定の''キーシム'' (例: {{ic|XF86AudioPlay}}, {{ic|XF86AudioRaiseVolume}} など) をアクションにマップすることができます (例: 外部アプリケーションの起動)。詳しくは [[キーボードショートカット#Xorg]] を見て下さい。
   
  +
Linux コンソールでは、特定の''キーシム'' (例: {{ic|F1}} から {{ic|F246}}) を特定のアクションにマップすることができます (例: 他のコンソールへの切り替えや特定の文字列の打ち込みなど)。詳しくは [[コンソールでのキーボード設定#カスタムキーマップの作成]] を見て下さい。
In Linux console, some ''keysyms'' (e.g. {{ic|F1}} to {{ic|F246}}) can be mapped to certain actions (e.g. switch to other console or print some sequence of characters). See [[Console keyboard configuration#Creating a custom keymap]] for details.
 
   
 
== スキャンコードの確認 ==
 
== スキャンコードの確認 ==
26行目: 26行目:
 
=== showkey を使う ===
 
=== showkey を使う ===
   
  +
''スキャンコード''を取得するときは {{man|1|showkey}} ユーティリティを使うのが一般的です。''showkey'' はキーが押されるまで待機し、10秒たってもキーが押されなかった場合、終了します。''showkey'' を使用するには[[Wikipedia:ja:仮想コンソール|仮想端末]]上で実行させる必要があり、グラフィカル環境やネットワーク接続を介してログインした場合は使用できません。次のコマンドを実行してください:
The traditional way to get a ''scancode'' is to use the {{man|1|showkey}} utility. ''showkey'' waits for a key to be pressed, or exits if no keys are pressed within 10 seconds. For ''showkey'' to work you need to be in a [[Wikipedia:Virtual console|virtual console]], not in a graphical environment or logged in via a network connection. Run the following command:
 
   
 
# showkey --scancodes
 
# showkey --scancodes
   
  +
コマンドを実行した後にキーボードのキーを押してみて下さい。''スキャンコード''が出力されます。
and try to push keyboard keys; you should see ''scancodes'' being printed to the output.
 
   
 
=== evtest を使う ===
 
=== evtest を使う ===
   
For USB keyboards, it is apparently necessary to use {{man|1|evtest}} from the {{Pkg|evtest}} package instead of ''showkey'' [https://web.archive.org/web/20210620050100/https://askbot.fedoraproject.org/en/question/46201/how-to-map-scancodes-to-keycodes/]:
+
USB キーボードの場合、''showkey'' ではなく {{Pkg|evtest}} パッケージに入っている {{man|1|evtest}} を使う必要があります [https://web.archive.org/web/20210620050100/https://askbot.fedoraproject.org/en/question/46201/how-to-map-scancodes-to-keycodes/]:
   
 
{{hc|# evtest /dev/input/event12|
 
{{hc|# evtest /dev/input/event12|
43行目: 43行目:
 
}}
 
}}
   
  +
{{Tip|興味のあるデバイスがどのイベント番号かわからない場合、パラメータなしで {{ic|evtest}} を実行することで、イベント番号とともにデバイスの一覧を表示します。そして、必要な番号を入力できます。}}
{{Tip|If you do not know which event number has device of your interest, you can run {{ic|evtest}} without parameters and it will show you list of devices with their event numbers, then you can enter needed number.}}
 
   
  +
{{ic|MSC_SCAN}} の "value" フィールドを使って下さい。上記の例の場合、NumLock のスキャンコードは 70053 でキーコードは 69 です。
Use the "value" field of {{ic|MSC_SCAN}}. This example shows that NumLock has scancode 70053 and keycode 69.
 
   
 
=== dmesg を使う ===
 
=== dmesg を使う ===
   
  +
{{Note|この方法は未知のキーを確認するだけです。}}
{{Note|This method only identifies unknown keys.}}
 
   
  +
調べたいキーを押して [[dmesg]] コマンドの出力を確認することでキーの''スキャンコード''を取得できます。例えば、以下のように表示された場合:
You can get the ''scancode'' of a key by pressing the desired key and looking at the output of [[dmesg]]. For example, if you get:
 
   
 
Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0
 
Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0
   
then the ''scancode'' you need is {{ic|0xa0}}.
+
必要な''スキャンコード'' {{ic|0xa0}} です。
   
 
== キーコードを確認する ==
 
== キーコードを確認する ==
   
The Linux keycodes are defined in {{ic|/usr/include/linux/input-event-codes.h}} (see the {{ic|KEY_}} variables).
+
Linux のキーコードは {{ic|/usr/include/linux/input-event-codes.h}} で定義されています ({{ic|KEY_}} 変数を見てください)
   
 
=== コンソールでキーコードを確認する ===
 
=== コンソールでキーコードを確認する ===
   
  +
[[仮想コンソール]]の''キーコード''は {{man|1|showkey}} ユーティリティを使って確認できます。''showkey'' はキーが押されるのを待機して、10秒間何もないと終了します。10秒間放置する以外に終了する方法はありません。''showkey'' は仮想端末から実行する必要があります。グラフィカル環境から実行してはいけません。次のコマンドを実行して何かキーボードのキーを押して見て下さい:
The ''keycodes'' for [[virtual console]] are reported by the {{man|1|showkey}} utility. ''showkey'' waits for a key to be pressed and if none are, in a span of 10 seconds, it quits. To execute ''showkey'', you need to be in a virtual console, not in a graphical environment. Run the following command:
 
   
 
# showkey --keycodes
 
# showkey --keycodes
   
  +
コマンドを実行した後にキーボードのキーを押してみて下さい。''スキャンコード''が出力されます。
and try to push keyboard keys; you should see ''keycodes'' being printed to the output.
 
   
 
=== Xorg でキーコードを確認する ===
 
=== Xorg でキーコードを確認する ===
   
  +
{{Note|Xorg の ''キーコード''の値は Linux の ''キーコード'' よりも +8 大きいです。[https://gitlab.freedesktop.org/xorg/driver/xf86-input-evdev/-/blob/master/src/evdev.c]}}
{{Expansion|xev also reports keysyms. Mention that you need to focus the "Event Tester" window.}}
 
   
  +
[[Xorg]] によって使用される''キーコード''は {{man|1|xev}} という名前のユーティリティで判別できます ({{Pkg|xorg-xev}} パッケージに入っています)。もちろん ''xev'' を使用するには、コンソールではなくグラフィカル環境から実行する必要があります。
{{Note|The Xorg ''keycodes'' are 8 larger than the Linux ''keycodes''.[https://gitlab.freedesktop.org/xorg/driver/xf86-input-evdev/-/blob/master/src/evdev.c]}}
 
   
  +
次のコマンドで ''xev'' を起動して肝心の部分だけを表示できます:
The ''keycodes'' used by [[Xorg]] are reported by a utility called {{man|1|xev}}, which is provided by the {{Pkg|xorg-xev}} package. Of course to execute ''xev'', you need to be in a graphical environment, not in the console.
 
 
With the following command you can start ''xev'' and show only the relevant parts:
 
   
 
$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
 
$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
   
  +
出力例:
Here is an example output:
 
   
 
38 a
 
38 a
90行目: 88行目:
 
135 Menu
 
135 Menu
   
[[Xbindkeys#Identifying keycodes|Xbindkeys]] is another wrapper to ''xev'' that reports ''keycodes''.
+
[[Xbindkeys#キーコードの確認|Xbindkeys]] ''xev'' のラッパで、''キーコード''を報告します。
   
  +
キーを押してもターミナルに何も表示されない場合、キーに''スキャンコード''が設定されていないか''スキャンコード''が''キーコード''にマッピングされていない、あるいは他のプロセスがキーの押下をキャプチャしています。X サーバーを使用しているプロセスがキーの押下を取得してしまっているようなときは、クリーンな X セッションから ''xev'' を実行してみてください:
If you press a key and nothing appears in the terminal, it means that either the key does not have a ''scancode'', the ''scancode'' is not mapped to a ''keycode'', or some other process is capturing the keypress. If you suspect that a process listening to X server is capturing the keypress, you can try running ''xev'' from a clean X session:
 
   
 
$ xinit /usr/bin/xterm -- :1
 
$ xinit /usr/bin/xterm -- :1

2022年9月20日 (火) 17:20時点における版

関連記事

キーマッピングを変更する前に、キーを押して記号が入力される過程を知っておく必要があります:

  1. キーボードがコンピュータにスキャンコードを送信する。
  2. Linux カーネルがスキャンコードを キーコード にマッピングする。スキャンコードをキーコードにマップ を見てください。
  3. キーボードレイアウトによりキーコードが記号あるいは キーシム にマッピングされる (どの修飾キーが押されているかに依存します)。

ほとんどのキーにはすでに キーコード が割り当てられています (少なくとも スキャンコード は割り当てられています)。スキャンコード が存在しないキーはカーネルによって認識されません。ゲーミングキーボードに追加されているキーなどでスキャンコードがないことがあります。

Xorg では、特定のキーシム (例: XF86AudioPlay, XF86AudioRaiseVolume など) をアクションにマップすることができます (例: 外部アプリケーションの起動)。詳しくは キーボードショートカット#Xorg を見て下さい。

Linux コンソールでは、特定のキーシム (例: F1 から F246) を特定のアクションにマップすることができます (例: 他のコンソールへの切り替えや特定の文字列の打ち込みなど)。詳しくは コンソールでのキーボード設定#カスタムキーマップの作成 を見て下さい。

スキャンコードの確認

showkey を使う

スキャンコードを取得するときは showkey(1) ユーティリティを使うのが一般的です。showkey はキーが押されるまで待機し、10秒たってもキーが押されなかった場合、終了します。showkey を使用するには仮想端末上で実行させる必要があり、グラフィカル環境やネットワーク接続を介してログインした場合は使用できません。次のコマンドを実行してください:

# showkey --scancodes

コマンドを実行した後にキーボードのキーを押してみて下さい。スキャンコードが出力されます。

evtest を使う

USB キーボードの場合、showkey ではなく evtest パッケージに入っている evtest(1) を使う必要があります [1]:

# evtest /dev/input/event12
...
Event: time 1434666536.001123, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70053
Event: time 1434666536.001123, type 1 (EV_KEY), code 69 (KEY_NUMLOCK), value 0
Event: time 1434666536.001123, -------------- EV_SYN ------------
ヒント: 興味のあるデバイスがどのイベント番号かわからない場合、パラメータなしで evtest を実行することで、イベント番号とともにデバイスの一覧を表示します。そして、必要な番号を入力できます。

MSC_SCAN の "value" フィールドを使って下さい。上記の例の場合、NumLock のスキャンコードは 70053 でキーコードは 69 です。

dmesg を使う

ノート: この方法は未知のキーを確認するだけです。

調べたいキーを押して dmesg コマンドの出力を確認することでキーのスキャンコードを取得できます。例えば、以下のように表示された場合:

Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0

必要なスキャンコード0xa0 です。

キーコードを確認する

Linux のキーコードは /usr/include/linux/input-event-codes.h で定義されています (KEY_ 変数を見てください)。

コンソールでキーコードを確認する

仮想コンソールキーコードshowkey(1) ユーティリティを使って確認できます。showkey はキーが押されるのを待機して、10秒間何もないと終了します。10秒間放置する以外に終了する方法はありません。showkey は仮想端末から実行する必要があります。グラフィカル環境から実行してはいけません。次のコマンドを実行して何かキーボードのキーを押して見て下さい:

# showkey --keycodes

コマンドを実行した後にキーボードのキーを押してみて下さい。スキャンコードが出力されます。

Xorg でキーコードを確認する

ノート: Xorg の キーコードの値は Linux の キーコード よりも +8 大きいです。[2]

Xorg によって使用されるキーコードxev(1) という名前のユーティリティで判別できます (xorg-xev パッケージに入っています)。もちろん xev を使用するには、コンソールではなくグラフィカル環境から実行する必要があります。

次のコマンドで xev を起動して肝心の部分だけを表示できます:

$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'

出力例:

38  a
55  v
54  c
50  Shift_L
133 Super_L
135 Menu

Xbindkeysxev のラッパで、キーコードを報告します。

キーを押してもターミナルに何も表示されない場合、キーにスキャンコードが設定されていないかスキャンコードキーコードにマッピングされていない、あるいは他のプロセスがキーの押下をキャプチャしています。X サーバーを使用しているプロセスがキーの押下を取得してしまっているようなときは、クリーンな X セッションから xev を実行してみてください:

$ xinit /usr/bin/xterm -- :1

参照