Linux 中没有 X.org 的 OpenGL

2023-12-23

我想在 Linux 中打开一个没有 X 的 OpenGL 上下文。有什么办法可以做到吗?

我知道集成英特尔显卡硬件是可能的,尽管大多数人的系统中都有 Nvidia 卡。我想要一个适用于 Nvidia 卡的解决方案。

如果除了通过集成英特尔硬件之外没有其他方法,我想知道如何使用这些硬件就可以了。

X11协议本身过于庞大和复杂。它提供的鼠标/键盘/平板电脑输入多路复用对于现代程序来说太淡化了。我认为这是阻碍 Linux 桌面改进的最大障碍,这就是我寻找替代方案的原因。


更新(2017 年 9 月 17 日):

NVIDIA最近发表了一篇文章详细介绍如何在无头系统上使用 OpenGL https://devblogs.nvidia.com/parallelforall/linking-opengl-server-side-rendering/,这是与问题描述的非常相似的用例。

总之:

  • Link to libOpenGL.so and libEGL.so代替libGL.so。 (因此,您的链接器选项应该是-lOpenGL -lEGL
  • Call eglGetDisplay, then eglInitialize初始化 EGL。
  • Call eglChooseConfig与配置属性EGL_SURFACE_TYPE随后是EGL_PBUFFER_BIT.
  • Call eglCreatePbufferSurface, then eglBindApi(EGL_OPENGL_API);, then eglCreateContext and eglMakeCurrent.

从那时起,像往常一样进行 OpenGL 渲染,并且您可以在任何您喜欢的地方位块传输像素缓冲区表面。这篇来自 NVIDIA 的补充文章 https://devblogs.nvidia.com/parallelforall/egl-eye-opengl-visualization-without-x-server/包括一个基本示例和多个 GPU 的示例。根据应用程序的需要,PBuffer 表面也可以替换为窗口表面或像素图表面。

我很遗憾没有在之前的编辑中对此进行更多研究,但是哦,好吧。更好的答案就是更好的答案。


自从我在 2010 年回答以来,Linux 图形领域发生了许多重大变革。所以,更新的答案:

如今,nouveau 和其他 DRI 驱动程序已经成熟到 OpenGL 软件稳定并且总体性能相当好的程度。随着 Mesa 中引入 EGL API,现在甚至可以在 Linux 桌面上编写 OpenGL 和 OpenGL ES 应用程序。

您可以将应用程序编写为目标 EGL,并且可以在没有窗口管理器甚至合成器的情况下运行它。为此,您可以致电eglGetDisplay, eglInitialize,最终eglCreateContext and eglMakeCurrent,而不是通常的 glx 调用来执行相同的操作。

我不知道在没有显示服务器的情况下工作的具体代码路径,但 EGL 接受 X11 显示器和 Wayland 显示器,而且我确实知道 EGL 可以在没有显示服务器的情况下运行。您可以创建 GL ES 1.1、ES 2.0、ES 3.0(如果您有 Mesa 9.1 或更高版本)和 OpenGL 3.1(Mesa 9.0 或更高版本)上下文。 Mesa 尚未(截至 2013 年 9 月)实现 OpenGL 3.2 Core。

值得注意的是,在 Raspberry Pi 和 Android 上,默认支持 EGL 和 GL ES 2.0(Android


以下是过时的、之前接受的帖子:

我想在 Linux 中打开一个没有 X 的 OpenGL 上下文。有什么办法可以做到吗?

我相信 Mesa 提供了一个帧缓冲区目标。如果它提供任何硬件加速,则只能使用具有已调整为支持此类用途的开源驱动程序的硬件。

Gallium3D 也不成熟,据我所知,对此的支持甚至不在路线图上。

我想要一个适用于 nvidia 卡的解决方案。

没有一个。时期。

NVIDIA 仅提供 X 驱动程序,而 Nouveau 项目仍不成熟,并且不支持您正在寻找的用途,因为他们目前仅专注于 X11 驱动程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 中没有 X.org 的 OpenGL 的相关文章

  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • GMail 421 4.7.0 稍后重试,关闭连接

    我试图找出为什么它无法使用 GMail 从我的服务器发送邮件 为此 我使用 SwiftMailer 但我可以将问题包含在以下独立代码中
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 如何将 ggrough 图表另存为 .png

    说我正在使用R包裹ggrough https xvrdm github io ggrough https xvrdm github io ggrough 我有这个代码 取自该网页 library ggplot2 library ggroug
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 在Xcode4中查找变量或方法的所有引用

    有一个类似的问题here https stackoverflow com questions 2831845 xcode view references for a variable但我无法利用 XCode 4 中的答案 我用谷歌搜索了它
  • 在后台使用非托管库时无法更新 WPF GUI

    我在尝试使用 Emgu 从网络摄像头捕获图像时遇到了问题 为了完成此任务 Emgu 使用非托管 opencv 库 所以问题是我无法从 System Timers Timer Elapsed 事件更新我的 GUI WPF 图像控件 我知道它在
  • 使用 d3 画布强制定向图多条边

    我创建了具有多个边的强制有向图 但在渲染后它仅显示 其他一个相互重叠 我想创建类似的东西https bl ocks org mattkohl 146d301c0fc20d89d85880df537de7b0 index html https
  • Users.threads.list() 中缺少很多线程

    我正在使用 Users threads list 方法通过查询 in sent newer than 1y 从我的 GMail 帐户检索线程 结果的第一页 100 个线程 看起来不错 其中包含 2014 年 12 月和 2015 年 1 月
  • 如何在laravel中使用不同的redis连接

    我正在创建一个 laravel 包 在这个包中我需要在 redis 中保存一些数据 但我希望这个包使用不同的 redis 连接 这样如果他们可以在包的配置文件中设置 redis 详细信息凭证 并将使用此连接这个包 我想给包用户自由使用不同的
  • 使用 JAVA API 获取我的 Azure 订阅中所有资源的详细信息

    我正在寻找类似的东西this https stackoverflow com questions 17584084 get a list of all resources in my azure subscription powershel
  • 菜单栏右侧的摆动菜单项

    我有一个 swing 应用程序 在 JFrame 的菜单上我想添加一个帮助菜单项 但要使其右对齐 有任何想法吗 Swing JMenuBar 有一个 BoxLayout 我尝试过 menuItem new JMenuItem Help me
  • program.exe:Native' 已退出,代码为 255 (0xff)

    我正在使用 boost 线程 并且在使用 MD 编译时一切正常 但我真的更喜欢使用 MT 编译 然后我遇到的问题是program exe Native 已退出 代码为255 0xff 这发生在这条线上 thread 1 线程 testThr
  • 基准代码 - 除以迭代次数?

    我和我的朋友就 C C 代码 或一般代码 的基准测试进行了有趣的讨论 我们编写了一个简单的函数 它使用getrusage测量给定代码段的 CPU 时间 它测量运行特定功能所花费的 cpu 时间 让我举一个例子 const int itera
  • 检测 Android 模拟器何时完全启动

    我想创建一个脚本 在其中启动模拟器 并在系统完全启动后安装 apk 我如何知道模拟器何时完全启动以便我可以运行安装命令 这里http developer android com guide developing tools adb html
  • 使用 .prop(hidden: true) 在 JQuery 中隐藏按钮

    我试图弄清楚如何使用 prop hidden true 方法使用 JQuery 隐藏按钮 由于某种原因 在 Chrome 中 当我设置此值并查看 html 时 该按钮有一个隐藏元素 但该按钮仍然在页面上显示为可见 有任何想法吗 按钮没有隐藏
  • 从 Azure AD OAuth v2 令牌端点获取 client_credentials 令牌时,sub 和 oid 声明中包含什么内容?

    我可以在设置密钥 秘密后获取这些令牌 但我不知道是否或如何依赖我的应用程序中的子声明 有关更多背景信息 我的应用程序实际上是 B2C 注册应用程序 我将转到 B2C 租户中的 v2 端点 但没有指定策略来 使用客户端凭据流 可能会导致常规
  • 如何从对象中省略“删除”许多属性?

    我有两种返回以下类型的方法Pick
  • 指针数组的动态分配

    以下代码给出了分段错误 我不明白为什么 请参见 include
  • 如何在交叉编译环境中检测libc名称和版本?

    我的 Linux 桌面上有一些交叉编译器 有些使用 glibc 有些使用 uclibc 将来可能会有其他libcs too 目前 我可以进入他们的 sysroot 目录并搜索libc so并尝试查找它指向哪个文件名 例如libc so gt
  • SelectNodes 和 GetElementsByTagName

    SelectNodes 和 GetElementsByTagName 之间的主要区别是什么 选择节点 http msdn microsoft com en us library system xml xmlnode selectnodes
  • pdf.js 获取有关嵌入字体的信息

    我正在使用 pdf js 获取文本我得到带有字体信息的块 Object str blabla dir ltr width 191 433141 height 12 546 transform Array 6 fontName g d0 f2
  • 同时使用复选框和下拉菜单进行准确过滤

    我正在构建一个非常可排序 可过滤的图像库 其中包含很多标签 这个问题是基于这个如何让下拉菜单表现得像复选框 https stackoverflow com q 68315184在那里我得到了大部分问题的解答 编辑 这里进一步采取了这个问题的
  • 流上的 C++ 正则表达式

    我有一个非常大的文本文件 最多几百 MB 我想使用 STL 正则表达式对其进行处理 我正在寻找的匹配区域跨越几行 并且在文件中至少出现几千次 我可以使用流迭代器来实现此目的吗 我试过了std istream iterator
  • Linux 中没有 X.org 的 OpenGL

    我想在 Linux 中打开一个没有 X 的 OpenGL 上下文 有什么办法可以做到吗 我知道集成英特尔显卡硬件是可能的 尽管大多数人的系统中都有 Nvidia 卡 我想要一个适用于 Nvidia 卡的解决方案 如果除了通过集成英特尔硬件之