Ssh

ssh 將本地顯示器通過隧道連接到另一台伺服器

  • August 22, 2011

我有一個 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 name@server.com 的 $ DISPLAY is servername:0.0 which is local but I can not see. When I ssh -X name@server.com The $ DISPLAY 是 localhost:0.0 ,我的模擬將其視為遠端。

如果仿真軟體確實檢查到顯示器編號為 0,您可以將遠端顯示器設置為 0。確保您沒有在Xsun本地執行或在不同的顯示器上執行它(例如Xsun :1)。在 OpenSSH 伺服器配置文件/etc/ssh/sshd_config中,添加該行X11DisplayOffset 0

如果您通過 ssh 連接,DISPLAY環境變數將設置為localhost:0.0X11DisplayOffset如上設置)。這是(出於所有實際目的)localhost:0您的應用程序接受的同義詞,因此您可以將其放在您的.profile:

DISPLAY=${DISPLAY%.0}

如果仿真軟體需要本地顯示:0,可以嘗試在Xvfb中執行(虛擬緩衝X伺服器,知道是不是Solaris自帶的)。如上所述,不要在本地執行 X 伺服器 display ,如果有的話就執行它。使用 Xvfb,您無法輕鬆連接到顯示器,但您可以看到螢幕的靜止圖像。:0``:1

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

或者,您可以嘗試在視窗中顯示的 X 伺服器,例如 Xnest、Xephyr 或 VNC — 同樣,如果您在 Sun 機器上執行本地 X 伺服器,請在 display 上執行它:1。例如,使用 VNC:

vncserver :1

您甚至可以使用 Windows 機器上的 VNC 查看器連接到該伺服器。

引用自:https://unix.stackexchange.com/questions/18602