แฟล็ก -X (การส่งต่อ X11) ไม่ทำงานใน Windows


16

ฉันใช้ Open SSH (OpenSSH_6.6.1p1, OpenSSL 1.0.1i 6 ส.ค. 2014) ใน Windows 8.1 X11 การส่งต่อไม่ทำงาน ดูเหมือนจะไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม DISPLAY

ตัวอย่างเช่นถ้าฉันใช้ BitVise หรือ Putty เพื่อเชื่อมต่อและรัน env ฉันจะเห็น:

[marko@vm:~]$ env
XDG_SESSION_ID=6
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.1.174 61102 22
SSH_TTY=/dev/pts/0
USER=marko
MAIL=/var/mail/marko
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/marko
LANG=en_CA.UTF-8
NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
SHLVL=1
HOME=/home/marko
LANGUAGE=en_CA:en
LOGNAME=marko
SSH_CONNECTION=192.168.1.174 61102 192.168.1.64 22
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=localhost:10.0
_=/usr/bin/env

ถ้าฉันใช้ OpenSSH (ssh -X marko @ vm):

[marko@vm:~]$ env
XDG_SESSION_ID=8
TERM=cygwin
SHELL=/bin/bash
SSH_CLIENT=192.168.1.174 61150 22
SSH_TTY=/dev/pts/1
USER=marko
MAIL=/var/mail/marko
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/marko
LANG=en_CA.UTF-8
NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
SHLVL=1
HOME=/home/marko
LANGUAGE=en_CA:en
LOGNAME=marko
SSH_CONNECTION=192.168.1.174 61150 192.168.1.64 22
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/env

1
อาจเป็นสิ่งที่ชัดเจน แต่ฉันไม่สามารถบอกได้อย่างแน่นอนจากโพสต์ของคุณคุณมี X server ติดตั้งอยู่บน Windows จริง ๆหรือไม่เช่นการติดตาม bitvise.com/ssh-x11-forwarding ?

1
ใช่ฉันมี Xming X Server ( straightrunning.com/xmingnotes )
abendigo

คุณ - เพียงเพื่อทดสอบสิ่ง - ลองเหมือนกันกับ PuTTY หรือไม่ ถ้าไม่ฉันขอแนะนำให้ลองใช้และดูว่าใช้งานได้หรือไม่
polemon

1
ใช่มันทำงานได้ในฉาบ
abendigo

ฉันกำลังตรวจสอบ Windows VM ของฉันตอนนี้ มันอาจจะง่ายเหมือนการตรวจสอบว่าชนิดของ PuTTY ถูกตั้งค่าให้ทำงานได้อย่างไร ฉันจะเพิ่มการตอบกลับในอีกไม่กี่ชั่วโมง
polemon

คำตอบ:


16

คุณได้ตั้งค่าDISPLAYตัวแปรสภาพแวดล้อมบนไคลเอนต์หรือไม่ ฉันไม่แน่ใจว่าคุณใช้เชลล์ตัวใด แต่ด้วยบอร์นเชลล์อนุพันธ์ (เช่นทุบตี) โปรดลอง:

export DISPLAY=127.0.0.1:0
ssh -X marko@vm

หรือถ้าคุณใช้ cmd.exe:

set DISPLAY=127.0.0.1:0
ssh -X marko@vm

ขอบคุณนี่คือสิ่งที่ฉันขาดหายไป! ฉันจะมอบรางวัลให้ทันทีที่ได้รับอนุญาต
abendigo

โปรดทราบว่าฉันได้รับคำตอบของ roaima (ด้านล่าง) เพราะมันอธิบายถึงสาเหตุรวมถึงให้คำตอบ
Azhrei

2
ดังนั้นคำตอบของ roaima จึงอธิบายว่าทำไมปัญหาเกิดขึ้น แต่มันไม่ได้ช่วยฉันแก้ปัญหา ฉันอธิบายในคำถามของฉันว่าฉันกำลังเรียกใช้ windows คำตอบของ yaegashi ทำให้ฉันได้รับคำสั่งให้เข้าไปใน windows เพื่อแก้ไขปัญหาของฉัน นั่นคือเหตุผลที่ฉันเลือกคำตอบนี้
abendigo

ฉันลงทะเบียนบัญชีเพียงเพื่อโหวตคำตอบนี้ ฉันค้นหาอินเทอร์เน็ตมานานก่อนจะมาถึงที่นี่
Rio Wing

