Keyboard input: Difference between revisions

From ArchWiki
Line 9: Line 9:
{{Related|Xmodmap}}
{{Related|Xmodmap}}
{{Related articles end}}
{{Related articles end}}
{{Move|Keyboard input|scancode, keycode & keysym regard general keyboard input and not just extra keyboard keys.|section=Restructuring}}
Many keyboards include some ''special keys'' (also called ''hotkeys'' or ''multimedia keys''), which are supposed to execute an application or print special characters (not included in the standard national keymaps). [[udev]] contains a large database of mappings specific to individual keyboards, so common keyboards usually work out of the box. If you have very recent or uncommon piece of hardware, you may need to adjust the mapping manually.
Many keyboards include some ''special keys'' (also called ''hotkeys'' or ''multimedia keys''), which are supposed to execute an application or print special characters (not included in the standard national keymaps). [[udev]] contains a large database of mappings specific to individual keyboards, so common keyboards usually work out of the box. If you have very recent or uncommon piece of hardware, you may need to adjust the mapping manually.


Prerequisite for modifying the key mapping is knowing how a key press results in a symbol:
See [[Keyboard input]].
 
# The keyboard sends a [[Wikipedia:Scancode|scancode]] to the computer.
# The Linux kernel maps the scancode to a '''keycode''', see [[Map scancodes to keycodes]].
# The keyboard layout maps the keycode to a symbol or '''keysym''', depending on what [[Wikipedia:Modifier key|modifier keys]] are pressed, see [[Console keyboard configuration]] or [[XKB]]/[[xmodmap]].
 
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 [[Xorg keyboard configuration#Mapping keysyms to actions]] for details.
 
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.
 
== Identifying scancodes ==
 
=== Using showkey ===
 
The traditional way to get a ''scancode'' is to use the ''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
 
and try to push keyboard keys; you should see ''scancodes'' being printed to the output.
 
=== Using evtest ===
 
For USB keyboards, it is apparently necessary to use ''evtest'' from the {{Pkg|evtest}} package instead of ''showkey'':[https://ask.fedoraproject.org/en/question/46201/how-to-map-scancodes-to-keycodes/]
 
# 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 ------------
 
Use the "value" field of {{ic|MSC_SCAN}}. This example shows that NumLock has scancode 70053 and keycode 69.
 
=== Using dmesg ===
 
{{Note|This method does not provide ''scancodes'' for all keys, it only identifies the unknown keys.}}
 
You can get the ''scancode'' of a key by pressing the desired key and looking the output of {{ic|dmesg}} command. For example, if you get:
 
Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0
 
then the ''scancode'' you need is {{ic|0xa0}}.
 
== Mapping scancodes to keycodes ==
 
See the main article: [[Map scancodes to keycodes]].
 
== Mapping keycodes to keysyms ==
 
=== In Xorg ===
 
See the main article: [[xmodmap]].


== Laptops ==
== Laptops ==

Revision as of 04:32, 1 June 2018

Many keyboards include some special keys (also called hotkeys or multimedia keys), which are supposed to execute an application or print special characters (not included in the standard national keymaps). udev contains a large database of mappings specific to individual keyboards, so common keyboards usually work out of the box. If you have very recent or uncommon piece of hardware, you may need to adjust the mapping manually.

See Keyboard input.

Laptops

Apple MacBooks

All the required information is available on the Apple Keyboard dedicated article.

Asus M series

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

To have it run on boot create a Systemd tmpfile:

/etc/tmpfiles.d/local.conf
w /sys/devices/platform/asus_laptop/ls_switch - - - - 1
Note: This may work also for other Asus notebook models.

Asus N56VJ (or possibly others)

If most of your special keys do not work, try loading the asus-nb-wmi kernel module with

# modprobe asus-nb-wmi

then check xev again. If you combine this with the acpi_osi="!Windows 2012" boot option, you may get weird results in xev, so try not using it. If this did fix things, make sure to make the module load at boot with methods described in Kernel modules#Automatic module handling.

Lenovo T460p (or possibly others)

Out of the box, the backlight keys (on F5, F6) might not be available, even via the /dev/input interface. To fix this, follow Backlight#Kernel command-line options.

Gaming Keyboards

Gaming keyboards have some special features which may cause them to "misbehave" in Linux.

Cooler Master CM Storm QuickFire TK

This keyboard has two features that could cause confusion in Linux: N-Key Rollover and the Win-Lock Key.

N-Key Rollover can cause problems with the Function keys. To disable N-key rollover, hold down the FN lock key (next to right-ctrl) until it lights up, then hold Escape and press 6 to switch to 6-key rollover. Hold down the FN lock key to disable the Fn lock.

The Win-Lock Key completely disables the Super (Windows) keys. Simply press the FN lock key and F12 together to toggle Win-Lock on and off.

Corsair K series keyboards

There is a winlock button on these keyboards that can disable the use of the Super (Windows) keys. This button is located at the top right of the keyboard next to the num and capslock buttons. CKB can be used to disable this functionality entirely preventing further locking. However, in a default state, simply pressing the button would enable the Super (Windows) keys again.

Logitech G series G710 and 710+

This keyboard has a row of 6 programmable G keys. In order to use them as intended by Logitech, you need to install sidewinderdAUR and start sidewinderd.service.

See also