gpt4 book ai didi

c - 在 ubuntu 上使用 execve 启动 Gtk 程序时出现 "Gtk-WARNING **: cannot open display: "

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:27 24 4
gpt4 key购买 nike

我有以下在 ubuntu 上启动 Gtk 程序的 c 程序:

#include <unistd.h>

int main( int argc, const char* argv[] )
{
char *args[2] = { "testarg", 0 };
char *envp[1] = { 0 };
execve("/home/michael/MyGtkApp",args,envp);
}

我收到“Gtk-WARNING **: cannot open display:”,我的程序没有启动。

我尝试设置 char *envp[1] = {"DISPLAY:0.0"}; 并执行 'xhost +' ,我没有看到 ' cannot open display' warning, but my program is still not launched.

有人知道如何解决我的问题吗?

谢谢。

最佳答案

char *envp[1] = {"DISPLAY:0.0"};

大错特错。用=分隔名称和值,并用NULL终止列表,如args

char *envp[2] = {"DISPLAY=:0.0", 0};

或者更好的是,不要对显示进行硬编码,也可以使用 Xauthority。

char *display = 0, *xauthority = 0;
char *envp[3] = {0};
asprintf(&display, "DISPLAY=%s", getenv("DISPLAY"));
asprintf(&xauthority, "XAUTHORITY=%s", getenv("XAUTHORITY"));
envp[0] = display;
envp[1] = xauthority;

我想知道为什么你给程序一个如此稀疏的环境,虽然 - 根据你的配置方式和你使用的是什么,Gtk+ 可能不完全满意 DBUS_SESSION_BUS_ADDRESS,GTK2_RC_FILES,GTK_IM_MODULE, HOME、LANG*、LC_*、PATH、XDG_* 等环境变量消失了。为什么不直接使用 execvexecvp,只允许继承父环境?

关于c - 在 ubuntu 上使用 execve 启动 Gtk 程序时出现 "Gtk-WARNING **: cannot open display: ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2437819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com