Unity3d 不会接收来自 xorg 的输入,除非我使用窗口管理器

问题描述 投票:0回答:1

我正在使用 buildroot 2024.05 为自定义的类似信息亭的设备构建嵌入式操作系统。 目标是显示用 Unity3d 编写的交互式 3D 应用程序。 我使用的参考/开发硬件是带有集成显卡的Odroid H3(该应用程序要求不是很高)。 我已经按照自己的方式设置了所有驱动程序和库,此时我已经有了一个可以通过 opengl 和 vulkan 进行 3d 加速的 Xserver。该应用程序本身也运行良好。

我对这个项目的想法是一个仅启动应用程序的原始 Xserver 实例,但除非我启动窗口管理器(fluxbox/matchbox),否则第一个 Unity 不会接收来自键盘或鼠标的任何输入,也不会重新设置光标。 基本上所有相关配置都是 buildroot 默认值,除了 xinitrc,我从中删除了启动不必要的应用程序。

经过一些实验我得到了什么:

  • xinit xterm - 左上角的标准白色控制台,鼠标和键盘在其上工作,标准黑色光标。
  • xinit myapp - 应用程序启动并渲染得很好,没有键盘/鼠标,没有光标。

在 xinitrc 中使用窗口管理器:

  • twm + myapp - 应用程序上呈现十字形光标,但它无法与任何东西交互,键盘也不起作用。
  • fluxbox + myapp - 完全交互如预期,光标可以点击,键盘可以打字。
  • 火柴盒 + myapp - 同上。

以上所有测试均使用相同的配置完成,唯一的区别是启动的应用程序。 我比较了运行之间的 xorg 日志、unity 播放器日志和 dmesg,但找不到任何有意义的差异,甚至没有发现警告。 正常的ubuntu安装也可以正常工作。

所以我的问题是,这些窗口管理器做了什么魔法才能使统一处理输入?为什么启动原始 xorg 会导致使用 xterm 而不是使用 unity 产生光标和工作键盘?是否可以让 xorg + unity 工作?

unity-game-engine embedded-linux buildroot xorg
1个回答
0
投票

除了 Buildroot 之外,我对你正在使用的任何东西都不太了解,所以我的答案可能不会是最终的......

首先,您可能根本不想使用 X。希望 Unity3D 应用程序能够直接写入 OpenGL/drm 系统。 X 只是用来管理多个应用程序的屏幕和输入 - 如果您只有一个,则根本不需要它。然而,看起来他们把这个“功能”(这实际上让事情变得更简单)放在了付费许可证后面。

那么,您可能应该使用 Wayland 而不是 X。X 已被弃用。 Wayland 只是协议(和库),因此您还需要一个合成器。韦斯顿可能是您的不错人选。笼子和摇摆是替代品。不应该有更多你需要的东西了。希望 Unity 支持 wayland 并且不需要已弃用的技术...如果支持,您仍然可以启用 Xwayland。

关于键盘/鼠标问题:听起来 libinput 支持不是由 X 服务器引入的,而是由某些窗口管理器引入的。 X 在这方面很奇怪。

© www.soinside.com 2019 - 2024. All rights reserved.