「特別なキーボードキー」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
51行目: 51行目:
 
==== dmesg を使う ====
 
==== dmesg を使う ====
   
  +
{{Note|この方法では全てのキーの''スキャンコード''を確認することはできません。未知のキーだけを確認できます。}}
{{Note|This method does not provide ''scancodes'' for all keys, it only identifies the unknown keys.}}
 
   
 
調べたいキーを押して {{ic|dmesg}} コマンドの出力を確認することでキーの''スキャンコード''を取得できます。例えば、以下のように表示された場合:
 
調べたいキーを押して {{ic|dmesg}} コマンドの出力を確認することでキーの''スキャンコード''を取得できます。例えば、以下のように表示された場合:
61行目: 61行目:
 
=== キーコード ===
 
=== キーコード ===
   
  +
{{Warning|Linux コンソールと Xorg で''キーコード''は異なっています。適切なツールを使って確認するようにしてください。}}
{{Warning|Note that the ''keycodes'' are different for Linux console and Xorg. Use the appropriate tool to determine the desired value.}}
 
   
 
==== コンソール ====
 
==== コンソール ====
   
  +
[[Wikipedia:ja:仮想コンソール|仮想端末]]の''キーコード''は ''showkey'' ユーティリティを使って確認できます。''showkey'' はキーが押されるのを待機して、10秒間何もないと終了します。10秒間放置する以外に終了する方法はありません。''showkey'' は仮想端末から実行する必要があります。グラフィカル環境から実行してはいけません。次のコマンドを実行して何かキーボードのキーを押して見て下さい:
The ''keycodes'' for [[Wikipedia:Virtual console|virtual console]] are reported by the ''showkey'' utility. ''showkey'' waits for a key to be pressed and if none is during 10 seconds it quits, which is the only way to exit the program. 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 ====
77行目: 77行目:
 
次のコマンドで ''xev'' を起動して肝心の部分だけを表示できます:
 
次のコマンドで ''xev'' を起動して肝心の部分だけを表示できます:
   
$ xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
+
$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
   
 
出力例:
 
出力例:
   
38 a
+
38 a
27 r
+
55 v
54 c
+
54 c
  +
50 Shift_L
43 h
 
  +
133 Super_L
153 NoSymbol
 
  +
135 Menu
144 NoSymbol
 
   
  +
キーを押してもターミナルに何も表示されない場合、キーに''スキャンコード''が設定されていないか''スキャンコード''が''キーコード''にマッピングされていない、あるいは他のプロセスがキーの押下をキャプチャしています。X サーバーを使用しているプロセスがキーの押下を取得してしまっているようなときは、新しい X セッションから ''xev'' を実行してみてください:
In the example the keys {{ic|a}}, {{ic|r}}, {{ic|c}}, {{ic|h}} and two other multimedia keys were pressed. The former four keys with ''keycodes'' {{ic|38}}, {{ic|27}}, {{ic|54}} and {{ic|43}} are properly mapped, while the multimedia keys with ''keycodes'' {{ic|153}} and {{ic|144}} are not. The {{ic|NoSymbol}} indicates that no ''keysyms'' are assigned to those keys.
 
 
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
112行目: 110行目:
 
=== Asus M シリーズ ===
 
=== Asus M シリーズ ===
   
  +
Asus マシンの光学センサーやマルチメディアキーを制御するには、次のコマンドを実行してください:
In order to have control over the light sensor and the multimedia keys on your Asus machine, you should use the following command:
 
   
 
# echo 1 > /sys/devices/platform/asus_laptop/ls_switch
 
# echo 1 > /sys/devices/platform/asus_laptop/ls_switch
   
To have it run on boot create a [[Systemd#一時ファイル|Systemd tmpfile]]:
+
起動時に上記コマンドを実行させるには [[Systemd#一時ファイル|Systemd tmpfile]] を作成:
 
{{hc|/etc/tmpfiles.d/local.conf|
 
{{hc|/etc/tmpfiles.d/local.conf|
 
w /sys/devices/platform/asus_laptop/ls_switch - - - - 1
 
w /sys/devices/platform/asus_laptop/ls_switch - - - - 1
 
}}
 
}}
   
  +
{{Note|他の機種の Asus ノートパソコンでも使えることがあります。}}
{{Note|This may work also for other Asus notebook models.}}
 
   
 
=== Asus N56VJ ===
 
=== Asus N56VJ ===

2015年9月11日 (金) 14:53時点における版

関連記事

多くのキーボードには何らかの特別なキーが付いており (ホットキーマルチメディアキーとも呼ばれる)、アプリケーションを起動したり特殊な文字を打ち込むのに使われます (標準的なキーマップには含まれていない機能)。udev は様々なキーボードに関する巨大なデータベースを持っているため、基本的なキーボードは何も設定せずとも問題なく動作します。最近発売されたばかり、または非常にレアなハードウェアを使っている場合に、マッピングを手動で調整する必要がでてきます。

キーマッピングを変更する前に、そのキーがシステムでどう認識されているのか知らなくてはなりません。いくつかの段階に分かれています:

  • スキャンコードは最下層のキー識別番号で、キーボードがコンピュータに送信する値になります。
  • キーコードは2番目のキー識別子で、キーコードは機能に対応しています。
  • キーシムは3番目のキー識別子で、シンボルに対応しています。キーシムは Shift キーなどの修飾キーが押されているかどうかによって変わります。

スキャンコードキーコードにマップされており、キーコードは使用しているキーボードレイアウトにあわせてキーシムにマップされています。ほとんどのキーにはキーコードが割り当てられているはずです。そして、キーコードがなくともスキャンコードは存在するでしょう。スキャンコードが存在しないキーはカーネルによって認識されていません。ゲーミングキーボードに追加されているキーなどでスキャンコードがないことがあります。

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

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

キーコードの確認

スキャンコード

showkey を使う

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

# showkey --scancodes

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

evtest を使う

USB キーボードの場合、showkey ではなく evtest パッケージに入っている evtest を使う必要があります [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 コンソールと Xorg でキーコードは異なっています。適切なツールを使って確認するようにしてください。

コンソール

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

# showkey --keycodes

キーコードが画面に出力されるはずです。

Xorg

Xorg によって使用されるキーコードxev という名前のユーティリティで判別できます (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

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

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

スキャンコードをキーコードにマッピング

次の記事を参照してください: スキャンコードをキーコードにマップ

キーコードをキーシムにマッピング

コンソール

次の記事を参照してください: コンソールでの特別なキーボードキー

Xorg

次の記事を参照してください: xmodmap

ノートパソコン

Asus M シリーズ

Asus マシンの光学センサーやマルチメディアキーを制御するには、次のコマンドを実行してください:

# echo 1 > /sys/devices/platform/asus_laptop/ls_switch

起動時に上記コマンドを実行させるには Systemd tmpfile を作成:

/etc/tmpfiles.d/local.conf
w /sys/devices/platform/asus_laptop/ls_switch - - - - 1
ノート: 他の機種の Asus ノートパソコンでも使えることがあります。

Asus N56VJ

特殊キーが動作しない場合、次のコマンドで asus-nb-wmi カーネルモジュールをロードしてみてください:

# modprobe asus-nb-wmi

それから xev をもう一度確認してください。acpi_osi="!Windows 2012" ブートオプションを使っている場合、xev で変な結果が表示されることがあるので、使わないようにしてください。モジュールをロードすることで問題が解決する場合、カーネルモジュールの記事に書かれているようにして、起動時にモジュールをロードするようにしてください。

参照