--- a/unix/vncserver/vncsession.c 2022-02-14 15:33:43.235664547 +0000 +++ b/unix/vncserver/vncsession.c 2022-02-14 17:09:00.586000641 +0000 @@ -413,7 +413,7 @@ } static pid_t -run_script(const char *username, const char *display, char **envp) +run_script(const char *username, const char *display, const char *xsession, char **envp) { struct passwd *pwent; pid_t pid; @@ -472,8 +472,14 @@ child_argv[0] = CMAKE_INSTALL_FULL_LIBEXECDIR "/vncserver"; child_argv[1] = display; - child_argv[2] = NULL; - + if ( strlen(xsession) > 0 ){ + child_argv[2] = xsession; + child_argv[3] = NULL; + } + else{ + child_argv[2] = NULL; + } + execvp(child_argv[0], (char*const*)child_argv); // execvp failed @@ -488,16 +494,19 @@ char pid_file[PATH_MAX]; FILE *f; - const char *username, *display; + const char *username, *display, *xsession=""; - if ((argc != 3) || (argv[2][0] != ':')) { + if ( ( (argc != 3) && (argc != 4) ) || (argv[2][0] != ':')) { fprintf(stderr, "Syntax:\n"); - fprintf(stderr, " %s \n", argv[0]); + fprintf(stderr, " %s []\n", argv[0]); return EX_USAGE; } username = argv[1]; display = argv[2]; + if (argc == 4 ) { + xsession = argv[3]; + } if (geteuid() != 0) { fprintf(stderr, "This program needs to be run as root!\n"); @@ -546,8 +555,8 @@ } setup_signals(); - - script = run_script(username, display, child_env); + + script = run_script(username, display, xsession, child_env); if (script == -1) { syslog(LOG_CRIT, "Failure starting vncserver script"); stop_pam(pamh, pamret);