]> source.dussan.org Git - tigervnc.git/commitdiff
Make vncserver always run in the foreground
authorPierre Ossman <ossman@cendio.se>
Wed, 23 Jan 2019 14:29:41 +0000 (15:29 +0100)
committerPierre Ossman <ossman@cendio.se>
Thu, 12 Mar 2020 11:02:49 +0000 (12:02 +0100)
We need to be started as a system service for things to work correctly
anyway, so delegate the work of starting and stopping things to the
system service manager (e.g. systemd).

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

index 71d4724065eddf1c18cf5deb2219a462787ecd16..24f652481e3220da4a7e07e23de7b3334d5f8618 100755 (executable)
@@ -88,35 +88,16 @@ if ($fontPath eq "") {
     $fontPath = $defFontPath;
 }
 
-# Check command line options
-
-&ParseOptions("-kill",1,"-help",0,"-h",0,"--help",0,"-list",0,
-             "-fg",0,"-autokill",0);
-
-&Usage() if ($opt{'-help'} || $opt{'-h'} || $opt{'--help'});
-
-&Kill() if ($opt{'-kill'});
-
-&List() if ($opt{'-list'});
-
-# Create the user's vnc directory if necessary.
-if (!(-e $vncUserDir)) {
-    if (!mkdir($vncUserDir,0755)) {
-       die "$prog: Could not create $vncUserDir.\n";
-    }
-}
-
 # Find display number.