3
วิธีนี้ไม่ได้ผลสำหรับฉัน set DISPLAY=anythingตามด้วยการssh -X user@remoteคืนค่าCreateProcessW failed error:2 ssh_askpass: posix_spawn: No such file or directory Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).การยกเลิกการตั้งค่าตัวแปรสภาพแวดล้อมด้วยset DISPLAY=ทำให้ฉันสามารถประสบความสำเร็จได้อีกครั้ง แต่ไม่ต้องส่งต่อ X ฉันไม่รู้สึกว่าการตั้งค่า DISPLAY ควรทำให้ซอฟต์แวร์ถามรหัสผ่านของฉันด้วยวิธีนี้ github.com/PowerShell/Win32-OpenSSH/issues/1088 github.com/PowerShell/Win32-OpenSSH/issues/1088
Pavel Komarov

14

เมื่อคุณเรียกใช้ssh -X remotehostและคุณได้รับDISPLAY=localhost:10การนำเสนอไปยังโฮสต์ระยะไกล sshฟังพอร์ตนั้นและส่งต่อทราฟฟิกกลับไปยังระบบการโทรโดยใช้ค่าดั้งเดิมของDISPLAYเพื่อกำหนดที่อยู่เซิร์ฟเวอร์

DISPLAY=:0มันน่าจะเป็นที่ในระบบท้องถิ่นของคุณคุณจะได้มี หรือถ้าคุณไม่ได้นั่นคือสิ่งที่มันถูกเริ่มต้นเป็น สิ่งนี้สั่งให้ระบบโลคัลใช้ซ็อกเก็ตโดเมน UNIX เพื่อสื่อสารกับจอแสดงผล น่าเสียดายXmingที่ Windows ไม่ได้ตั้งค่าซ็อกเก็ตโดเมน UNIX ดังนั้นsshการส่งต่อ X11 ของคุณจึงล้มเหลวเนื่องจากข้อผิดพลาดประเภทนี้:

$ export DISPLAY=:0
$ ssh -X remotehost xlogo
connect /tmp/.X11-unix/X0: No such file or directory
Error: Can't open display: localhost:10.0

การแก้ไขอย่างน้อยที่สุดXmingก็ค่อนข้างง่าย ปรับเปลี่ยนDISPLAYตัวแปรเพื่ออ้างอิงซ็อกเก็ต TCP ที่รับฟังแทนซ็อกเก็ตโดเมน UNIX

$ export DISPLAY=localhost:0
$ ssh -X remotehost xlogo

คุณอาจต้องปรับXmingการกำหนดค่าของคุณเพื่อฟังบนพอร์ต TCP ในเครื่อง 6000 นี่คือวิธีที่ฉันเริ่มXming:

Xming.exe :0 -clipboard -multiwindow

และนี่คือหลักฐานยืนยันว่าXmingกำลังฟังบนพอร์ต TCP / 6000:

$ netstat -na | grep ':6000 .*LISTEN'
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING

ขอบคุณฉันมีปัญหาตรงนี้! ฉันไม่ทราบว่า: 0 หมายถึงการเชื่อมต่อจะทำผ่านซ็อกเก็ต ฉันมักจะคิดว่ามันแค่จดชวเลขสำหรับ localhost: 0
Andreas Raster

ฉันมีปัญหาเดียวกันกับ Bash สำหรับ Ubuntu สำหรับ Windows & Xming และสิ่งนี้ก็แก้ไขได้! localhost:0ฉันเพิ่งมีการตั้งค่าการแสดงไป
Ben Richards

ความคิดว่าทำไมDISPLAY=:0ทำงานได้ดีบน WSL + Xming สำหรับxeyesแต่ไม่ssh -X? ไม่ssh -Xตีความ $ DISPLAY แตกต่างจากลูกค้าอื่น ๆ X11 ในประเทศหรือไม่ ไคลเอนต์ X11 อื่น ๆ ถอยกลับไปโดยอัตโนมัติlocalhost:0แต่ssh -Xไม่ได้?
Markus Kuhn

เมื่อman Xมันบอกว่าชื่อโฮสต์ว่างใน DISPLAY =: 0 หมายถึง "การขนส่งในพื้นที่ที่มีประสิทธิภาพที่สุดจะถูกเลือก" ดังนั้นอาจssh -Xใช้อัลกอริธึมที่แตกต่างในการทำเช่นนั้นเปรียบเทียบกับพูดxeyes?
Markus Kuhn

@MarkusKuhn บางที WSL + Xming นั้นแตกต่างจาก Cygwin + Xming ฉันเห็นว่าฉันกำลังใช้DISPLAY=:0และssh -Xส่งต่ออย่างมีความสุข
roaima

1

ด้วย ssh ใน Windows10 และ Xming ฉันดูเหมือนจะได้ผลลัพธ์ที่ "ดี" (?) ด้วย:

set DISPLAY=localhost:0

และสร้างวัตถุ C: \ dev \ tty เช่นด้วย

mkdir \dev
echo x > \dev\tty

และการใช้ssh -Y(ไม่ssh -X)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.