「キーボード入力」の版間の差分
(ページの作成:「Category:キーボード設定 de:Hotkeys en:Keyboard input ru:Keyboard input {{Related articles start}} {{Related|特別なキーボードキー}} {{Rela…」) |
細 (リンクを修正) |
||
(2人の利用者による、間の6版が非表示) | |||
2行目: | 2行目: | ||
[[de:Hotkeys]] |
[[de:Hotkeys]] |
||
[[en:Keyboard input]] |
[[en:Keyboard input]] |
||
+ | [[pt:Keyboard input]] |
||
[[ru:Keyboard input]] |
[[ru:Keyboard input]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
8行目: | 9行目: | ||
{{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]]. |
||
− | #* |
+ | #* [[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. |
||
− | + | 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行目: | 27行目: | ||
=== 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 を使う === |
||
− | + | 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行目: | 44行目: | ||
}} |
}} |
||
+ | {{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 |
||
− | + | 必要な''スキャンコード''は {{ic|0xa0}} です。 |
|
== キーコードを確認する == |
== キーコードを確認する == |
||
− | + | 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. |
||
+ | {{hc|$ xev {{!}} awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'| |
||
− | With the following command you can start ''xev'' and show only the relevant parts: |
||
+ | 38 a |
||
+ | 55 v |
||
+ | 54 c |
||
+ | 50 Shift_L |
||
+ | 133 Super_L |
||
+ | 135 Menu |
||
+ | }} |
||
+ | [[Xbindkeys#キーコードの確認|Xbindkeys]] は ''xev'' のラッパで、''キーコード''を報告します。 |
||
− | $ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }' |
||
+ | キーを押してもターミナルに何も表示されない場合、キーに''スキャンコード''が設定されていないか''スキャンコード''が''キーコード''にマッピングされていない、あるいは他のプロセスがキーの押下をキャプチャしています。X サーバーを使用しているプロセスがキーの押下を取得してしまっているようなときは、クリーンな X セッションから ''xev'' を実行してみてください: |
||
− | Here is an example output: |
||
+ | $ xinit /usr/bin/xterm -- :1 |
||
− | 38 a |
||
− | 55 v |
||
− | 54 c |
||
− | 50 Shift_L |
||
− | 133 Super_L |
||
− | 135 Menu |
||
+ | == VIA 互換キーボードの設定 == |
||
− | [[Xbindkeys#Identifying keycodes|Xbindkeys]] is another wrapper to ''xev'' that reports ''keycodes''. |
||
+ | [https://www.caniusevia.com/ VIA] は、VIA と互換性のあるキーボードでキーを直接再マッピングするプログラムです。互換性のあるキーボードを持っている場合、キーボードがブラウザから認識されるようにし、キーボードをオンラインにするために、''hidraw'' ドライバを通してアクセスされるデバイスのパーミッションを変更するカスタムの [[udev]] ルールを追加する必要があります。 |
||
− | 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: |
||
+ | {{Note|この方法はセキュリティ上のリスクがあるかもしれません。}} |
||
− | $ xinit /usr/bin/xterm -- :1 |
||
+ | |||
+ | 以下の [[udev ルール]]を[[作成]]してください: |
||
+ | |||
+ | {{hc|/etc/udev/rules.d/99-via.rules|2=KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"}} |
||
+ | |||
+ | このルールを適用するには、以下のようにして ''udev'' を再ロードする必要があります: |
||
+ | |||
+ | # udevadm control --reload |
||
== 参照 == |
== 参照 == |
||
− | * [https://kbd-project.org/ kbd-project - showkeys ユーティリティの公式ページ |
+ | * [https://kbd-project.org/ kbd-project] - showkeys ユーティリティの公式ページ |
* [https://git.sr.ht/~sircmpwn/wev wev] - xorg の xev に似た wayland イベントビューア |
* [https://git.sr.ht/~sircmpwn/wev wev] - xorg の xev に似た wayland イベントビューア |
||
+ | * [[interception-tools]] - キーボード入力マッピングの挙動の制御とカスタマイズを行うユーティリティのセット |
||
+ | * [https://github.com/kmonad/kmonad kmonad] - キーの再バインドと再マッピングを行う高度なデーモン |
||
+ | * [https://github.com/snyball/Hawck Hawck] - キー再バインドを行うもう一つのデーモン |
||
+ | * [https://github.com/rvaiya/keyd keyd] - シンプルなキー再バインドデーモン |
||
+ | * [https://get.vial.today/manual/linux-udev.html#device-specific-udev-rules Vial] - VIA のスタンドアローンなプログラム |
||
+ | |||
+ | {{TranslationStatus|Keyboard input|2023-08-11|785182}} |
2023年12月14日 (木) 16:45時点における最新版
関連記事
キーマッピングを変更する前に、キーを押して記号が入力される過程を知っておく必要があります:
- キーボードがコンピュータにスキャンコードを送信する。
- Linux カーネルがスキャンコードを キーコード にマッピングする。スキャンコードをキーコードにマップ を見てください。
- キーボードレイアウトによりキーコードが記号あるいは キーシム にマッピングされる (どの修飾キーが押されているかに依存します)。
- Linux コンソールの場合は コンソールでのキーボード設定 を見てください。
- Xorg と Wayland の場合は Xorg でのキーボード設定 を見てください。
ほとんどのキーにはすでに キーコード が割り当てられています (少なくとも スキャンコード は割り当てられています)。スキャンコード が存在しないキーはカーネルによって認識されません。ゲーミングキーボードに追加されているキーなどでスキャンコードがないことがあります。
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 ------------
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 によって使用されるキーコードは 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
Xbindkeys は xev のラッパで、キーコードを報告します。
キーを押してもターミナルに何も表示されない場合、キーにスキャンコードが設定されていないかスキャンコードがキーコードにマッピングされていない、あるいは他のプロセスがキーの押下をキャプチャしています。X サーバーを使用しているプロセスがキーの押下を取得してしまっているようなときは、クリーンな X セッションから xev を実行してみてください:
$ xinit /usr/bin/xterm -- :1
VIA 互換キーボードの設定
VIA は、VIA と互換性のあるキーボードでキーを直接再マッピングするプログラムです。互換性のあるキーボードを持っている場合、キーボードがブラウザから認識されるようにし、キーボードをオンラインにするために、hidraw ドライバを通してアクセスされるデバイスのパーミッションを変更するカスタムの udev ルールを追加する必要があります。
/etc/udev/rules.d/99-via.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"
このルールを適用するには、以下のようにして udev を再ロードする必要があります:
# udevadm control --reload
参照
- kbd-project - showkeys ユーティリティの公式ページ
- wev - xorg の xev に似た wayland イベントビューア
- interception-tools - キーボード入力マッピングの挙動の制御とカスタマイズを行うユーティリティのセット
- kmonad - キーの再バインドと再マッピングを行う高度なデーモン
- Hawck - キー再バインドを行うもう一つのデーモン
- keyd - シンプルなキー再バインドデーモン
- Vial - VIA のスタンドアローンなプログラム