键盘输入有时会在 Minecraft 和其他应用程序中卡住

键盘输入有时会在 Minecraft 和其他应用程序中卡住

TLDR;在玩 Minecraft 和其他时候键盘输入会锁定,但在游戏中使用 WASD 移动键时最为明显。从 Ubuntu 更改为 Fedora,从连接链中移除 USB 集线器,更换键盘。问题仍然存在。提供 XEV 输出。我不知道在哪里可以找到问题的原因。

更详细的版本:

我注意到在 Linux 上玩 Minecraft Java 版时键盘输入存在问题。我希望找到根本原因。除了将我的 X11 更改为 Wayland 之外,我不知道还有什么可以查找的。我会在有机会时尝试并更新此帖子。在玩游戏时,我按下的键会“卡住”并且不会释放。这只是软件问题,因为键盘键并没有被物理卡住。鼠标继续正常工作。我设法使唯一起作用的键盘输入是 CTRL+ALT+F(n) 以切换到另一个控制台。如果我切换回来,直到问题消失,按键都不会响应。我尝试了其他键盘,并将键盘直接插入 PC 前置 USB 端口以消除 USB 集线器和转换器。我甚至将 USB 转换器移到了另一个后置 USB 端口。我认为这有帮助,但问题仍然存在。它是随机发生的,但如果 Minecraft 窗口全屏,它似乎会更频繁地发生,并且持续时间更长。

此问题出现在 Ubuntu 22.04 (X11) 和 Fedora 39 (X11) 中。两者都使用当前提供的 Gnome 版本,并安装了所有可用更新。硬件:Dell Precision 3650 Intel i7-11700K 32GB DDR4 EVGA GeForce GTX 970 OC

当前环境:Fedora Linux 39 (工作站版) Linux 6.6.6-200fc39.x86_64 Gnome 45.2 X11

键盘:E-Element Z-88 USB 键盘和 Motospeed K-82 USB 键盘 鼠标:Logitech G502 和 Anker 光学垂直鼠标 USB 链:Anker A7515 USB 集线器 > Sabrent USB-SW30 USB 切换器 -> PC 上的后置 USB 端口,或将键盘和鼠标直接连接到前置 USB 端口。

这些是我在故障排除时尝试过的更改:移动 USB 端口直接连接到 PC vs 通过 USB 集线器和切换器全屏 vs 窗口化 Ubuntu vs Fedora

我了解到 Xev 实用程序可以监控键盘和鼠标,因此我在选择 Minecraft 游戏窗口的情况下运行了该实用程序。在这里我找到了可能对故障排除有用的第一点信息。我不熟悉输出及其含义。在 Firefox 中输入此消息时,问题就发生了。我的键盘输入在文本输入框中停止工作。我可以使用鼠标突出显示并选择文本。我可以用鼠标选择其他窗口并在那里输入。我可以按 Super 键打开活动。然后我注意到,如果我选择它并等待,我的输入会慢慢显示在文本框中。这几乎就像在 90 年代使用非常差的拨号连接进行远程终端;只是等待我的输入赶上来。花了 2 分多钟才显示 5 个单词、一些胡言乱语和一些退格。我仍然无法在 Firefox 中的文本输入框中输入内容,但我能够选择我用鼠标写的内容,然后单击鼠标中键将其粘贴到文本编辑器中以完成输入。

我还没有尝试过 Wayland 来确定该问题是否特定于 X11。

我将附上 xev 实用程序输出的文本文件,但下面是正常输入的示例以及问题发生时不断重复的内容。在正常输出中,按下的键正确显示在状态行中。当问题发生时,会反复显示一个按键矩阵,我按下的键会显示在矩阵的各个位置。显然,“w”(在 Minecraft 中向前移动)在第 1 行第 5 列中用“32”表示。这会根据按键而变化,但在游戏中或其他任何地方都没有响应,直到问题停止,我可以按 ALT-TAB 退出游戏或按 ESC 将鼠标从游戏窗口中释放。

Minecraft 中键盘输入的正常 Xev 输出:

KeyRelease event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12770871, (2305,800), root:(2305,1054),
    state 0x10, keycode 39 (keysym 0x73, s), same_screen YES,
    XLookupString gives 1 bytes: (73) "s"
    XFilterEvent returns: False

KeyRelease event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12771159, (2373,791), root:(2373,1045),
    state 0x10, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyPress event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12771159, (2373,791), root:(2373,1045),
    state 0x10, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XmbLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyRelease event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12771207, (2373,791), root:(2373,1045),
    state 0x10, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyRelease event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12772551, (2409,793), root:(2409,1047),
    state 0x10, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12772551, (2409,793), root:(2409,1047),
    state 0x10, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12772623, (2409,793), root:(2409,1047),
    state 0x14, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (01) ""
    XFilterEvent returns: False

