Cờ -X (Chuyển tiếp X11) dường như không hoạt động trong Windows


16

Tôi đang sử dụng Open SSH (OpenSSH_6.6.1p1, OpenSSL 1.0.1i 6 tháng 8 năm 2014) trong Windows 8.1. Chuyển tiếp X11 dường như không hoạt động. Biến môi trường HIỂN THỊ dường như không được đặt.

Ví dụ: nếu tôi sử dụng BitVise hoặc Putty để kết nối và chạy env, tôi thấy:

[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

Thay vào đó, nếu tôi sử dụng 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
Có thể là một điều hiển nhiên, nhưng tôi không thể chắc chắn từ bài đăng của mình - bạn có thực sự có máy chủ X được cài đặt trên Windows không, ví dụ như sau bitvise.com/ssh-x11-forwarding ?

1
Có, tôi có Xming X Server ( Straightrasty.com/xmingnotes )
abendigo

Bạn có - chỉ để kiểm tra mọi thứ - đã thử tương tự với PuTTY? Nếu không, tôi khuyên bạn nên thử với điều đó, và xem nếu nó hoạt động ở đó.
Polemon

1
vâng, nó hoạt động trong putty.
abendigo

Tôi đang kiểm tra Windows VM của mình ngay bây giờ. Nó có thể đơn giản như việc kiểm tra loại biến PuTTY nào để làm việc này. Tôi sẽ thêm một câu trả lời trong một vài giờ.
Polemon

Câu trả lời:


16

Bạn đã thiết lập DISPLAYbiến môi trường trên máy khách chưa? Tôi không chắc chắn bạn đang sử dụng shell nào, nhưng với đạo hàm shell Bourne (như bash), vui lòng thử:

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

Hoặc nếu bạn đang sử dụng cmd.exe:

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

Cảm ơn bạn, đây chính xác là những gì tôi đã thiếu! Tôi sẽ thưởng tiền thưởng ngay khi tôi được phép.
abendigo

Lưu ý rằng tôi đã bình chọn câu trả lời của roaima (bên dưới) vì nó mô tả lý do tại sao cũng như chỉ đưa ra câu trả lời.
Azhrei

2
Vì vậy, câu trả lời của roaima giải thích tại sao vấn đề xảy ra, nhưng nó không giúp tôi giải quyết vấn đề. Tôi đã giải thích trong câu hỏi của tôi rằng tôi đang chạy windows. Câu trả lời của yaegashi đã cho tôi một lệnh để vào cửa sổ giải quyết vấn đề của tôi. đó là lý do tại sao tôi chọn câu trả lời này
abendigo 7/07/2015

Tôi đã đăng ký một tài khoản chỉ để bình chọn câu trả lời này. Tôi đã tìm kiếm trên mạng từ lâu trước khi đến đây.
Rio Wing

3
Giải pháp này không hiệu quả với tôi. set DISPLAY=anythingtheo sau là ssh -X user@remotetrả về Việc CreateProcessW failed error:2 ssh_askpass: posix_spawn: No such file or directory Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).đặt biến môi trường với set DISPLAY=cho phép tôi ssh thành công một lần nữa, nhưng không hoạt động chuyển tiếp X. Nó không có nghĩa gì với tôi rằng việc cài đặt HIỂN THỊ sẽ khiến phần mềm yêu cầu mật khẩu của tôi theo cách này. github.com/PowerShell/Win32-OpenSSH/issues/1088 github.com/PowerShell/Win32-OpenSSH/issues/1088
Pavel Komarov

14

Khi bạn chạy ssh -X remotehostvà bạn được DISPLAY=localhost:10trình bày với máy chủ từ xa. sshlắng nghe trên cổng đó và chuyển lưu lượng truy cập trở lại hệ thống gọi, sử dụng giá trị ban đầu của nó DISPLAYđể xác định địa chỉ máy chủ.

Có thể là trên hệ thống địa phương của bạn, bạn đã có DISPLAY=:0. Hoặc nếu bạn không có, đó là những gì nó được mặc định là. Điều này hướng dẫn hệ thống cục bộ sử dụng ổ cắm miền UNIX để giao tiếp với màn hình. Thật không may Xmingtrên Windows không thiết lập ổ cắm tên miền UNIX đó để sshchuyển tiếp X11 của bạn không thành công với loại lỗi này:

$ 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

Cách khắc phục - ít nhất là theo cách này Xming- khá đơn giản. Sửa đổi DISPLAYbiến để tham chiếu ổ cắm TCP nghe thay vì ổ cắm miền UNIX.

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

Bạn có thể phải điều chỉnh Xmingcấu hình của mình để nghe trên cổng TCP cục bộ 6000. Đây là cách tôi bắt đầu Xming:

Xming.exe :0 -clipboard -multiwindow

Và đây là bằng chứng để xác nhận rằng Xmingđang lắng nghe trên cổng tcp / 6000:

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

Cảm ơn, tôi đã có vấn đề chính xác này! Tôi không biết rằng: 0 có nghĩa là kết nối được thực hiện qua một ổ cắm. Tôi luôn nghĩ rằng nó chỉ là tốc ký cho localhost: 0.
Andreas Raster

Tôi gặp vấn đề tương tự với Bash cho Ubuntu cho Windows & Xming, và điều này đã giải quyết nó! Tôi chỉ phải đặt HIỂN THỊ localhost:0.
Ben Richards

Bất kỳ ý tưởng tại sao DISPLAY=:0hoạt động tốt trên WSL + XMing cho xeyes, nhưng không phải cho ssh -X? Có ssh -Xdiễn giải $ HIỂN THỊ khác với các khách hàng X11 địa phương khác không? Các máy khách X11 khác có tự động quay lại localhost:0nhưng ssh -Xkhông?
Markus Kuhn

Trên man Xđó nói rằng tên máy chủ trống trong HIỂN THỊ =: 0 có nghĩa là "Phương tiện giao thông địa phương hiệu quả nhất sẽ được chọn." Vì vậy, có thể được ssh -Xsử dụng một thuật toán khác nhau để làm điều đó so với nói xeyes?
Markus Kuhn

@MarkusKuhn có lẽ WSL + Xming khác với Cygwin + Xming. Tôi thấy rằng tôi đang sử dụng DISPLAY=:0ssh -Xchuyển tiếp nó một cách hạnh phúc.
roaima

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.