「キーボード入力」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→コンソールでキーコードを確認する: 仮想端末を仮想コンソールに修正) |
細 (リンクを修正) |
||
(同じ利用者による、間の2版が非表示) | |||
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}} |
||
71行目: | 72行目: | ||
=== Xorg でキーコードを確認する === |
=== Xorg でキーコードを確認する === |
||
− | {{Note|Xorg の ''キーコード'' |
+ | {{Note|Xorg の ''キーコード'' は Linux の ''キーコード'' と比べて 8 ビットシフトされています。[https://gitlab.freedesktop.org/xorg/driver/xf86-input-evdev/-/blob/master/src/evdev.c]}} |
[[Xorg]] によって使用される''キーコード''は {{man|1|xev}} という名前のユーティリティで判別できます ({{Pkg|xorg-xev}} パッケージに入っています)。もちろん ''xev'' を使用するには、コンソールではなくグラフィカル環境から実行する必要があります。 |
[[Xorg]] によって使用される''キーコード''は {{man|1|xev}} という名前のユーティリティで判別できます ({{Pkg|xorg-xev}} パッケージに入っています)。もちろん ''xev'' を使用するには、コンソールではなくグラフィカル環境から実行する必要があります。 |
||
77行目: | 78行目: | ||
次のコマンドで ''xev'' を起動して肝心の部分だけを表示できます: |
次のコマンドで ''xev'' を起動して肝心の部分だけを表示できます: |
||
− | + | {{hc|$ 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 |
||
− | 38 a |
||
+ | 133 Super_L |
||
− | 55 v |
||
+ | 135 Menu |
||
− | 54 c |
||
+ | }} |
||
− | 50 Shift_L |
||
− | 133 Super_L |
||
− | 135 Menu |
||
[[Xbindkeys#キーコードの確認|Xbindkeys]] は ''xev'' のラッパで、''キーコード''を報告します。 |
[[Xbindkeys#キーコードの確認|Xbindkeys]] は ''xev'' のラッパで、''キーコード''を報告します。 |
||
93行目: | 92行目: | ||
$ xinit /usr/bin/xterm -- :1 |
$ xinit /usr/bin/xterm -- :1 |
||
+ | |||
+ | == VIA 互換キーボードの設定 == |
||
+ | |||
+ | [https://www.caniusevia.com/ VIA] は、VIA と互換性のあるキーボードでキーを直接再マッピングするプログラムです。互換性のあるキーボードを持っている場合、キーボードがブラウザから認識されるようにし、キーボードをオンラインにするために、''hidraw'' ドライバを通してアクセスされるデバイスのパーミッションを変更するカスタムの [[udev]] ルールを追加する必要があります。 |
||
+ | |||
+ | {{Note|この方法はセキュリティ上のリスクがあるかもしれません。}} |
||
+ | |||
+ | 以下の [[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| |
+ | {{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 のスタンドアローンなプログラム