KeyPress event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12772623, (2409,793), root:(2409,1047),
    state 0x14, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (01) ""
    XmbLookupString gives 1 bytes: (01) ""
    XFilterEvent returns: False

问题开始时的 Xev 输出(我猜测键 32 是“w”):

KeyPress event, serial 30, synthetic NO, window 0x4c0000b,
    root 0x1ef, subw 0x0, time 12717159, (31,636), root:(31,890),
    state 0x14, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (17) ""
    XmbLookupString gives 1 bytes: (17) ""
    XFilterEvent returns: False

FocusOut event, serial 30, synthetic NO, window 0x4c0000b,
    mode NotifyGrab, detail NotifyNonlinear

FocusIn event, serial 30, synthetic NO, window 0x4c0000b,
    mode NotifyUngrab, detail NotifyNonlinear

KeymapNotify event, serial 30, synthetic NO, window 0x0,
    keys:  4294967279 0   0   2   32  0   0   0   0   0   0   0   0   0   0   0
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

FocusOut event, serial 30, synthetic NO, window 0x4c0000b,
    mode NotifyGrab, detail NotifyNonlinear

FocusIn event, serial 30, synthetic NO, window 0x4c0000b,
    mode NotifyUngrab, detail NotifyNonlinear

KeymapNotify event, serial 30, synthetic NO, window 0x0,
    keys:  4294967279 0   0   2   32  0   0   0   0   0   0   0   0   0   0   0
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

FocusOut event, serial 30, synthetic NO, window 0x4c0000b,
    mode NotifyGrab, detail NotifyNonlinear

FocusIn event, serial 30, synthetic NO, window 0x4c0000b,
    mode NotifyUngrab, detail NotifyNonlinear

KeymapNotify event, serial 30, synthetic NO, window 0x0,
    keys:  2   0   0   2   32  0   0   0   0   0   0   0   0   0   0   0
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

FocusOut event, serial 30, synthetic NO, window 0x4c0000b,
    mode NotifyGrab, detail NotifyNonlinear

答案1

您在 Linux 版 Minecraft Java 版中遇到的键盘输入问题,其特点是游戏过程中按键“卡住”,这是一个复杂的问题,可能由多种因素引起。让我们深入研究潜在原因及其各自的解决方案,确保采用整体方法来解决此问题。潜在原因和解决方案:

  1. X11 与 Wayland:
    • X11 和 Wayland 在输入处理方面的差异非常显著。鉴于您的问题在不同的 Linux 发行版的 X11 上仍然存在,尝试使用 Wayland 可能会解决问题。

2.键盘硬件和驱动程序:

  • 更新键盘的驱动程序和固件是至关重要的一步。有时,特定型号存在独特的兼容性问题,这些问题在较新的驱动程序版本中得到解决。

3.USB 配置:

  • 检查 USB 电源管理设置并尝试不同的 USB 端口(例如从 3.0 切换到 2.0)可以深入了解任何与硬件相关的冲突。

4.系统资源和软件干扰:

  • 游戏过程中监控资源使用情况至关重要。高 CPU 或 RAM 使用率可能会导致输入延迟。
  • 另外,检查任何可能干扰键盘输入的软件,例如其他设备驱动程序或系统监视器。

5.Minecraft 配置:

  • 由于全屏模式会使问题更加严重,调整游戏内设置可能会有所缓解。确保 Minecraft 和您使用的任何模组都已更新。

6.分析 Xev 输出:

  • 持续的按键矩阵输出xev表明系统正在接收持续的按键信号。解读这些模式可能是理解问题根源的关键。

7.使用 Wayland 进行测试:

  • 由于 Wayland 处理输入的方式与 X11 不同,因此它是一条值得探索的途径。

在故障排除过程中,如果您使用诸如xev监控键盘输入之类的工具,您可能还会发现尝试其他可以增强 Minecraft 体验的实用程序或工具很有趣。例如,如果您喜欢在游戏中设计结构,Minecraft 圆圈生成器minecraftcirclegenerate.com可以是一个有价值的工具。它与您当前的问题没有直接关系,但可以成为您玩游戏的有趣且有用的资源。解决此问题需要循序渐进的方法,从更新驱动程序等简单修复开始,到切换到 Wayland 等更全面的解决方案。记录每个步骤及其影响对于查明问题的确切原因至关重要。

相关内容