ssh tunelando uma exibição local para outro servidor

4

Eu tenho uma simulação de suporte de teste GUI conectada a algum hardware que está sendo testado. O stand de teste é um Sun Sparc Ultra 2 SunOs 5.7. O software de simulação verifica se você está executando sua exibição em :0.0 . Se não, não aplicará energia. Nós não temos a fonte para reescrever a simulação para não verificar isso. Eu tenho uma necessidade de "ver" o que está sendo exibido no terminal local. Eu tentei x11vnc , mas parece que o Xsun pode não suportar a extensão de registro. SSH -X define o DISPLAY para :10.0 , de modo que esteja fora. Eu realmente preciso de porta para a frente a porta 6000 para dizer a porta 6001 na minha caixa de janelas executando o cgwin. (Eu estou supondo que 6001 é :1.0 e é o que o meu servidor x na minha caixa de janelas também estará listando). É possível que tudo isso seja possível?

Aqui está o código incorreto.

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

Eu recebo isso quando estou executando xdpyinfo -queryExtensions (truncado para relevância):

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  

Quando eu ssh [email protected] O $ DISPLAY é servername: 0.0, que é local, mas não consigo ver. Quando eu ssh -X [email protected] O $ DISPLAY é localhost: 0.0, que minha simulação considera remoto.

    
por Paul 12.08.2011 / 03:07

1 resposta

7

Se o software de simulação realmente verificar que o número de exibição é 0, você pode fazer com que seu monitor remoto seja 0. Certifique-se de não estar executando Xsun localmente ou executá-lo em uma tela diferente (por exemplo, Xsun :1 ). No arquivo de configuração do servidor OpenSSH /etc/ssh/sshd_config , adicione a linha X11DisplayOffset 0 .

Se você se conectar através de ssh, a variável de ambiente DISPLAY será definida como localhost:0.0 (tendo definido X11DisplayOffset como acima). Isso é (para todos os fins práticos) é sinônimo de localhost:0 que seu aplicativo aceita, então você pode colocar isso em seu .profile :

DISPLAY=${DISPLAY%.0}

Se o software de simulação desejar uma exibição local :0 , você pode tentar executá-lo em Xvfb ( v irtual f rame b uffer X servidor, não sei se é fornecido com o Solaris). Como acima, não execute um servidor X localmente em exibição :0 , execute-o em :1 se algum. Com o Xvfb, você não pode se conectar facilmente ao monitor, mas pode ver fotos das telas.

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

Como alternativa, você pode tentar um servidor X que seja exibido em uma janela, como Xnest, Xephyr ou VNC - novamente, se você estiver executando um servidor X local na máquina Sun, execute-o na exibição :1 . Por exemplo, com o VNC:

vncserver :1

e você pode até se conectar a esse servidor com um visualizador VNC em sua máquina Windows.

    
por 12.08.2011 / 14:30