Làm cách nào để chạy ứng dụng đồ họa trên máy chủ từ xa khi đăng nhập qua SSH?


14

Tôi đang cố gắng chạy gedittừ thiết bị đầu cuối SSH trên Windows, được kết nối với phiên bản Amazon EC2 chạy Ubuntu 12.04 Server và tôi gặp lỗi này:

Cannot open display:

Làm thế nào để tôi sửa nó?

Câu trả lời:


14

Vì bạn đang sử dụng Windows về phía mình, bạn sẽ cần một máy khách SSH chạy máy chủ X cục bộ trên Windows để chạy các ứng dụng đồ họa từ máy chủ từ xa trên màn hình của bạn.

Từ kinh nghiệm, tôi muốn giới thiệu MobaXTerm miễn phí có chức năng này tích hợp. Vui lòng tải xuống và dùng thử:

nhập mô tả hình ảnh ở đây

Nếu bạn gặp bất kỳ lỗi nào, đó là vì đôi khi hình ảnh máy chủ tối thiểu có thể không được thiết lập để cho phép chuyển tiếp X vào nó. Trong trường hợp đó, xin vui lòng bình luận và tôi sẽ giúp bạn giải quyết nó; Tôi đã thực hiện điều này với rất nhiều VPS tối thiểu chạy Ubuntu / Debian.


17

Vì vậy, bạn đang kết nối từ máy tính gia đình của bạn (hãy gọi nó là máy của bạn ) đến một máy chủ (hãy gọi nó là máy chủ ) thông qua ssh ? Bạn muốn bắt đầu một chương trình với một cửa sổ đồ họa trên máy chủ thông qua máy của bạn? Nếu đó là chính xác hơn bằng mọi cách đọc trên.

Hãy gọi chương trình để bắt đầu geditnhưng quá trình này giống nhau cho tất cả. Tùy thuộc vào nơi bạn muốn xem cửa sổ đồ họa bỏ qua tiêu đề bên phải.

Cửa sổ trên màn hình máy của bạn

Nếu bạn muốn xem và sử dụng cửa sổ của gedit trên máy từ xa của mình nhưng bắt đầu vào máy chủ, bạn sẽ muốn phiên shell của mình trông như thế này:

user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (Message Of The Day)
*******************************************************************************
user@server:~$ gedit .bash_aliases 

** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme

(gedit:7851): Gtk-WARNING **: Attempting to store changes 

Đừng bận tâm đến các cảnh báo, chúng là bình thường - cửa sổ gedit sẽ bật lên trên màn hình của máy từ xa giống như trên máy chủ. Mẹo nhỏ là sử dụng "-X" -option như trong ssh -Xđó cho phép tạo đường hầm X và đặt DISPLAYbiến đúng.

Điều này giả định rằng bạn đang sử dụng máy khách SSH hỗ trợ X11 và máy chủ của bạn có máy chủ X đang chạy (một số không cần GUI không chạy máy chủ X). Đặc biệt trên windows, đây có thể là một vấn đề vì hầu hết các chương trình thiết bị đầu cuối của windows không có X. Như izx đã nói, MobaXTerm là một trong nhiều máy khách SSH cho các cửa sổ có X-Server.

Tuy nhiên, đối với máy chủ thiếu X11, bạn phải cài đặt nó.

Trên màn hình của máy chủ

Bạn cũng có thể bắt đầu một phiên bản trên màn hình máy chủ của mình bằng cách gọi gedit như thế này:

ssh user@server
DISPLAY=:0.0 gedit

Bạn phải thay thế giá trị phù hợp thay vì :0.0để có được nó trên màn hình X bên phải (chỉ quan trọng nếu nhiều màn hình được kết nối với máy chủ của bạn hoặc nếu nó có phần kỳ dị trong cấu hình của nó).

Ở đây, kịch bản phổ biến nhất cho việc không hoạt động sẽ là nếu Máy chủ thiếu X11-Server nhưng không có màn hình kết nối với nó hoặc không có giao diện người dùng đồ họa và bạn sẽ không đọc được điều này: D.

Một chút lý thuyết

Tôi không phải chuyên gia về điều này, nhưng cách tôi nghĩ rằng nó hoạt động được, mà mỗi màn hình vật lý, tức là mỗi màn hình kết nối với một máy tính cá nhân được một số chạy theo hình thức 0.0, 1.0, 2.0, ...

Số này được gán bởi X-Window-System hay còn gọi là X11. Đó là một lớp để cung cấp một mạng và giao diện đồ họa cơ bản mà Unity, Gnome, KDE và những thứ tương tự có thể xây dựng dựa trên.

Bạn có thể xem có bao nhiêu màn hình của một máy nhất định và số lượng đang sử dụng bằng cách chạy for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; donetrên máy đang được đề cập. * Sau đó, mỗi máy tính được cấu hình để làm cho màn hình của nó khả dụng và chạy máy chủ X có tên máy chủ. Bạn có thể sử dụng màn hình máy chủ từ bất kỳ máy nào trong cùng một mạng bằng cách đặt DISPLAYbiến của mình cho phù hợp DISPLAY=hostname:0.0. Ssh làm điều này cho bạn một cách hợp lý nếu bạn cung cấp -Xtùy chọn.

* Lưu ý: Tôi cho rằng có một cách tốt hơn so với vòng lặp for này.

Nếu vẫn thất bại

Sử dụng một trình soạn thảo văn bản shell. vi, vim, nanoemacslà phổ biến nhất và ít nhất một trong số họ sẽ được cài đặt và hoạt động. Trong số đó nanolà dễ nhất và tự giải thích nhất.


@coding crow: Nếu bạn SSH từ Windows, điều đó phụ thuộc vào ứng dụng khách có hoạt động hay không. Một số khách hàng không giao tiếp với X11 và do đó không có chuyển tiếp X - đối với một số mặc dù nó chỉ hoạt động tốt. Nếu không hoạt động, hãy thay đổi máy khách SSH cho Windows hoặc sử dụng nano, vim hoặc emacs như xyious đề xuất trong câu trả lời của anh ấy.
con-f-sử dụng

Có, tôi đã bỏ phiếu, nhìn thấy nó trong hồ sơ của tôi và tự hỏi tại sao không có bình luận hay bất cứ điều gì. Không quá quan trọng không phải làm với bạn, chỉ tự hỏi - rất vui vì vấn đề của bạn đã được giải quyết và tôi có thể giúp đỡ một chút ở đây.
con-f-sử dụng

Tôi đã sửa đổi forvòng lặp một chút..tôi sẽ chỉ hiển thị địa chỉ hiển thị, vd :0 :0.0. Vui lòng quay trở lại nếu bạn nghĩ rằng đó không phải là điều bạn muốn ..
heemayl

0

Con-f-use nói gì .

Về cơ bản, bạn có một thiết bị đầu cuối thông qua SSH và Gedit là một chương trình GUI. câu trả lời của con-f-use sẽ khiến nó hoạt động từ phiên máy khách GUI của Linux.

Tùy chọn khác sẽ là sử dụng trình soạn thảo không phải GUI như nano, Vi hoặc nhiều trình soạn thảo khác.

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.