rendered paste bodydiff --git a/src/screen.c b/src/screen.c
index 41f031e..0699007 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3282,8 +3283,45 @@ runCommand (CompScreen *s,
if (fork () == 0)
{
+ /* build a display string that uses the right screen number */
+ int stringLen;
+ char *pos, *delimiter, *screenString, *colon;
+
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)
+ {
+ strcpy (screenString, s->display->displayString);
+ delimiter = strrchr (screenString, ':');
+ if (delimiter)
+ {
+ colon = "";
+ delimiter = strchr (delimiter, '.');
+ if (delimiter)
+ *p = '\0';
+ }
+ else
+ {
+ /* insert :0 to keep the syntax correct */
+ colon = ":0";
+ }
+ pos = screenString + strlen (screenString);
+
+ snprintf (pos, stringLen - (pos - screenString) - 1,
+ ".%d", s->screenNum);
+
+ putenv (screenString);
+ free (screenString);
+ }
+ else
+ {
+ putenv (s->display->displayString);
+ }
+
execl ("/bin/sh", "/bin/sh", "-c", command, NULL);
exit (0);
}