in windows there is a program called keyboard jedi that shows what keys are pressed on the keyboard. is there an equivalent for linux?

migrated from stackoverflow.com Feb 21 '11 at 16:10

This question came from our site for professional and enthusiast programmers.

  • 1
    I was looking for something that helps with screen casts...screenkey seem like what I wanted. – ftravers Nov 15 '15 at 18:21
  • Xev os great option and probably is already installed onyour machine – deFreitas Nov 2 '18 at 13:30

10 Answers 10


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).

  • 1
    Welcome to the ranks of the Stack Athletes. – Dennis Williamson Mar 2 '11 at 10:55
  • 3
    Neither work in SSH terminal. – anatoly techtonik Nov 8 '15 at 11:23
  • 6
    to work around showkey giving the error about not getting a file descriptor (like in comment by @anatolytechtonik ), try sudo showkey – pestophagous Mar 27 '17 at 22:38
  • 1
    @anatolytechtonik Answer edited to add command for SSH sessions (and real terminals). – Teddy Jul 26 '17 at 9:35
  • 5
    @Johann xev reports scancodes whereas showkey by default reports keycodes. sudo showkey -s reports scancodes. – Nizam Mohamed Oct 17 '17 at 9:01

Also screenkey, a screencast tool that displays keys being pressed on-screen.

  • 1
    I tried this and it didn't show me keys like volume up/down. – Bas Peeters Nov 30 '15 at 12:39
  • For me, this shows both brightness and volume adjustments. Great little program overall! – joelostblom Dec 1 '16 at 13:34
  • 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 Oct 3 '17 at 23:27
  • Repo was migrated to Gitlab. – rkta Jul 16 at 17:59

There is xev program for graphic mode. Man of xev is here http://linux.die.net/man/1/xev On ubuntu/debian it is packed into x11-utils package.

 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 
  • 1
    xev failed to show me Mx Anywhere 2 mouse buttons, this method displayed correct button. – sdkks Jul 9 '17 at 13:43

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.


The better command that i know to this functionality is showkey, with parameter -a

You could try, and Crtl=D to exit.

showkey -a

  • showkey is already mentioned in the earlier answers. – Dmitry Grigoryev May 30 '15 at 18:55
  • But the addition -a is useful, showing how to use the command. But should be a comment then. – Stefan van den Akker Sep 26 '15 at 7:59
  • sudo showkey -a works with ssh too. – Nizam Mohamed Oct 17 '17 at 8:50

You can also use evtest. In some situation better than xev as it shows keys even when key is already captured.

To install under ubuntu/mint sudo apt-get install evtest.

To run sudo evtest and pick 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)
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 ------------
  • 1
    Doesn't work with SSH. Looks like there is no /dev/input at all there. – anatoly techtonik Nov 8 '15 at 11:26

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.


You'd be wanting xev.

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,

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.