]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
X forwarding changes:
authorJacob Nevins <jacobn@chiark.greenend.org.uk>
Wed, 6 Oct 2004 22:31:07 +0000 (22:31 +0000)
committerJacob Nevins <jacobn@chiark.greenend.org.uk>
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

[originally from svn r4604]

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 8a773ef23d3e1eb70e48e8f988ca145a2dd20aa4..4b4271bcdbdd0dd4a20d1121521b62c2bffb5235 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 240f7ceb40b57d1fad40dfe07a9b4a25d6a40ad6..575603d8d7916116415fde647849b9f3660ffdce 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 5e41b7ab5cebc3ba9999bf59d38957d865d1f5a3..687ce6ab72208499c456bbf27898087e24656f56 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 1c48b1411cc01680e767b291f9c79ea3d83ab0f2..e8d71959090efcbd287f3d40fe13fb5327a33aec 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 3c79ad63446081df5424f8edf7f784721ab2bb7b..3ed7ebf7bb2cb2d1a3fdb98e940bdc7689e91698 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 d144cb9f41aa52deb1a46a90357baaa75a18de02..146fcb30133d7b7b872fc2c417972cf723b8ec5e 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 6b1eabb7cbf7df03348492b528e1ff60df8c330a..d71d28988d6501138455a36aeb9a6f0dc7e2b1c0 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 6e1a0edc9a6f677ff41731379ccf53cc02c0e333..c86b8ea7d6376abd6078b5a56484dab44c9a78ff 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 71f09a872b6d479d2398f534ebd467b4b5a6d7cf..518eb157752d7cd58845fe31a7f1531aa9802e10 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 b0b826981d7975d0c220b067803e2e73c2e00514..80362ec0293d6279f26431ff48f5de1573c6ebdc 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;
 }
 
 /*