linux启动软件回显,直接从无窗口Linux终端启动OpenGL应用程序

JasonSmith..

12

您的任务有几个部分.请记住,其中一些可能非常特定于发行版; 但既然你说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用户,或者如果您想以已登录的同一用户身份运行该应用程序,则非常简单.

您必须正确获取DISPLAY和XAUTHORITY环境变量,一旦您这样做,您可以使用现有的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也会工作.

如果您是用户,请自行终止Xorg或x-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那会很糟糕!:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值