X forwarding changes:
authorjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Wed, 6 Oct 2004 22:31:07 +0000 (22:31 +0000)
committerjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Wed, 6 Oct 2004 22:31:07 +0000 (22:31 +0000)
 - new function platform_get_x_display() to find a sensible local display.
   On Unix, the Gtk apps weren't taking account of --display when
   determining where to send forwarded X traffic.
 - explicitly document that leaving X display location blank in config tries
   to do something sensible (and that it's now blank by default)
 - don't override X11Display setting in plink, since that's more properly
   done later

git-svn-id: svn://svn.tartarus.org/sgt/putty@4604 cda61777-01e9-0310-a592-d414129be87e

doc/config.but
doc/using.but
ssh.h
unix/ux_x11.c
unix/uxcons.c
unix/uxplink.c
unix/uxputty.c
unix/uxsftp.c
winmisc.c
x11fwd.c

index 8a773ef..4b4271b 100644 (file)
@@ -1,4 +1,4 @@
-\versionid $Id: config.but,v 1.91 2004/10/02 00:33:27 jacob Exp $
+\versionid $Id: config.but,v 1.92 2004/10/06 22:31:07 jacob Exp $
 
 \C{config} Configuring PuTTY
 
@@ -2106,10 +2106,10 @@ forwarding allows you to securely give those applications access to
 a local X display on your PC.
 
 To enable X11 forwarding, check the \q{Enable X11 forwarding} box.
-If your X display is not the primary display on your local machine
-(which it almost certainly will be unless you have deliberately
-arranged otherwise), you need to enter its location in the \q{X
-display location} box.
+If your X display is somewhere unusual, you will need to enter its
+location in the \q{X display location} box; if this is left blank,
+PuTTY try to find a sensible default in the environment, or use the
+primary local display (\c{:0}) if that fails.
 
 See \k{using-x-forwarding} for more information about X11
 forwarding.
index 240f7ce..575603d 100644 (file)
@@ -1,4 +1,4 @@
-\versionid $Id: using.but,v 1.32 2004/09/22 22:15:25 jacob Exp $
+\versionid $Id: using.but,v 1.33 2004/10/06 22:31:07 jacob Exp $
 
 \C{using} Using PuTTY
 
@@ -304,9 +304,10 @@ does do.
 
 You should then tick the \q{Enable X11 forwarding} box in the
 Tunnels panel (see \k{config-ssh-x11}) before starting your SSH
-session. The \q{X display location} box reads \c{localhost:0} by
-default, which is the usual display location where your X server
-will be installed. If that needs changing, then change it.
+session. The \q{X display location} box is blank by default, which
+means that PuTTY will try to use a sensible default such as \c{:0},
+which is the usual display location where your X server will be
+installed. If that needs changing, then change it.
 
 Now you should be able to log in to the SSH server as normal. To
 check that X forwarding has been successfully negotiated during
diff --git a/ssh.h b/ssh.h
index 5e41b7a..687ce6a 100644 (file)
--- a/ssh.h
+++ b/ssh.h
@@ -298,6 +298,8 @@ extern const char platform_x11_best_transport[];
 /* best X11 hostname for this platform if none specified */
 SockAddr platform_get_x11_unix_address(int displaynum, char **canonicalname);
 /* make up a SockAddr naming the address for displaynum */
+char *platform_get_x_display(void);
+/* allocated local X display string, if any */
 
 Bignum copybn(Bignum b);
 Bignum bn_power_2(int n);
index 1c48b14..e8d7195 100644 (file)
@@ -119,5 +119,3 @@ void platform_get_x11_auth(char *display, int *protocol,
     pclose(fp);
     sfree(localbuf);
 }
-
-const char platform_x11_best_transport[] = "unix";
index 3c79ad6..3ed7ebf 100644 (file)
@@ -318,3 +318,13 @@ int is_interactive(void)
 {
     return isatty(0);
 }
+
+/*
+ * X11-forwarding-related things suitable for console.
+ */
+
+const char platform_x11_best_transport[] = "unix";
+
+char *platform_get_x_display(void) {
+    return dupstr(getenv("DISPLAY"));
+}
index d144cb9..146fcb3 100644 (file)
@@ -73,8 +73,6 @@ static Config cfg;
  */
 char *platform_default_s(const char *name)
 {
-    if (!strcmp(name, "X11Display"))
-       return dupstr(getenv("DISPLAY"));
     if (!strcmp(name, "TermType"))
        return dupstr(getenv("TERM"));
     if (!strcmp(name, "UserName"))
index 6b1eabb..d71d289 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdlib.h>
 #include <assert.h>
 #include <unistd.h>
+#include <gdk/gdk.h>
 
 #include "putty.h"
 #include "storage.h"
@@ -105,6 +106,21 @@ char *make_default_wintitle(char *hostname)
     return dupcat(hostname, " - PuTTY", NULL);
 }
 
+/*
+ * X11-forwarding-related things suitable for Gtk app.
+ */
+
+const char platform_x11_best_transport[] = "unix";
+
+char *platform_get_x_display(void) {
+    const char *display;
+    /* Try to take account of --display and what have you. */
+    if (!(display = gdk_get_display()))
+       /* fall back to traditional method */
+       display = getenv("DISPLAY");
+    return dupstr(display);
+}
+
 int main(int argc, char **argv)
 {
     extern int pt_main(int argc, char **argv);
index 6e1a0ed..c86b8ea 100644 (file)
@@ -34,8 +34,6 @@ void platform_get_x11_auth(char *display, int *protocol,
     /* Do nothing, therefore no auth. */
 }
 
-const char platform_x11_best_transport[] = "unix";
-
 /*
  * Default settings that are specific to PSFTP.
  */
index 71f09a8..518eb15 100644 (file)
--- a/winmisc.c
+++ b/winmisc.c
@@ -16,6 +16,11 @@ void platform_get_x11_auth(char *display, int *proto,
 
 const char platform_x11_best_transport[] = "localhost";
 
+char *platform_get_x_display(void) {
+    /* We may as well check for DISPLAY in case it's useful. */
+    return dupstr(getenv("DISPLAY"));
+}
+
 Filename filename_from_str(const char *str)
 {
     Filename ret;
index b0b8269..80362ec 100644 (file)
--- a/x11fwd.c
+++ b/x11fwd.c
@@ -1,3 +1,7 @@
+/*
+ * Platform-independent bits of X11 forwarding.
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
@@ -228,14 +232,21 @@ int x11_get_screen_number(char *display)
 
 /* Find the right display, returns an allocated string */
 char *x11_display(const char *display) {
-    if(!display || !*display)
-       if(!(display = getenv("DISPLAY")))
-           display = ":0";
-    if(display[0] == ':') {
+    char *ret;
+    if(!display || !*display) {
+       /* try to find platform-specific local display */
+       if(!(ret = platform_get_x_display()))
+           /* plausible default for all platforms */
+           ret = dupstr(":0");
+    } else
+       ret = dupstr(display);
+    if(ret[0] == ':') {
        /* no transport specified, use whatever we think is best */
-       return dupcat(platform_x11_best_transport, display, (char *)0);
+       char *s = dupcat(platform_x11_best_transport, display, (char *)0);
+       sfree(ret);
+       return s;
     } else
-       return dupstr(display);
+       return ret;
 }
 
 /*