diff --git a/src/screen.c b/src/screen.c index 41f031e..1051a08 100644 --- a/src/screen.c +++ b/src/screen.c @@ -3282,8 +3283,37 @@ runCommand (CompScreen *s, if (fork () == 0) { + /* build a display string that uses the right screen number */ + int stringLen; + char *delimiter, *screenString; + setsid (); - putenv (s->display->displayString); + + /* 5 extra chars should be enough for pretty much every situation */ + stringLen = strlen (s->display->displayString) + 5; + screenString = malloc (sizeof (char) * stringLen); + + if (screenString) + { + delimiter = strrchr (s->display->displayString, ':'); + if (delimiter) + { + delimiter = strchr (delimiter, '.'); + if (delimiter) + *p = '\0'; + } + + snprintf (screenString, stringLen, "%s.%d", + s->display->displayString, s->screenNum); + + putenv (screenString); + free (screenString); + } + else + { + putenv (s->display->displayString); + } + execl ("/bin/sh", "/bin/sh", "-c", command, NULL); exit (0); }