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;
Мне интересно, почему вы предоставляете программе такую разреженную среду, хотя & ndash; В зависимости от того, как вы сконфигурированы и что используете, Gtk + может быть не совсем доволен отсутствием DBUS_SESSION_BUS_ADDRESS,GTK2_RC_FILES,GTK_IM_MODULE,HOME,LANG*,LC_*,PATH,XDG_*
и т. д. Почему бы вам просто не использовать execv
или execvp
и просто позволить наследовать родительскую среду?