我正在使用 buildroot 2024.05 为自定义的类似信息亭的设备构建嵌入式操作系统。 目标是显示用 Unity3d 编写的交互式 3D 应用程序。 我使用的参考/开发硬件是带有集成显卡的Odroid H3(该应用程序要求不是很高)。 我已经按照自己的方式设置了所有驱动程序和库,此时我已经有了一个可以通过 opengl 和 vulkan 进行 3d 加速的 Xserver。该应用程序本身也运行良好。
我对这个项目的想法是一个仅启动应用程序的原始 Xserver 实例,但除非我启动窗口管理器(fluxbox/matchbox),否则第一个 Unity 不会接收来自键盘或鼠标的任何输入,也不会重新设置光标。 基本上所有相关配置都是 buildroot 默认值,除了 xinitrc,我从中删除了启动不必要的应用程序。
经过一些实验我得到了什么:
在 xinitrc 中使用窗口管理器:
以上所有测试均使用相同的配置完成,唯一的区别是启动的应用程序。 我比较了运行之间的 xorg 日志、unity 播放器日志和 dmesg,但找不到任何有意义的差异,甚至没有发现警告。 正常的ubuntu安装也可以正常工作。
所以我的问题是,这些窗口管理器做了什么魔法才能使统一处理输入?为什么启动原始 xorg 会导致使用 xterm 而不是使用 unity 产生光标和工作键盘?是否可以让 xorg + unity 工作?
除了 Buildroot 之外,我对你正在使用的任何东西都不太了解,所以我的答案可能不会是最终的......
首先,您可能根本不想使用 X。希望 Unity3D 应用程序能够直接写入 OpenGL/drm 系统。 X 只是用来管理多个应用程序的屏幕和输入 - 如果您只有一个,则根本不需要它。然而,看起来他们把这个“功能”(这实际上让事情变得更简单)放在了付费许可证后面。
那么,您可能应该使用 Wayland 而不是 X。X 已被弃用。 Wayland 只是协议(和库),因此您还需要一个合成器。韦斯顿可能是您的不错人选。笼子和摇摆是替代品。不应该有更多你需要的东西了。希望 Unity 支持 wayland 并且不需要已弃用的技术...如果支持,您仍然可以启用 Xwayland。
关于键盘/鼠标问题:听起来 libinput 支持不是由 X 服务器引入的,而是由某些窗口管理器引入的。 X 在这方面很奇怪。