]> source.dussan.org Git - tigervnc.git/commitdiff
Start the sessions using xinit
authorPierre Ossman <ossman@cendio.se>
Tue, 31 Jul 2018 14:06:17 +0000 (16:06 +0200)
committerPierre Ossman <ossman@cendio.se>
Thu, 12 Mar 2020 11:02:58 +0000 (12:02 +0100)
It keeps much better track of the X server and startup files than
we can do.

unix/vncserver/vncserver
unix/vncserver/vncserver.man

index 24f652481e3220da4a7e07e23de7b3334d5f8618..4a1a58b204c950d4edf3b3d77a93098e6c53eff0 100755 (executable)
@@ -109,8 +109,8 @@ my %config;
 
 # We set some reasonable defaults. Config file settings
 # override these where present.
-$default_opts{desktop} = &quotedString($desktopName);
-$default_opts{auth} = &quotedString($xauthorityFile);
+$default_opts{desktop} = $desktopName;
+$default_opts{auth} = $xauthorityFile;
 $default_opts{rfbwait} = 30000;
 $default_opts{rfbauth} = "$vncUserDir/passwd";
 $default_opts{rfbport} = $vncPort;
@@ -242,76 +242,42 @@ print XAUTH "add $host:$displayNumber . $cookie\n";
 print XAUTH "add $host/unix:$displayNumber . $cookie\n";
 close(XAUTH);
 
+$ENV{XAUTHORITY} = $xauthorityFile;
+
 # Now start the X VNC Server
 
+@cmd = ("xinit");
+
+push(@cmd, $Xsession, $session{'Exec'});
+
+push(@cmd, '--');
+
 # We build up our Xvnc command with options
-$cmd = $exedir."Xvnc :$displayNumber";
+push(@cmd, $exedir."Xvnc", ":$displayNumber");
 
 foreach my $k (sort keys %config) {
-  $cmd .= " -$k $config{$k}";
+  push(@cmd, "-$k");
+  push(@cmd, $config{$k}) if $config{$k};
   delete $default_opts{$k}; # file options take precedence
 }
 
 foreach my $k (sort keys %default_opts) {
-  $cmd .= " -$k $default_opts{$k}";
-}
-
-# Run $cmd and record the process ID.
-$pidFile = "$vncUserDir/$host:$displayNumber.pid";
-system("$cmd & echo \$! >$pidFile");
-
-# Give Xvnc a chance to start up
-
-sleep(3);
-if ($fontPath ne $defFontPath) {
-    unless (kill 0, `cat $pidFile`) {
-        if ($fpArgSpecified) {
-           warn "\nWARNING: The first attempt to start Xvnc failed, probably because the font\n";
-           warn "path you specified using the -fp argument is incorrect.  Attempting to\n";
-           warn "determine an appropriate font path for this system and restart Xvnc using\n";
-           warn "that font path ...\n";
-        } else {
-           warn "\nWARNING: The first attempt to start Xvnc failed, possibly because the font\n";
-           warn "catalog is not properly configured.  Attempting to determine an appropriate\n";
-           warn "font path for this system and restart Xvnc using that font path ...\n";
-        }
-       $cmd =~ s@-fp [^ ]+@@;
-       $cmd .= " -fp $defFontPath" if ($defFontPath);
-       system("$cmd & echo \$! >$pidFile");
-       sleep(3);
-    }
-}
-unless (kill 0, `cat $pidFile`) {
-    warn "Could not start Xvnc.\n\n";
-    unlink $pidFile;
-    open(LOG, "<$desktopLog");
-    while (<LOG>) { print; }
-    close(LOG);
-    die "\n";
+  push(@cmd, "-$k");
+  push(@cmd, $default_opts{$k}) if $default_opts{$k};
 }
 
 warn "\nNew '$desktopName' desktop is $host:$displayNumber\n\n";
 
-# Run the X startup script.
 warn "Starting desktop session $sessionname\n";
 
 warn "Log file is $desktopLog\n\n";
 
-# If the unix domain socket exists then use that (DISPLAY=:n) otherwise use
-# TCP (DISPLAY=host:n)
-
-if (-e "/tmp/.X11-unix/X$displayNumber" ||
-    -e "/usr/spool/sockets/X11/$displayNumber")
-{
-    $ENV{DISPLAY}= ":$displayNumber";
-} else {
-    $ENV{DISPLAY}= "$host:$displayNumber";
-}
-$ENV{VNCDESKTOP}= $desktopName;
+open STDOUT, "> $desktopLog"
+open STDERR, ">&STDOUT"
 
-system("$Xsession $session{'Exec'} >> " . &quotedString($desktopLog) . " 2>&1");
+exec(@cmd);
 
-exit;
+die "Failed to start session.\n";
 
 ###############################################################################
 # Functions
@@ -473,35 +439,6 @@ sub CheckDisplayNumber
     return 1;
 }
 
-#
-# quotedString returns a string which yields the original string when parsed
-# by a shell.
-#
-
-sub quotedString
-{
-    local ($in) = @_;
-
-    $in =~ s/\'/\'\"\'\"\'/g;
-
-    return "'$in'";
-}
-
-
-#
-# removeSlashes turns slashes into underscores for use as a file name.
-#
-
-sub removeSlashes
-{
-    local ($in) = @_;
-
-    $in =~ s|/|_|g;
-
-    return "$in";
-}
-
-
 #
 # Usage
 #
@@ -525,7 +462,7 @@ sub SanityCheck
     #
 
  cmd:
-    foreach $cmd ("uname","xauth") {
+    foreach $cmd ("uname","xauth","xinit") {
        for (split(/:/,$ENV{PATH})) {
            if (-x "$_/$cmd") {
                next cmd;
index 17c16b923db8b20af0bac3164008a5de85ed231c..8398ed04231bb301eefe5962ed97e41ed507f51f 100644 (file)
@@ -66,11 +66,6 @@ The VNC password file.
 .TP
 $HOME/.vnc/\fIhost\fP:\fIdisplay#\fP.log
 The log file for Xvnc and the session.
-.TP
-$HOME/.vnc/\fIhost\fP:\fIdisplay#\fP.pid
-Identifies the Xvnc process ID, used by the
-.B \-kill
-option.
 
 .SH SEE ALSO
 .BR vncviewer (1),