posix_spawn will nicht
-
Hallo Leute,
habe folgenden Code
char *spawnArgs[] = { "sh", "-c", "xdg-open", "http://google.de/" , NULL }; int pid; posix_spawn ( &pid, "/bin/sh" , NULL, NULL, spawnArgs, NULL);
Nun wird sh gespawnt, aber xdg-open macht Probleme. Es bekommt das den Link nicht übergeben. Hat einer von euch eine Idee wieso es nicht klappt?
Habe auch
char *spawnArgs[] = { "sh -c", "xdg-open", "http://google.de/" , NULL };
probiert - bekomme aber dann folgenden Fehler
xdg-open: no method available for opening 'http://google.de/'
Das gleiche Problem bekomme ich auch wenn ich mit fork/execve verwende.
-
Warum der Umweg über die Shell?
#include <unistd.h> #include <spawn.h> #include <stddef.h> int main(void) { pid_t pid; char progname[] = "xdg-open"; char url[] = "http://www.google.de"; char *const args[] = { progname, url, NULL }; posix_spawnp(&pid, progname, NULL, NULL, args, NULL); return 0; }
Ich vermute aber, dass das das Problem nicht lösen wird. Für mich sieht es so aus, als sei xdg-open kein bevorzugter Browser bekannt, der die URL öffnen könnte. In dem Fall liegt das Problem nicht im C-Code und kann dementsprechend auch nicht dort behoben werden.
-
Im ersten Code meinst du wohl eher:
char *spawnArgs[] = { "sh", "-c", "xdg-open http://google.de/" , NULL }; // Das "www." darfst du selber ergänzen
Aber wie seldon schon sagte: Warum überhaupt der Umweg über die Shell?
-
also habe noch etwas damit Rumgespielt und bin dann zu einem Ergebnis gekommen - es ist wirklich trivial. Wenn ich xdg-open ganz normal in der shell starte nimmst es, woher auch immer, einen Browser und startet die url so wie er soll, sonst aber nicht.
Musste explizit nochmal mimes anlegen damit er auch wirklich immer und überall den Browser benutzt, egal ob aus der sh oder aus dem neuen Prozess.
Keine Ahnung, ist ganz komisch, das gleiche Problem habe ich auch bei allen anderen Datentypen, wenn ich die aus der Konsole mit xdg-open öffne klappts, auch wenn keine mimes dafür angelegt sind :S
-
Womöglich fehlt dir da was in der environment; wenn ich das richtig im Kopf habe, benutzt xdg-open eine Reihe von Variablen der Form XDG_IRGENDWAS. Du versuchst nicht etwa, xdg-open außerhalb einer Desktop-Session zu starten, oder?
-
nene wird alles innerhalb einer Desktop Session aufgerufen, habe jetzt auch meine default mimes gesetzt und alles funktioniert wie es soll.
Die Envs sind auch sauber, da gibt es kein Anzeichen darauf, woher noch was genommen haben könnte.
Naja hat sich ja jetzt alles geklärt, kann daher geschlossen werden.