-if ((@ARGV > 0) && ($ARGV[0] =~ /^:(\d+)$/)) {
+if ((@ARGV == 1) && ($ARGV[0] =~ /^:(\d+)$/)) {
     $displayNumber = $1;
-    shift(@ARGV);
     if (!&CheckDisplayNumber($displayNumber)) {
        die "A VNC server is already running as :$displayNumber\n";
     }
-} elsif ((@ARGV > 0) && ($ARGV[0] !~ /^-/) && ($ARGV[0] !~ /^\+/)) {
-    &Usage();
-} else {
+} elsif (@ARGV == 0) {
     $displayNumber = &GetDisplayNumber();
+} else {
+    &Usage();
 }
 
 $vncPort = 5900 + $displayNumber;
@@ -328,19 +309,7 @@ if (-e "/tmp/.X11-unix/X$displayNumber" ||
 }
 $ENV{VNCDESKTOP}= $desktopName;
 
-if ($opt{'-fg'}) {
-    system("$Xsession $session{'Exec'} >> " . &quotedString($desktopLog) . " 2>&1");
-    if (kill 0, `cat $pidFile`) {
-        $opt{'-kill'} = ':'.$displayNumber;
-        &Kill();
-    }
-} else {
-    if ($opt{'-autokill'}) {
-        system("$Xsession $session{'Exec'}; $0 -kill :$displayNumber) >> " . &quotedString($desktopLog) . " 2>&1 &");
-    } else {
-        system("$Xsession $session{'Exec'} >> " . &quotedString($desktopLog) . " 2>&1 &");
-    }
-}
+system("$Xsession $session{'Exec'} >> " . &quotedString($desktopLog) . " 2>&1");
 
 exit;
 
@@ -539,139 +508,7 @@ sub removeSlashes
 
 sub Usage
 {
-    die("\nusage: $prog [:<number>]\n".
-       "                 [-fg]\n".
-       "                 [-autokill]\n".
-       "\n".
-       "       $prog -kill <X-display>\n\n".
-       "       $prog -list\n\n");
-}
-
-
-#
-# List
-#
-
-sub List
-{
-    opendir(dir, $vncUserDir);
-    my @filelist = readdir(dir);
-    closedir(dir);
-    print "\nTigerVNC server sessions:\n\n";
-    print "X DISPLAY #\tPROCESS ID\n";
-    foreach my $file (@filelist) {
-       if ($file =~ /$host:(\d+)$\.pid/) {
-           chop($tmp_pid = `cat $vncUserDir/$file`);
-           if (kill 0, $tmp_pid) {
-               print ":".$1."\t\t".`cat $vncUserDir/$file`;
-           } else {
-               unlink ($vncUserDir . "/" . $file);
-           }
-       }
-    }
-    exit;
-}
-
-
-#
-# Kill
-#
-
-sub Kill
-{
-    $opt{'-kill'} =~ s/(:\d+)\.\d+$/$1/; # e.g. turn :1.0 into :1
-
-    if ($opt{'-kill'} =~ /^:\d+$/) {
-       $pidFile = "$vncUserDir/$host$opt{'-kill'}.pid";
-    } else {
-       if ($opt{'-kill'} !~ /^$host:/) {
-           die "\nCan't tell if $opt{'-kill'} is on $host\n".
-               "Use -kill :<number> instead\n\n";
-       }
-       $pidFile = "$vncUserDir/$opt{'-kill'}.pid";
-    }
-
-    if (! -r $pidFile) {
-       die "\nCan't find file $pidFile\n".
-           "You'll have to kill the Xvnc process manually\n\n";
-    }
-
-    $SIG{'HUP'} = 'IGNORE';
-    chop($pid = `cat $pidFile`);
-    warn "Killing Xvnc process ID $pid\n";
-
-    if (kill 0, $pid) {
-       system("kill $pid");
-       sleep(1);
-       if (kill 0, $pid) {
-           print "Xvnc seems to be deadlocked.  Kill the process manually and then re-run\n";
-           print "    ".$0." -kill ".$opt{'-kill'}."\n";
-           print "to clean up the socket files.\n";
-           exit
-       }
-
-    } else {
-       warn "Xvnc process ID $pid already killed\n";
-       $opt{'-kill'} =~ s/://;
-
-       if (-e "/tmp/.X11-unix/X$opt{'-kill'}") {
-           print "Xvnc did not appear to shut down cleanly.";
-           print " Removing /tmp/.X11-unix/X$opt{'-kill'}\n";
-           unlink "/tmp/.X11-unix/X$opt{'-kill'}";
-       }
-       if (-e "/tmp/.X$opt{'-kill'}-lock") {
-           print "Xvnc did not appear to shut down cleanly.";
-           print " Removing /tmp/.X$opt{'-kill'}-lock\n";
-           unlink "/tmp/.X$opt{'-kill'}-lock";
-       }
-    }
-
-    unlink $pidFile;
-    exit;
-}
-
-
-#
-# ParseOptions takes a list of possible options and a boolean indicating
-# whether the option has a value following, and sets up an associative array
-# %opt of the values of the options given on the command line. It removes all
-# the arguments it uses from @ARGV and returns them in @optArgs.
-#
-
-sub ParseOptions
-{
-    local (@optval) = @_;
-    local ($opt, @opts, %valFollows, @newargs);
-
-    while (@optval) {
-       $opt = shift(@optval);
-       push(@opts,$opt);
-       $valFollows{$opt} = shift(@optval);
-    }
-
-    @optArgs = ();
-    %opt = ();
-
-    arg: while (defined($arg = shift(@ARGV))) {
-       foreach $opt (@opts) {
-           if ($arg eq $opt) {
-               push(@optArgs, $arg);
-               if ($valFollows{$opt}) {
-                   if (@ARGV == 0) {
-                       &Usage();
-                   }
-                   $opt{$opt} = shift(@ARGV);
-                   push(@optArgs, $opt{$opt});
-               } else {
-                   $opt{$opt} = 1;
-               }
-               next arg;
-           }
-       }
-       push(@newargs,$arg);
-    }
-
-    @ARGV = @newargs;
+    die("\nusage: $prog [:<number>]\n\n");
 }
 
 
index f8ce77d5cb1df895225bc33547a9d6606a353bc0..17c16b923db8b20af0bac3164008a5de85ed231c 100644 (file)
@@ -1,15 +1,9 @@
 .TH vncserver 1 "" "TigerVNC" "Virtual Network Computing"
 .SH NAME
-vncserver \- start or stop a VNC server
+vncserver \- start a VNC server
 .SH SYNOPSIS
 .B vncserver
 .RI [: display# ]
-.RB [ \-fg ]
-.RB [ \-autokill ]
-.br
-.BI "vncserver \-kill :" display#
-.br
-.BI "vncserver \-list"
 .SH DESCRIPTION
 .B vncserver
 is used to start a VNC (Virtual Network Computing) desktop.
@@ -30,34 +24,7 @@ available.  For example:
 vncserver :13
 .RE
 
-.SH OPTIONS
-You can get a list of options by passing \fB\-h\fP as an option to vncserver.
-
-.TP
-.B \-kill :\fIdisplay#\fP
-This kills a VNC desktop previously started with vncserver.  It does this by
-killing the Xvnc process, whose process ID is stored in the file
-"$HOME/.vnc/\fIhost\fP:\fIdisplay#\fP.pid".  The
-.B \-kill
-option ignores anything preceding the first colon (":") in the display
-argument.  Thus, you can invoke "vncserver \-kill $DISPLAY", for example
-inside your session to terminate it.
-.
-.TP
-.B \-fg
-Runs Xvnc as a foreground process.  This has two effects: (1) The VNC server
-can be aborted with CTRL-C, and (2) the VNC server will exit as soon as the
-user logs out of the window manager in the VNC session.  This may be necessary
-when launching TigerVNC from within certain grid computing environments.
-.
-.TP
-.B \-autokill
-Automatically kill Xvnc whenever the session exits.  In most cases, this has
-the effect of terminating Xvnc when the user logs out of the window manager.
-.
-.TP
-.B \-list
-Lists all VNC desktops started by vncserver.
+vncserver will exit once the started session exits.
 
 .SH FILES
 Several VNC-related files are found in the directory $HOME/.vnc: