显示在 Linux 中按下的键

ftr*_*ers 183 linux keyboard

在 Windows 中,有一个名为Keyboard Jedi的程序,可以显示在键盘上按下了哪些键。

有 Linux 的等价物吗?

Ted*_*ddy 168

其他人提到过xev,这在您运行 X11 时很好。但是,当您在控制台时,showkey这就是您想要的。

如果您在 SSH 会话或真实终端中,则可以使用/usr/lib/ncurses/examples/demo_altkeys(在 Debian 中的 ncurses-examples 包中可用)。

请注意,“a”的 xev 给出 38,而“a”的 showkey 给出 30,因为 xev 报告扫描码,而 showkey 默认报告键码。

  • 要解决 `showkey` 给出关于未获取文件描述符的错误(如@anatolytechtonik 的评论),请尝试 `sudo showkey` (15认同)
  • @Johann `xev` 报告扫描码,而 `showkey` 默认报告键码。`sudo showkey -s` 报告扫描码。 (8认同)
  • 只有“showkey -a”可以在 SSH PTY 或串行终端(“/dev/ttyS”_n_)上工作。这是明智的,因为扫描码/键码/发射字节序列是在客户端的 TTY 模拟器(或硬件,如果您是 Retrocomputing.SO 的粉丝)中处理的。您可以将这些序列放入“.inputrc”中,例如 bash 和其他适合阅读的内容。远程 X 的工作方式不同:[例如,基于 Windows] X 服务器可以访问您的原始键盘(Windows 保留一些和弦),并发送扫描代码。通过“ssh -Y”或 TCP,都一样。还有 terminfo DB (demo_altkeys),但这个边距太窄了.. (5认同)
  • 两者都不适用于 SSH 终端。 (4认同)
  • @ChristianHujer,-X -Y 表示 X11 转发(/sf/ask/939807431/ Between-ssh-x-and-ssh-y)。我的机器上没有 X11 服务器(我使用 PuTTY),因此“xev”不适用,并且“showkey”给出“无法获取引用控制台的文件描述符”。 (4认同)

Ado*_*obe 74

还有screenkey,一种截屏工具,可在屏幕上显示按下的键。

  • 我试过这个,它没有向我显示音量增大/减小之类的键。 (2认同)
  • 对我来说,这显示了亮度和音量调整。总体来说很棒的小程序! (2认同)

osg*_*sgx 39

xev图形模式的程序 - 请参阅xev 的手册页

在 Ubuntu/Debian 上,它被打包到x11-utils包中。


asj*_*sjo 38

如果您正在寻找以图形方式显示当前按下的键的内容(可能用于截屏视频的角落),则key-mon可能是票证。


Chr*_*one 36

 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:~$ 
Run Code Online (Sandbox Code Playgroud)

  • xev 无法显示 Mx Anywhere 2 鼠标按钮,此方法显示正确的按钮。 (2认同)

小智 31

我所知道的关于此功能的更好的命令是showkey,带参数-a.

你可以试试,然后Ctrl+D退出:

showkey -a
Run Code Online (Sandbox Code Playgroud)

  • `showkey` 已经在前面的答案中提到了。 (2认同)
  • 但添加“-a”很有用,它展示了如何使用该命令。但应该是一个评论。 (2认同)
  • 如果没有 `-a` 选项,我会收到错误消息:通过 ah SSH 连接使用它时,无法获得引用控制台的文件描述符。 (2认同)

小智 19

您也可以使用evtest. 在某些情况下,xev即使已经捕获了密钥,它也比显示密钥更好。

要在 Ubuntu/ Linux Mint下安装,请执行

sudo apt-get install evtest
Run Code Online (Sandbox Code Playgroud)

运行sudo evtest并选择设备编号。

示例输出:

$ 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 ------------
Run Code Online (Sandbox Code Playgroud)

  • 不适用于 SSH。看起来那里根本没有`/dev/input`。 (2认同)

Den*_*son 13

如果您在 shell 提示符下,您可以按Ctrl-v然后按感兴趣的键来查看输出是什么。例如,在我的系统上,按Ctrl-v然后Right Arrow显示^[[C这意味着 Escape、左括号、C。

正如其他人所提到的,xev是 X11 的方法。


小智 6

你会想要xev


小智 6

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,
Run Code Online (Sandbox Code Playgroud)