ssh 将本地显示隧道传输到另一台服务器

ssh 将本地显示隧道传输到另一台服务器

我有一个 GUI 测试台模拟连接到一些正在测试的硬件。测试台是 Sun Sparc Ultra 2 SunOs 5.7。模拟软件会检查您的显示器是否在:0.0.如果不是,则不会通电。我们没有重写模拟的源代码来不检查这一点。我需要“查看”本地终端上显示的内容。我已经尝试过x11vnc,但似乎 Xsun 可能不支持记录扩展。 SSH -X 将 DISPLAY 设置为,:10.0这样就可以了。我确实需要将 6000 端口转发到运行 cgwin 的 Windows 机器上的 6001 端口。 (我假设 6001 是:1.0并且也是我的 Windows 盒子上的 x 服务器也将列出的内容)。这有可能吗?我已经穷途末路了。

这是有问题的代码。

/* Console can always access the HW */
if (xserver != (char *) NULL)
{
    /* if the first two characters are ":0" */
    if ((xserver[0] == ':') && (xserver[1] == '0'))
        termtype = TERMINAL_LOCAL;
    else if (uname(&utshost) == 0)
    {
        nnlen = strlen(utshost.nodename);
        if ((int) strlen(xserver) >= (int) (nnlen + 2))
        {
            if ((strncmp(xserver, utshost.nodename, nnlen) == 0) &&
                    (xserver[nnlen] == ':') && (xserver[nnlen + 1] == '0'))
                termtype = TERMINAL_LOCAL;
            else
                termtype = TERMINAL_REMOTE;
        } /* END if */
    } /* END if/else */
} /* END if */

我在运行时得到这个xdpyinfo -queryExtensions(为了相关性而被截断):

name of display:    localhost:0.0  
version number:    11.0  
vendor string:    The Cygwin/X Project  
vendor release number:    11001000  
maximum request size:  16777212 bytes  
motion buffer size:  256  
bitmap unit, bit order, padding:    32, LSBFirst, 32  
image byte order:    LSBFirst  
number of supported pixmap formats:    7  
supported pixmap formats:  
    depth 1, bits_per_pixel 1, scanline_pad 32  
    depth 4, bits_per_pixel 8, scanline_pad 32  
    depth 8, bits_per_pixel 8, scanline_pad 32  
    depth 15, bits_per_pixel 16, scanline_pad 32  
    depth 16, bits_per_pixel 16, scanline_pad 32  
    depth 24, bits_per_pixel 32, scanline_pad 32  
    depth 32, bits_per_pixel 32, scanline_pad 32  
keycode range:    minimum 8, maximum 255  
focus:  window 0x200023, revert to PointerRoot  
number of extensions:    22  
    BIG-REQUESTS  (opcode: 132)  
    Composite  (opcode: 146)  
    DAMAGE  (opcode: 147, base event: 90, base error: 149)  
    DOUBLE-BUFFER  (opcode: 138, base error: 138)  
    DPMS  (opcode: 139)  
    GLX  (opcode: 148, base event: 91, base error: 150)  
    Generic Event Extension  (opcode: 128)  
    MIT-SCREEN-SAVER  (opcode: 133, base event: 82)  
    RANDR  (opcode: 143, base event: 88, base error: 146)  
    RECORD  (opcode: 137, base error: 137)  
    RENDER  (opcode: 142, base error: 141)  
    SGI-GLX  (opcode: 148, base event: 91, base error: 150)  
    SHAPE  (opcode: 129, base event: 64)  
    SYNC  (opcode: 134, base event: 83, base error: 133)  
    X-Resource  (opcode: 145)  
    XC-MISC  (opcode: 136)  
    XFIXES  (opcode: 141, base event: 86, base error: 139)  
    XFree86-Bigfont  (opcode: 140)  
    XINERAMA  (opcode: 144)  
    XInputExtension  (opcode: 130, base event: 65, base error: 128)  
    XKEYBOARD  (opcode: 135, base event: 85, base error: 136)  
    XTEST  (opcode: 131)  
default screen number:    0  

当我 ssh[电子邮件受保护]$DISPLAY 是 servername:0.0 ,它是本地的,但我看不到。当我 ssh -X[电子邮件受保护]$DISPLAY 是 localhost:0.0,我的模拟将其视为远程。

答案1

如果模拟软件确实检查显示编号为0,则可以将远程显示设置为0。确保您不是Xsun在本地运行或在不同的显示器上运行(例如Xsun :1)。在 OpenSSH 服务器配置文件中/etc/ssh/sshd_config,添加以下行X11DisplayOffset 0

如果您通过 ssh 连接,DISPLAY环境变量将被设置为localhost:0.0(已X11DisplayOffset按上述设置)。这是(出于所有实际目的)localhost:0您的应用程序接受的同义词,因此您可以将其放入您的.profile

DISPLAY=${DISPLAY%.0}

如果仿真软件需要本地显示:0,您可以尝试在Xvfb中运行它(v虚拟的F拉梅承受X服务器,我不知道它是否随 Solaris 一起提供)。如上所述,不要在 display 上本地运行 X 服务器,如果有的话:0就运行它。:1使用 Xvfb,您无法轻松连接到显示器,但您可以看到屏幕的静态图像。

Xvfb :1 -screen 0 1024x768x16 -fbdir /tmp &
DISPLAY=:1 simulation-program &
xwud -in /tmp/Xvfb_screen0

或者,您可以尝试在窗口中显示的 X 服务器,例如 Xnest、Xephyr 或 VNC — 同样,如果您在 Sun 计算机上运行本地 X 服务器,请在显示上运行它:1。例如,使用 VNC:

vncserver :1

您甚至可以使用 Windows 计算机上的 VNC 查看器连接到该服务器。

相关内容