我目前正在使用C和SDL2,我需要知道Wayland当前是否用作窗口系统(显然是因为我想使用Wayland,但SDL2默认为Xwayland).虽然SDL_VIDEODRIVER=wayland可以工作,但如果您使用的是X11,即视频驱动程序不可用,它将无法工作.因此,我要寻找的是一种获取当前窗口系统的低级方法(可能通过询问合成器?)在GNU/Linux上.它还需要不可修改,也就是说,除非会话结束,否则任何应用程序或用户都无法更改它.

推荐答案

通过SDL_Init(0)初始化没有子系统的SDL,然后要求SDL连接到通过SDL_VideoInit("wayland")运行的任何Wayland会话;如果那通电话成功了,你可以 Select 通常的SDL_Init(SDL_INIT_EVERYTHING)&;窗口创建.

不过,为了更具稳健性,您应该遍历SDL_GetNumVideoDrivers()/SDL_GetVideoDriver()字符串列表,以验证使用的SDL安装甚至是使用Wayland支持构建的.

有关视频驱动程序枚举,请参阅测试程序here;测试.

C++相关问答推荐

VS代码C/C++扩展intellisense无法检测环境特定函数'

来自stdarg.h的c中的va_args无法正常工作<>

C:fopen是如何实现二进制模式和文本模式的?

SDL 2.0-从数组渲染纹理

不会停在空格或换行符上的错误

如何使用C for Linux和Windows的标准输入与gdb/mi进行通信?

我怎么才能用GCC编译一个c库,让它包含另一个库呢?

平均程序编译,但结果不好

GTK3按钮信号错误

为什么我的Hello World EFI程序构建不正确?

是否需要包括<;errno.h>;才能使用perror?

添加函数会 destruct 嵌入式C代码(无IDE)

C语言中浮点数的取整方式浮点数尾数超过23位时如何取整剩余部分

Go和C中的数据 struct 对齐差异

如何读取程序中嵌入的数据S自己的ELF?

为什么会出现此错误?二进制表达式的操作数无效

将复合文字数组用作临时字符串缓冲区是否合理?

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

为什么 C 字符串并不总是等同于字符数组?

为什么使用 C 引用这个 char 数组会导致 Stack smasing?