TurboVNC implements this more simply as a "vncserver -fg" switch, which means "run in the foreground". It does the same thing you are doing below, except that it uses the built-in kill() function, which is safer than trying to invoke another instance of vncserver with -kill:
if ($opt{'-fg'}) { system("$vncUserDir/xstartup >> " . "edString($desktopLog) . " 2>&1"); if (kill 0, `cat $pidFile`) { $opt{'-kill'} = ':'.$displayNumber; &Kill(); } } else { system("$vncUserDir/xstartup >> " . "edString($desktopLog) . " 2>&1 &"); } As you know, the implication of being able to kill Xvnc after the window manager exits is that vncserver has to run as a foreground process rather than returning control to the console. CTRL-C'ing it will kill the session. However, running vncserver as a foreground process is also necessary when used with most grid software. I would be OK with putting this same switch into TigerVNC, since it has been road tested with TurboVNC already. As far as checking for the VNC password, we're no longer requiring "VeNCrypt" to be specified in the -SecurityTypes parameter, so checking for that won't work. The correct approach is to check whether -SecurityTypes is not specified -- or -- whether -SecurityTypes is specified and contains (case insensitive) "VncAuth". If either of those conditions is true, then and only then should vncserver check for the existence of the VNC password. DRC On 3/1/11 4:25 AM, Sebastiaan Breedveld wrote: > Hi all, > > This is actually a 2-in-1 patch (not sure if that is a good idea). I ran > into 2 problems with the old version: > > 1) When a VNC desktop is running, most users (accidentally) log out once > or twice, and then complain that their screen is black (or worse, has a > ghost image of the desktop). The users are usually not very interested > in what went wrong, they want to be able to simply restart the desktop. > I share their opinion, since the vncserver script is set-up in such a > way that it starts a virtual desktop (rather than X alone), and on > logout, no one is happy with an empty X session. > > I have added an option -TermOnLogout to the script, which runs vncserver > -kill after the desktop was shut down. The patch was inspired from here: > http://markmail.org/message/wh6avdxdbqm5kfwu#query:terminate%20vncserver%20on%20logout+page:1+mid:apdzqspklbhhhcdj+state:results > > (Optionally, the vncserver script can be run with an & so users can log > out of their shell.) > > > 2) When using the VeNCrypt security type, the ~/.vnc/passwd is not > necessary, yet the user is asked to create one. Same when using the > securitytype none. The script now checks for the -SecurityType option > and checks wether VeNCrypt type or none is specified. (That is, I am in > the assumption that the VeNCrypt type does not use the vnc password.) > > > Greetings, > Sebastiaan > > --- /usr/bin/vncserver 2011-01-24 00:23:33.000000000 +0100 > +++ vncserver 2011-03-01 10:34:01.000000000 +0100 > @@ -121,7 +121,7 @@ > # Check command line options > > &ParseOptions("-geometry",1,"-depth",1,"-pixelformat",1,"-name",1,"-kill",1, > - "-help",0,"-h",0,"--help",0,"-fp",1); > + "-help",0,"-h",0,"--help",0,"-fp",1,"-TermOnLogout", 0); > > &Usage() if ($opt{'-help'} || $opt{'-h'} || $opt{'--help'}); > > @@ -146,6 +146,25 @@ > $fpArgSpecified = 1; > } > > +# Check the arguments to check if the VeNCrypt security type is set > +# If so, there is no need for a user password > +$needvncpass = 1; > +foreach $arg (@ARGV) { > + my @splitargs = split('=', $arg); > + > + if (lc(@splitargs[0]) eq "-securitytypes") > + { > + my @splitargs2 = split(',', @splitargs[1]); > + > + if ((lc(@splitargs2[0]) eq "vencrypt") || (lc(@splitargs2[0]) > eq "none")) > + { > + # No password necessary > + $needvncpass = 0; > + } > + } > +} > + > + > &CheckGeometryAndDepth(); > > > @@ -157,14 +176,17 @@ > } > } > > -# Make sure the user has a password. > > -($z,$z,$mode) = stat("$vncUserDir/passwd"); > -if (!(-e "$vncUserDir/passwd") || ($mode & 077)) { > - warn "\nYou will require a password to access your desktops.\n\n"; > - system($exedir."vncpasswd -q $vncUserDir/passwd"); > - if (($? >> 8) != 0) { > - exit 1; > +# Make sure the user has a password, if required > +if ($needvncpass) > +{ > + ($z,$z,$mode) = stat("$vncUserDir/passwd"); > + if (!(-e "$vncUserDir/passwd") || ($mode & 077)) { > + warn "\nYou will require a password to access your desktops.\n\n"; > + system($exedir."vncpasswd -q $vncUserDir/passwd"); > + if (($? >> 8) != 0) { > + exit 1; > + } > } > } > > @@ -303,7 +325,16 @@ > } > $ENV{VNCDESKTOP}= $desktopName; > > -system("$vncUserDir/xstartup >> " . "edString($desktopLog) . " 2>&1 > &"); > +if ($opt{'-TermOnLogout'}) > +{ > + system("$vncUserDir/xstartup >> " . "edString($desktopLog) . " > 2>&1"); > + system("vncserver -kill :$displayNumber"); > +} > +else > +{ > + system("$vncUserDir/xstartup >> " . "edString($desktopLog) . " > 2>&1 &"); > +} > + > > exit; > > @@ -524,6 +555,7 @@ > " [-geometry <width>x<height>]\n". > " [-pixelformat rgbNNN|bgrNNN]\n". > " [-fp <font-path>]\n". > + " [-TermOnLogout]\n". > " <Xvnc-options>...\n\n". > " $prog -kill <X-display>\n\n"); > } > > > ------------------------------------------------------------------------------ > Free Software Download: Index, Search & Analyze Logs and other IT data in > Real-Time with Splunk. Collect, index and harness all the fast moving IT data > generated by your applications, servers and devices whether physical, virtual > or in the cloud. Deliver compliance at lower cost and gain new business > insights. http://p.sf.net/sfu/splunk-dev2dev > _______________________________________________ > Tigervnc-devel mailing list > Tigervnc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/tigervnc-devel ------------------------------------------------------------------------------ Free Software Download: Index, Search & Analyze Logs and other IT data in Real-Time with Splunk. Collect, index and harness all the fast moving IT data generated by your applications, servers and devices whether physical, virtual or in the cloud. Deliver compliance at lower cost and gain new business insights. http://p.sf.net/sfu/splunk-dev2dev _______________________________________________ Tigervnc-devel mailing list Tigervnc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tigervnc-devel