【问题标题】:SDL2 fails to get display mode inside virtual machine (No available video device)SDL2 无法在虚拟机中获取显示模式(没有可用的视频设备)
【发布时间】:2020-10-02 15:33:35
【问题描述】:

基本上,SDL 在 VirtualBox 机器中运行时无法获取显示模式。

SDL_GetNumDisplayModes() 报告失败 -1 然后 SDL_InitSubSystem(SDL_INIT_VIDEO) 失败并显示 没有可用的视频设备

int main(void)
{
    int numberOfDrivers = SDL_GetNumVideoDrivers();
    printf("Number of drivers: %d\n", numberOfDrivers);

    for (int i = 0; i < numberOfDrivers; i++)
        printf("Driver name: %s\n", SDL_GetVideoDriver(i));

    int numberOfDisplays = SDL_GetNumVideoDisplays();
    printf("Number of displays: %d\n", numberOfDisplays);

    printf("Display 0 mode: %d\n", SDL_GetNumDisplayModes(0));

    if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
        SDL_Log("SDL fails to initialize video subsystem!\n%s", SDL_GetError());

    return 0;
}

这是输出:

Number of drivers: 2
Driver name: x11
Driver name: dummy
Number of displays: 0
Display 0 mode: -1
INFO: SDL fails to initialize video subsystem!
No available video device
Unable to initialize system

在 Ubuntu 18.04 64 位主机内运行 Ubuntu 18.04 64 位客户机的 VirtualBox 机器。应用程序是 32 位的。

有办法解决吗?

【问题讨论】:

  • 您在来宾系统上运行 x11 吗?您可以运行任何其他 x11 程序吗?如果你想做一些非常具体的事情,你应该在问题中描述它。
  • 我报告的代码不是一个非常具体的应用程序
  • 是的,但是像“需要使用帧缓冲设备而不是 x11”这样的东西。甚至将硬件加速的 GL 传递给 VM 也是不寻常的事情。就目前而言,我不知道你的环境和目标是什么。
  • 我想使用虚拟机来开发 SDL 应用程序。但如果我不能运行/调试应用程序,它就没有用了。我没有具体要求,我想查看我的应用程序的视频/音频输出,如果我可以使用其他方式没关系,x11 不是请求
  • $ loginctl show-session c2 -p Type --> Type=x11

标签: c virtual-machine virtualbox sdl-2


【解决方案1】:

解决方案

有两个问题,一个在示例代码中。

  1. 第一个是 SDL_GetNumDisplayModes() 必须在之后调用 该视频系统已初始化
  2. 第二个,没有可用的视频设备,问题是 在 stackoverflow 和网络上非常普遍,是 libgl1-mesa-glx 丢失

因此,对于 No available video device 错误,您需要 xorg-dev libx11-dev libgl1-mesa-glx 库,也许 xorg-dev 安装 libx11-dev

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多