]> source.dussan.org Git - tigervnc.git/commitdiff
Use <user>@<hostname> as the default desktop name
authorPierre Ossman <ossman@cendio.se>
Sun, 13 Jun 2021 16:28:16 +0000 (18:28 +0200)
committerPierre Ossman <ossman@cendio.se>
Sun, 13 Jun 2021 16:28:16 +0000 (18:28 +0200)
Is a lot more useful default than the previous "x11", or "x0vncserver".
At the same time give x0vncserver a parameter to change the name.

unix/x0vncserver/x0vncserver.cxx
unix/x0vncserver/x0vncserver.man
unix/xserver/hw/vnc/Xvnc.man
unix/xserver/hw/vnc/vncExtInit.cc

index 0bf10a90b9d889f83af942268c3490eaf952a1f0..89c9817e4bf8e5d42150793d8e3e2691173bfabc 100644 (file)
@@ -25,6 +25,8 @@
 #include <sys/stat.h>
 #include <unistd.h>
 #include <errno.h>
+#include <pwd.h>
+
 #include <rfb/Logger_stdio.h>
 #include <rfb/LogWriter.h>
 #include <rfb/VNCServerST.h>
@@ -50,11 +52,14 @@ using namespace network;
 
 static LogWriter vlog("Main");
 
+static const char* defaultDesktopName();
+
 IntParameter pollingCycle("PollingCycle", "Milliseconds per one polling "
                           "cycle; actual interval may be dynamically "
                           "adjusted to satisfy MaxProcessorUsage setting", 30);
 IntParameter maxProcessorUsage("MaxProcessorUsage", "Maximum percentage of "
                                "CPU time to be consumed", 35);
+StringParameter desktopName("desktop", "Name of VNC desktop", defaultDesktopName());
 StringParameter displayname("display", "The X display", "");
 IntParameter rfbport("rfbport", "TCP port to listen for RFB protocol",5900);
 StringParameter rfbunixpath("rfbunixpath", "Unix socket to listen for RFB protocol", "");
@@ -64,6 +69,36 @@ BoolParameter localhostOnly("localhost",
                             "Only allow connections from localhost",
                             false);
 
+static const char* defaultDesktopName()
+{
+  static char* name = NULL;
+
+  char hostname[HOST_NAME_MAX + 1];
+  struct passwd* pwent;
+
+  size_t len;
+
+  delete [] name;
+
+  if (gethostname(hostname, sizeof(hostname)) == -1)
+    return "";
+
+  pwent = getpwuid(getuid());
+  if (pwent == NULL)
+    return "";
+
+  len = snprintf(NULL, 0, "%s@%s", pwent->pw_name, hostname);
+  if (len < 0)
+    return "";
+
+  name = new char[len + 1];
+
+  snprintf(name, len + 1, "%s@%s", pwent->pw_name, hostname);
+
+  return name;
+}
+
+
 //
 // Allow the main loop terminate itself gracefully on receiving a signal.
 //
@@ -261,7 +296,7 @@ int main(int argc, char** argv)
     }
     XDesktop desktop(dpy, &geo);
 
-    VNCServerST server("x0vncserver", &desktop);
+    VNCServerST server(desktopName, &desktop);
 
     if (rfbunixpath.getValueStr()[0] != '\0') {
       listeners.push_back(new network::UnixListener(rfbunixpath, rfbunixmode));
index 55f30454d2687fa930b403ae5d66b5819de3334a..3ee0c97bea205fdbf7c52fe4d9aede8777405299 100644 (file)
@@ -46,6 +46,11 @@ arbitrary.
 
 .SH PARAMETERS
 
+.TP
+.B \-desktop \fIdesktop-name\fP
+Each desktop has a name which may be displayed by the viewer. It defaults to
+"<user>@<hostname>".
+.
 .TP
 .B \-display \fIdisplay\fP
 The X display name.  If not specified, it defaults to the value of the
index c85c396f59218e618e8a68aae6b2e130b60b5b79..59ed4ac044a1aba5d4bc24a6d457b03d56487f93 100644 (file)
@@ -72,7 +72,7 @@ case-insensitive.
 .TP
 .B \-desktop \fIdesktop-name\fP
 Each desktop has a name which may be displayed by the viewer. It defaults to
-"x11".
+"<user>@<hostname>".
 .
 .TP
 .B \-rfbport \fIport\fP
index 6c4612d1c708c675fe253f86efb08fc774064f9a..bdf563a85c75afef890caa7e0a5be502e5fbcca0 100644 (file)
@@ -19,6 +19,9 @@
 
 #include <stdio.h>
 #include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <pwd.h>
 
 #include <set>
 #include <string>
@@ -73,10 +76,12 @@ struct CaseInsensitiveCompare {
 typedef std::set<std::string, CaseInsensitiveCompare> ParamSet;
 static ParamSet allowOverrideSet;
 
+static const char* defaultDesktopName();
+
 rfb::IntParameter rfbport("rfbport", "TCP port to listen for RFB protocol",0);
 rfb::StringParameter rfbunixpath("rfbunixpath", "Unix socket to listen for RFB protocol", "");
 rfb::IntParameter rfbunixmode("rfbunixmode", "Unix socket access mode", 0600);
-rfb::StringParameter desktopName("desktop", "Name of VNC desktop","x11");
+rfb::StringParameter desktopName("desktop", "Name of VNC desktop", defaultDesktopName());
 rfb::BoolParameter localhostOnly("localhost",
                                  "Only allow connections from localhost",
                                  false);
@@ -95,6 +100,35 @@ rfb::BoolParameter sendPrimary("SendPrimary",
                                "Send the PRIMARY as well as the CLIPBOARD selection",
                                true);
 
+static const char* defaultDesktopName()
+{
+  static char* name = NULL;
+
+  char hostname[HOST_NAME_MAX + 1];
+  struct passwd* pwent;
+
+  size_t len;
+
+  delete [] name;
+
+  if (gethostname(hostname, sizeof(hostname)) == -1)
+    return "";
+
+  pwent = getpwuid(getuid());
+  if (pwent == NULL)
+    return "";
+
+  len = snprintf(NULL, 0, "%s@%s", pwent->pw_name, hostname);
+  if (len < 0)
+    return "";
+
+  name = new char[len + 1];
+
+  snprintf(name, len + 1, "%s@%s", pwent->pw_name, hostname);
+
+  return name;
+}
+
 static PixelFormat vncGetPixelFormat(int scrIdx)
 {
   int depth, bpp;