当前位置:  开发笔记 > 编程语言 > 正文

直接从无窗口Linux终端启动OpenGL应用程序

如何解决《直接从无窗口Linux终端启动OpenGL应用程序》经验,为你挑选了1个好方法。

如何让OpenGL应用程序直接从终端(Ubuntu Server 9.04)运行全屏?我在我的服务器上开发了一个可视化诊断应用程序,但是,我并不完全确定在无窗口环境中运行它的最佳方法.


理想情况下,我会运行我的程序:

./visualdiagnostics

并启动OpenGL应用程序.然后,通过简单的Ctrl+X键绑定,我将杀死应用程序并返回终端.


我是否需要安装X11然后以某种方式从程序中启动它?什么是检测它是否已经运行的最佳方法,并在必要时启动/停止它?

还有,我不是,我不是想让它跑到Putty或其他任何地方......我有一台显示器直接连接到服务器上.服务器安装了正确的视频驱动程序.



1> JasonSmith..:

您的任务有几个部分.请记住,其中一些可能非常特定于发行版; 但既然你说Ubuntu我们会说Ubuntu!

你也标记了这个问题C但是我开始使用一个常见的Linux模式:一个带有Bash shell脚本包装器的本机应用程序.也许一旦你把事情搞好了,你就可以将这个功能折叠成C语言.

检测X是否正在运行

成为root可以帮助很多.一些有用的东西.

    pgrep Xorg

    检查是否/var/lib/gdm/:0.Xauth存在.即使没有人登录但GDM正在运行,这也会存在.

    ls -l /home/*/.Xauthority(即使你不是root,你至少可以确认是否正在运行X.

捎带现有的X会话

您没有特别提及它,但如果您是控制台的root用户,或者如果您想以已登录的同一用户身份运行该应用程序,则非常简单.

您必须正确获取DISPLAYXAUTHORITY环境变量,一旦您这样做,您可以使用现有的X显示.

对于DISPLAY你可能只是假设:0,或者你可以找到一个现有的X程序(x-session-manager是GNOME标准)和读从/ proc/PID/ENVIRON它的环境.变量采用以空字节分隔的key = value格式.例如,如果其PID为12345:

cat /proc/12345/environ \
  | ruby -ne 'puts $_.split("\0").select {|e| e.starts_with? "DISPLAY=" }'

因为XAUTHORITY你可以用同样的方式得到它.或者,如果您更喜欢猜测,那几乎总是如此/home/whoever/.Xauthority

一旦有了这两个变量,运行X代码就很容易了,例如:

env DISPLAY=:0 XAUTHORITY=/home/brian/.Xauthority ./visualdiagnostics

停止X.

如果你是root,这个很容易:/etc/init.d/gdm stop.killall Xorg也会工作.

如果您是用户,请自行终止Xorgx-session-manager处理.(我欢迎其他人以规范的方式来做这个.也许有些dbus-send消息?)

从X开始

我会建议xinit他的人生目标是解雇X并运行一个程序.

例如: xinit ./visualdiagnostics

你也可以告诉xinit运行X的分辨率对你来说可能重要,也可能不重要.(这在下面的全屏部分中变得很重要.)

这个问题是你没有窗口管理器 - 没有最大化和最小化按钮.这不仅仅是化妆品.通常,应用程序无用,因为弹出窗口无法移动,或者您无法专注于正确的输入字段.但是,如果你有一个特殊的应用程序,它就足够了(见下面的全屏).

下一步将是我对一切的回答:另一个shell脚本包装器!一些简单的启动窗口管理器,然后成为您的程序应该工作.

#!/bin/bash
#
# Start visualdiagnostics once xinit calls me.

/usr/bin/metacity& # Or ratpoison, or fluxbox, or compiz, etc.
exec ./visualdiagnostics

执行(成为)主程序非常重要,因为一旦第一个程序退出,X就会关闭.

全屏运行

我不是100%肯定的.一些想法:

尝试使用标准X -geometry参数将0,0设置为左上角,将+ x + y设置为水平和垂直尺寸.你怎么知道它的大小?您在启动时对其进行了硬编码,xinit或者您可以向X服务器询问.xwininfo -root会告诉你,并且有一个xlib API调用也会这样做 - 我猜测检查xwininfo源代码.

您的应用程序本身可以请求最大化和/或调整大小以填充屏幕.我不熟悉但它肯定在X API中.

一些更可配置的窗口管理器可以预先配置为运行最大化的窗口管理器.这可能是我个人首先要检查的.您的包装器脚本可以$HOME/.fluxboxrc通过回显一些硬编码的配置>文件来创建.

摘要

其他人都是对的.X不是必需的正弦OpenGL可以对帧缓冲区运行.然而,考虑到无处不在的X是多么普遍,以及在分配中自动化了多少工作,我可能会将我的努力投入X路线,因为即使它有点复杂也可能更容易长期使用.

(顺便说一句,我真诚地希望当你说"终端"时你的意思是你在文本控制台,而不是gnome-terminal那会很糟糕!:)

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有