138
54
In Windows there is a program called Keyboard Jedi that shows what keys are pressed on the keyboard.
Is there an equivalent for Linux?
138
54
In Windows there is a program called Keyboard Jedi that shows what keys are pressed on the keyboard.
Is there an equivalent for Linux?
129
Others have mentioned xev
, which is good when you're running X11. When you're at the console, however, showkey
is what you want.
And if you’re at an SSH session or a real terminal, you can use /usr/lib/ncurses/examples/demo_altkeys
(available in Debian in the ncurses-examples package).
Note that xev for "a" gives 38, while showkey for "a" gives 30, because xev reports scancodes, whereas showkey by default reports keycodes.
4Neither work in SSH terminal. – anatoly techtonik – 2015-11-08T11:23:36.663
@anatolytechtonik: Guess you gotta get a new Innernet :( – David Rivers – 2016-05-24T17:50:43.770
@anatolytechtonik For me, xev works fine via ssh. Did you add -X or -Y to the ssh options on the ssh command line? – Christian Hujer – 2017-01-10T10:24:58.897
@ChristianHujer, -X -Y means X11 forwarding (https://stackoverflow.com/questions/13425820/difference-between-ssh-x-and-ssh-y). There is no X11 server on my machine (I use PuTTY), so xev
doesn't apply, and showkey
gives Couldn't get a file descriptor referring to the console
.
@anatolytechtonik Yes, if you use PuTTY, or any environment where X11 forwarding doesn't work, it will not work. Your statement just sounded like it would never work in a terminal, and that's simply not true. xev
will work in ssh
in a terminal if X11 forwarding is enabled and functional. – Christian Hujer – 2017-01-10T16:52:07.493
7to work around showkey
giving the error about not getting a file descriptor (like in comment by @anatolytechtonik ), try sudo showkey
– pestophagous – 2017-03-27T22:38:58.600
Why do these two approaches give different results? Example: xev
for "a" gives 38, while showkey
for "a" gives 30. – Johann – 2017-08-10T18:19:56.617
6@Johann xev
reports scancodes whereas showkey
by default reports keycodes. sudo showkey -s
reports scancodes. – Nizam Mohamed – 2017-10-17T09:01:18.327
locate demo_altkeys
might point to the matching binary in any UNIX system, if it's there and that the file database is up-to-date (updatedb
if you have the relevant privileges) – psychoslave – 2018-11-30T08:57:00.093
Use libinput debug-events
which is also "Wayland" compatible, see man(1).
51
Also screenkey, a screencast tool that displays keys being pressed on-screen.
2I tried this and it didn't show me keys like volume up/down. – Bas Peeters – 2015-11-30T12:39:15.650
1For me, this shows both brightness and volume adjustments. Great little program overall! – joelostblom – 2016-12-01T13:34:10.660
The version in Debian Stretch repositories is ancient (and Stretch is stable for only, idk, 2 months maybe?). Use the Github version to get some settings. – Luc – 2017-10-03T23:27:37.303
39
There is the xev
program for graphic mode - see the man page of xev.
On Ubuntu/Debian it is packed into the x11-utils
package.
Using this at the command line and pushing the key that I thought wasn't working, made the key start working. Wild, I'll take it! – Brandon Bertelsen – 2019-11-07T22:28:04.213
Add it displays timing information (in contrast to showkey
). – Peter Mortensen – 2020-01-15T08:41:13.437
35
If you are looking for something that graphically shows you what key is pressed currently (perhaps for the corner of a screencast), key-mon might be the ticket.
If you can find the increasingly difficult-to-find Python 2.x and PyGTK (GTK+ 2.x) dependencies, I'd recommend key-mon as the nicest-looking option for screencasts. (I'd try my hand at porting to Python 3.x and GTK+ 3.x, but I have too much else on my plate that's more urgently needed.) – ssokolow – 2020-01-25T08:43:25.810
33
chris@retina:~$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ bcm5974 id=13 [slave pointer (2)]
⎜ ↳ Logitech Unifying Device. Wireless PID:1028 id=9 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ FaceTime HD Camera (Built-in) id=11 [slave keyboard (3)]
↳ Apple Inc. Apple Internal Keyboard / Trackpad id=12 [slave keyboard (3)]
↳ daskeyboard id=10 [slave keyboard (3)]
↳ daskeyboard id=14 [slave keyboard (3)]
chris@retina:~$ xinput test 14
key release 36
key press 43
hkey release 43
key press 26
ekey release 26
key press 46
lkey release 46
key press 46
lkey release 46
key press 32
okey release 32
key press 37
key press 54
^C
chris@retina:~$
1xev failed to show me Mx Anywhere 2 mouse buttons, this method displayed correct button. – sdkks – 2017-07-09T13:43:44.453
25
The better command that I know for this functionality is showkey
, with parameter -a
.
You could try, and Ctrl + D to exit:
showkey -a
1showkey
is already mentioned in the earlier answers. – Dmitry Grigoryev – 2015-05-30T18:55:56.113
But the addition -a
is useful, showing how to use the command. But should be a comment then. – Stefan van den Akker – 2015-09-26T07:59:49.280
sudo showkey -a
works with ssh too. – Nizam Mohamed – 2017-10-17T08:50:17.950
Can you add to your answer why "-a
" is better? Thanks in advance. – Peter Mortensen – 2020-01-12T22:22:56.600
Also, would this work without sudo
? Does it? (Please respond by editing your answer, not here in comments (as appropriate)).
For instance, it doesn't output anything for "Shift + Ctrl + C", whereas without -a
it does. – Peter Mortensen – 2020-01-12T22:26:32.897
18
You can also use evtest
. In some situations, it is better than xev
as it shows keys even when a key is already captured.
To install under Ubuntu/Linux Mint, do
sudo apt-get install evtest
to run sudo evtest
and pick a device number.
Example output:
$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Power Button
/dev/input/event2: Power Button
/dev/input/event3: AT Translated Set 2 keyboard
/dev/input/event4: ETPS/2 Elantech Touchpad
/dev/input/event5: Logitech Logitech G930 Headset
/dev/input/event6: Video Bus
/dev/input/event7: HDA Intel HDMI HDMI/DP,pcm=8
/dev/input/event8: HDA Intel HDMI HDMI/DP,pcm=7
/dev/input/event9: HDA Intel HDMI HDMI/DP,pcm=3
/dev/input/event10: HDA Intel PCH Headphone
/dev/input/event11: HDA Intel PCH Mic
/dev/input/event12: WebCam SC-10HDP12B24N
/dev/input/event13: ELAN Touchscreen
Select the device event number [0-13]: 5
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xa1f version 0x101
Input device name: "Logitech Logitech G930 Headset"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 163 (KEY_NEXTSONG)
Event code 164 (KEY_PLAYPAUSE)
Event code 165 (KEY_PREVIOUSSONG)
Event code 256 (BTN_0)
Event code 257 (BTN_1)
Event code 258 (BTN_2)
Event code 259 (BTN_3)
Event code 260 (BTN_4)
Event code 261 (BTN_5)
Event code 262 (BTN_6)
Event code 263 (BTN_7)
Event code 264 (BTN_8)
Event code 265 (BTN_9)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1412585327.807585, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b5
Event: time 1412585327.807585, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 1
Event: time 1412585327.807585, -------------- SYN_REPORT ------------
Event: time 1412585327.927557, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b5
Event: time 1412585327.927557, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 0
Event: time 1412585327.927557, -------------- SYN_REPORT ------------
2Doesn't work with SSH. Looks like there is no /dev/input
at all there. – anatoly techtonik – 2015-11-08T11:26:37.223
13
If you're at a shell prompt, you can press Ctrl-v then the key of interest to see what the output is. For example, on my system, pressing Ctrl-v then Right Arrow shows ^[[C
which means Escape, Left Bracket, C.
As others have mentioned, xev
is the way to go for X11.
But "^[[C" is not a key. A terminal escape sequence, rather, maybe? – Peter Mortensen – 2020-01-12T22:18:01.250
6
You'd be wanting xev.
5
xev | grep 'keycode'
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
state 0x4, keycode 52 (keysym 0x7a, z), same_screen YES,
state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
state 0x0, keycode 54 (keysym 0x63, c), same_screen YES,
state 0x0, keycode 52 (keysym 0x7a, z), same_screen YES,
state 0x0, keycode 54 (keysym 0x63, c), same_screen YES,
xev -event keyboard
reports only keyboard events. – Nizam Mohamed – 2017-10-17T08:51:43.367
1I was looking for something that helps with screen casts...screenkey seem like what I wanted. – ftravers – 2015-11-15T18:21:38.170
Xev os great option and probably is already installed onyour machine – deFreitas – 2018-11-02T13:30:56.033