【问题标题】:Ncurses C program start itself in a terminal in xwindowsNcurses C程序在xwindows的终端中启动
【发布时间】:2014-09-14 10:16:01
【问题描述】:

我制作了一个简单的 ncurses 程序,但它需要在终端中运行才能显示任何内容。 如果有人只是在 X11 的文件管理器窗口中双击它,程序将不会产生任何输出。 所以我的问题是,我怎样才能做到这一点,如果有人双击二进制文件,它会自动创建一个终端窗口来在其中运行? (而不是那个人必须打开终端并输入命令来导航并执行它..)

【问题讨论】:

  • 我相信你可以找到一个系统命令来做到这一点。如果没有,将会有一个特定于桌面的命令(就像一种特殊的 gnome 方式来发现默认终端)。如果没有(不太可能),仍然可以尝试在 /bin 中找到最流行的终端二进制文件,例如 /bin/xterm 或 /bin/gnome-terminal ... 只需 fork execve 即可使用您的实际 ncurses 程序作为命令行参数。不 ?实际上,windows 上有一个系统命令可以启动默认控制台,这就是为什么我认为 linux 上也可以有一个。
  • 如果你有一个文件管理器,它的上下文菜单中可能有一个“创建一个新的应用程序链接”命令。它可能被称为“快捷方式”或“桌面标签”或其他类似的东西。这些术语都指的是同一件事。在创建对话框中通常有几个选项卡或“向导步骤”,其中一个应该有一个“在终端中运行”检查按钮。这样的按钮也可能隐藏在“高级选项”对话框后面。勾选它,填写其余信息,您就可以开始了。
  • 但我根本不相信这是他问题的本质。你是怎么分配的?每个使用他的东西的人都必须自己手动执行这些步骤,这听起来不太适合安装程序。
  • @v.oddou how do you distribute that? 你分发它完全就像你的操作系统分发vi一样。
  • @v.oddou 如果您坚持分发启动器,您可以。格式是标准化的。见standards.freedesktop.org/desktop-entry-spec/…

标签: c terminal x11 ncurses


【解决方案1】:

你可以像这样制作一个简单的 bash shell 脚本:

#!/bin/bash
xterm -e "your command"

【讨论】:

  • 这感觉不太对,首先它假设安装了xterm,它甚至假设安装了bash(但这是可以接受的)。然后它还创建了一个包含二进制文件和启动器的未良好打包的应用程序。如果二进制文件可以自己执行终端窗口,那将是最好的打包方式。
  • 怎么样: /etc/alternatives/x-terminal-emulator -e "your command" ?可能嵌入在程序中。
【解决方案2】:

这可能是一个 hack,但你可以制作一个像这样运行 myapp 的 xmyapp:

#include <cstdlib>
#include <stdlib.h>

int main() {

   char *display = getenv("DISPLAY") ; 

   if(display){
       std::system("/etc/alternatives/x-terminal-emulator -e <myapp>");
   } else {
       std::system("<myapp>");
   }      

   return 0;
}

或者在单个可执行文件中,像这样:

#include <cstdlib>
#include <stdlib.h>
#include <string>

int main(int argc, char** argv) {
   char *display = getenv("DISPLAY") ;
   std::string args = "";

   for(int i=1;i<argc;i++){
      args = argv[i];
      if(args == "--with-term") display = NULL;
   }

   if(display){
       std::system("/etc/alternatives/x-terminal-emulator -e <myapp> --with-term");
       return 0;
   }
   //else
   //my app code

   return 0;
}

【讨论】:

  • 我没有 /etc/alternatives/ 文件夹,也没有找到“x-terminal-emulator”。是不是有一些通用的、简单的方法可以让 X 在终端中运行应用程序,而我不必猜测或测试可能安装在目标系统上的所有可能的终端?难以置信。
  • X 不运行应用程序,gnome、kde、xfce 等运行。此外,终端只是另一个应用程序,没有“默认终端”之类的东西,这完全取决于您是否正在运行 gnome/kde/etc。抱歉 /etc/alternatives 这似乎与 Debian 有关。您使用的是哪个 dist?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2012-01-18
  • 2011-04-26
相关资源
最近更新 更多