- 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
-\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
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.
-\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
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
/* 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);
pclose(fp);
sfree(localbuf);
}
-
-const char platform_x11_best_transport[] = "unix";
{
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"));
+}
*/
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"))
#include <stdlib.h>
#include <assert.h>
#include <unistd.h>
+#include <gdk/gdk.h>
#include "putty.h"
#include "storage.h"
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);
/* Do nothing, therefore no auth. */
}
-const char platform_x11_best_transport[] = "unix";
-
/*
* Default settings that are specific to PSFTP.
*/
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;
+/*
+ * Platform-independent bits of X11 forwarding.
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
/* 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;
}
/*