]> source.dussan.org Git - tigervnc.git/commitdiff
Accept a cfg as an argument as an alt way to start the viewer 632/head
authorMathias Jonsson <math.jonsson@gmail.com>
Sun, 22 Apr 2018 17:10:30 +0000 (19:10 +0200)
committerMathias Jonsson <math.jonsson@gmail.com>
Tue, 22 May 2018 20:48:41 +0000 (22:48 +0200)
The user can specify a tigervnc configuration file as an argument to the
viewer. Previously the viewer assumed this to be a server, but now we
will first check if there is any file matching the given argument. If
so, try to load the content of that file, like we normally do.

Fixes issue #38.

java/com/tigervnc/vncviewer/VncViewer.java
vncviewer/vncviewer.cxx
vncviewer/vncviewer.man

index 566169bebef3fce6085bb05f279a48ec997563a2..93d3f3be8f2ca785132da58ab9a29db4feec9b24 100644 (file)
@@ -208,6 +208,8 @@ public class VncViewer extends javax.swing.JApplet
       vncServerName.put(argv[i].toCharArray()).flip();
     }
 
+    // Check if the server name in reality is a configuration file
+    potentiallyLoadConfigurationFile(vncServerName);
   }
 
   public static void usage() {
@@ -215,6 +217,7 @@ public class VncViewer extends javax.swing.JApplet
                     "[host:displayNum]\n"+
                     "       vncviewer [options/parameters] -listen [port] "+
                     "[options/parameters]\n"+
+                    "       vncviewer [options/parameters] [.tigervnc file]\n"+
                     "\n"+
                     "Options:\n"+
                     "  -log <level>    configure logging level\n"+
@@ -277,6 +280,27 @@ public class VncViewer extends javax.swing.JApplet
     System.exit(1);
   }
 
+  public static void potentiallyLoadConfigurationFile(CharBuffer vncServerName) {
+    String serverName = vncServerName.toString();
+    boolean hasPathSeparator = (serverName.indexOf('/') != -1 ||
+                                (serverName.indexOf('\\')) != -1);
+
+    if (hasPathSeparator) {
+      try {
+        serverName = loadViewerParameters(vncServerName.toString());
+        if (serverName == "") {
+          vlog.info("Unable to load the server name from given file");
+          System.exit(1);
+        }
+        vncServerName.clear();
+        vncServerName.put(serverName).flip();
+      } catch (com.tigervnc.rfb.Exception e) {
+        vlog.info(e.getMessage());
+        System.exit(1);
+      }
+    }
+  }
+
   public static void newViewer() {
     String cmd = "java -jar ";
     try {
index 413260d96b269740b8298962f7bf2e082a4ce797..fabd665ad699a5a4927a0cbe7ece502c62612d6a 100644 (file)
@@ -349,8 +349,9 @@ static void usage(const char *programName)
 
   fprintf(stderr,
           "\nusage: %s [parameters] [host:displayNum] [parameters]\n"
-          "       %s [parameters] -listen [port] [parameters]\n",
-          programName, programName);
+          "       %s [parameters] -listen [port] [parameters]\n"
+          "       %s [parameters] [.tigervnc file]\n",
+          programName, programName, programName);
   fprintf(stderr,"\n"
           "Parameters can be turned on with -<param> or off with -<param>=0\n"
           "Parameters which take a value can be specified as "
@@ -368,6 +369,31 @@ static void usage(const char *programName)
   exit(1);
 }
 
+static void
+potentiallyLoadConfigurationFile(char *vncServerName)
+{
+  const bool hasPathSeparator = (strchr(vncServerName, '/') != NULL ||
+                                 (strchr(vncServerName, '\\')) != NULL);
+
+  if (hasPathSeparator) {
+    try {
+      strncpy(vncServerName, loadViewerParameters(vncServerName),
+              VNCSERVERNAMELEN);
+      if (vncServerName[0] == '\0') {
+        vlog.error("Unable to load the server name from given file");
+        if (alertOnFatalError)
+          fl_alert("Unable to load the server name from given file");
+        exit(EXIT_FAILURE);
+      }
+    } catch (rfb::Exception& e) {
+      vlog.error("%s", e.str());
+      if (alertOnFatalError)
+        fl_alert("%s", e.str());
+      exit(EXIT_FAILURE);
+    }
+  }
+}
+
 #ifndef WIN32
 static int
 interpretViaParam(char *remoteHost, int *remotePort, int localPort)
@@ -516,6 +542,9 @@ int main(int argc, char** argv)
     i++;
   }
 
+  // Check if the server name in reality is a configuration file
+  potentiallyLoadConfigurationFile(vncServerName);
+
   mkvnchomedir();
 
 #if !defined(WIN32) && !defined(__APPLE__)
index 22b46cd5cc6b8f41c7995af52db141e9c9bd63ee..729c01d6542e8c975bce60baa8de6b1d8fb9ffe0 100644 (file)
@@ -14,6 +14,10 @@ vncviewer \- VNC viewer for X
 .RI [ options ] 
 .B \-listen
 .RI [ port ]
+.br
+.B vncviewer
+.RI [ options ]
+.RI [ .tigervnc file ]
 .SH DESCRIPTION
 .B vncviewer
 is a viewer (client) for Virtual Network Computing.  This manual page documents
@@ -31,6 +35,18 @@ VNC server on that machine.  Either the machine name or display number can be
 omitted.  So for example ":1" means display number 1 on the same machine, and
 "snoopy" means "snoopy:0" i.e. display 0 on machine "snoopy".
 
+As another quick way to start a connection to a VNC server, specify a .tigervnc
+configuration file as an argument to the viewer, e.g.:
+
+.RS
+vncviewer ./some.tigervnc
+.RE
+
+where './some.tigervnc' is an existing and valid TigerVNC configuration file.
+The file name needs to include a path separator.  Additional options may be
+given too, but the given configuration file will overwrite any conflicting
+parameters.
+
 If the VNC server is successfully contacted, you will be prompted for a
 password to authenticate you.  If the password is correct, a window will appear
 showing the desktop of the VNC server.