- 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]
This commit is contained in:
Jacob Nevins 2004-10-06 22:31:07 +00:00
Родитель e375ba107d
Коммит 98028c746f
10 изменённых файлов: 61 добавлений и 22 удалений

Просмотреть файл

@ -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.

Просмотреть файл

@ -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

2
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);

Просмотреть файл

@ -119,5 +119,3 @@ void platform_get_x11_auth(char *display, int *protocol,
pclose(fp);
sfree(localbuf);
}
const char platform_x11_best_transport[] = "unix";

Просмотреть файл

@ -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"));
}

Просмотреть файл

@ -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"))

Просмотреть файл

@ -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);

Просмотреть файл

@ -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.
*/

Просмотреть файл

@ -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;

Просмотреть файл

@ -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] == ':') {
/* no transport specified, use whatever we think is best */
return dupcat(platform_x11_best_transport, display, (char *)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
return dupstr(display);
ret = dupstr(display);
if(ret[0] == ':') {
/* no transport specified, use whatever we think is best */
char *s = dupcat(platform_x11_best_transport, display, (char *)0);
sfree(ret);
return s;
} else
return ret;
}
/*