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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎コンソールでキーコードを確認する: 仮想端末を仮想コンソールに修正)
(同期)
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 の ''キーコード''の値は Linux の ''キーコード'' よりも +8 大きす。[https://gitlab.freedesktop.org/xorg/driver/xf86-input-evdev/-/blob/master/src/evdev.c]}}
+
{{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'' を起動して肝心の部分だけを表示できます:
   
$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
+
{{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 rules|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|2022-09-20|747564}}
+
{{TranslationStatus|Keyboard input|2023-08-11|784367}}

2023年8月11日 (金) 20:56時点における版

関連記事

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

  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

VIA 互換キーボードの設定

VIA は、VIA と互換性のあるキーボードでキーを直接再マッピングするプログラムです。互換性のあるキーボードを持っている場合、キーボードがブラウザから認識されるようにし、キーボードをオンラインにするために、hidraw ドライバを通してアクセスされるデバイスのパーミッションを変更するカスタムの udev ルールを追加する必要があります。

ノート: この方法はセキュリティ上のリスクがあるかもしれません。

以下の 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 のスタンドアローンなプログラム
翻訳ステータス: このページは en:Keyboard input の翻訳バージョンです。最後の翻訳日は 2023-08-11 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。