Kết xuất màn hình từ xa


10

Phòng thí nghiệm nghiên cứu của tôi gần đây đã thêm một máy chủ có card đồ họa NVIDIA mạnh mẽ, mà chúng tôi muốn sử dụng để thực hiện các tính toán khoa học. Vì nó không phải là máy trạm, chúng tôi sẽ phải điều hành công việc của mình từ xa, qua kết nối ssh. Hầu hết các ứng dụng của chúng tôi yêu cầu thực hiện kết xuất opengl vào bộ đệm ngoài màn hình, sau đó thực hiện phân tích hình ảnh về kết quả trong CUDA.

Điều tra ban đầu của tôi cho thấy rằng chuyển tiếp X11 là một ý tưởng tồi, bởi vì kết xuất opengl sẽ xảy ra trên máy khách (hay đúng hơn là máy chủ X11 - một quy ước đặt tên khó hiểu!) Và sẽ bị tắc nghẽn mạng khi gửi kết cấu lớn của chúng tôi. Chúng tôi sẽ không bao giờ cần hiển thị đầu ra, vì vậy có vẻ như không cần chuyển tiếp X11, nhưng Opengl cần $ HIỂN THỊ để được đặt thành một cái gì đó hợp lệ hoặc các ứng dụng của chúng tôi sẽ không chạy. Tôi chắc chắn rằng các trang trại tồn tại làm điều này, nhưng nó được thực hiện như thế nào? Tôi nghĩ rằng đây có lẽ là một vấn đề cấu hình X11 đơn giản, nhưng tôi không quen với nó để biết bắt đầu từ đâu.

Chúng tôi đang chạy máy chủ Ubuntu 10.04, chưa cài đặt gdm, gnome, v.v. Tuy nhiên, gói xserver-xorg được cài đặt.


Tôi sẽ thử <code> x11vnc </ code>, nhưng nó không có khả năng hoạt động
Hubert Kario

Câu trả lời:


6

Đã được một thời gian kể từ khi tôi hỏi câu hỏi này, vì vậy tôi nghĩ rằng tôi đã đề cập đến giải pháp mà cuối cùng chúng tôi đã sử dụng.

Chiếm màn hình X cục bộ

Cuối cùng, tôi chỉ chạy các chương trình opengl từ xa trên màn hình X cục bộ của máy chủ. Máy đang chạy phiên bản máy chủ Ubuntu và nó không chạy xserver mặc định, vì vậy tôi phải thiết lập một máy chủ xs để chạy khi khởi động (Tôi vừa cài đặt gói máy tính để bàn Ubuntu, giết một con muỗi bằng búa tạ), và sau đó đã cho tôi quyền truy cập vào màn hình X bằng cách sử dụng các lệnh này dưới dạng root: "export HIỂN THỊ =: 0.0; xhost + local:". Sau đó, tôi có thể ssh vào máy, gọi "export HIỂN THỊ =: 0,0" và sau đó chạy các chương trình opengl của tôi như bình thường. Bất cứ ai ngồi ở máy từ xa sẽ thấy cửa sổ bật lên và xem chương trình của tôi đang chạy, nhưng chúng tôi không có màn hình được kết nối nên đây không phải là vấn đề.

Điều quan trọng là sử dụng một số hình thức hiển thị ngoài màn hình, bởi vì đọc pixel trực tiếp từ bộ đệm màu trên màn hình có thể dẫn đến dữ liệu rác nếu cửa sổ bị che khuất bởi một cửa sổ khác. Vì bạn không thể nhìn thấy màn hình X, thật khó để biết điều này có xảy ra hay không. Kết xuất ngoài màn hình (ví dụ: các đối tượng Framebuffer (fbo) hoặc pbuffers) không gặp phải vấn đề này.

Chiếm quyền điều khiển Xscreen cục bộ của máy chủ không phải là một giải pháp lý tưởng, vì vậy đây là một vài lựa chọn thay thế tôi tìm thấy trên đường đi:

Framebuffers ảo

Xvfb là một tùy chọn, nhưng nó không hoạt động với tôi, vì OpenGL không được hưởng lợi từ việc tăng tốc phần cứng và các đối tượng bộ đệm khung không được hỗ trợ, cần thiết cho khả năng tương tác CUDA với OpenGL. Tuy nhiên, đây có thể là một tùy chọn khả thi khi việc chiếm quyền điều khiển màn hình cục bộ không được chấp nhận hoặc khi người dùng không thể nhận được các đặc quyền xhost.

VirtualGL

Từ trang web VirtualGL:

VirtualGL là gói nguồn mở cung cấp cho bất kỳ phần mềm hiển thị từ xa Unix hoặc Linux nào khả năng chạy các ứng dụng OpenGL với khả năng tăng tốc phần cứng 3D đầy đủ.

Đây chính xác là những gì tôi muốn, và nó có vẻ rất hứa hẹn, nhưng tôi không có thời gian để đối phó với sự phụ thuộc thư viện mới, vì vậy tôi đã không thử nghiệm nó. Tôi đoán rằng đây là giải pháp lý tưởng khi tôi có thể biên dịch, cài đặt và định cấu hình. Đây là những gì VirtualBox và một số máy chủ VNC sử dụng để hỗ trợ 3D tăng tốc phần cứng.


0

bạn có thể chạy bộ đệm khung ảo vfb trên máy, giống như một chiếc X11 giả. Chúng tôi đã từng chạy các ứng dụng HAD để mở Xwindow mà chúng tôi chưa bao giờ xem và chỉ cài đặt vfb và xuất $ HIỂN THỊ sang màn hình đó - giống như màn hình trên cli HTH


2
Cảm ơn vì tiền hỗ trợ! Tôi đã bắt đầu tìm hiểu về xvfb và có vẻ như kết xuất không sử dụng phần cứng đồ họa, mà thay vào đó lại chuyển thành bộ nhớ ảo. Bất cứ ai có thể xác nhận / từ chối điều này? Nếu đây là trường hợp, tôi nghĩ giải pháp này sẽ không tốt, bởi vì chúng tôi đang tìm cách tận dụng sức mạnh của card đồ họa của chúng tôi.
redmoskito
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.