X Chuyển tiếp với kết xuất gián tiếp thất bại với các máy khách mới hơn


7

Đăng câu hỏi này cho một đồng nghiệp sau khi nghiên cứu khá nhiều. Anh ta muốn kết nối với một máy chủ Centos 4 cũ thông qua ssh -X(hoặc -Y) và chạy một số ứng dụng X ở đó. Nó đã từng chạy tốt trong nhiều năm, nhưng các bản cập nhật gần đây (trên cả Centos 7 và Ubuntu) cho các PC khách của anh giờ đã biến điều này thành không thể. Ứng dụng của anh ta bị treo và cố gắng chạy đơn giản glxgearsdẫn đến sự cố:

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  150 (GLX)
Minor opcode of failed request:  3 (X_GLXCreateContext)
Value in failed request:  0x0
Serial number of failed request:  19
Current serial number in output stream:  21

Đó thực sự là một vấn đề của phiên bản của khách hàng. Việc hoàn nguyên về Centos 6 trước đó ở phía máy khách sẽ khiến nó hoạt động trở lại. Không có gì trong nhật ký X11 ở phía máy chủ. Tôi chạy strace glxgearsmà không nhận thấy bất cứ điều gì khác thường. Tôi có thể cố gắng gì để chẩn đoán điều này hơn nữa?

EDIT: Trên bất kỳ Linux hiện đại nào, nỗ lực sau đây để buộc bối cảnh kết xuất gián tiếp sẽ thất bại:

glxinfo -i
name of display: :0
X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  154 (GLX)
Minor opcode of failed request:  24 (X_GLXCreateNewContext)
Value in failed request:  0x0
Serial number of failed request:  39
Current serial number in output stream:  40

Tôi đã thử cách sau để kích hoạt lại kết xuất gián tiếp. Trừ khi tôi nhầm, tất cả những điều đó phải được thực hiện trên máy khách:

  • trong phần Màn hình hoặc Thiết bị của /etc/X11/xorg.conf bạn thêm:

    Tùy chọn "Cho phép DirectirectXXrotrot" "Đúng"

  • trong / usr / bin / startx (hoặc bất cứ nơi nào startx được đặt):

    defaultserverargs = "+ iglx"

  • trong /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf bạn thay đổi dòng:

    xserver-lệnh = X -core + iglx

  • trước khi khởi chạy KDE, ví dụ: .kde / env / igl.sh

    xuất LIBGL_ALWAYS_INDIRECT = 1

Không ai trong số họ làm việc.


3
Tôi khá chắc chắn rằng vấn đề bắt nguồn từ các máy chủ X mới hơn vô hiệu hóa GLX gián tiếp theo mặc định. "glxinfo -i" thậm chí không thành công cục bộ và dường như không có cách giải quyết nào có hiệu quả.
dargaud

Bạn đang sử dụng trình quản lý máy tính để bàn nào? lightdm hay kdm? Bạn dường như đang sửa đổi cài đặt cho lightdm, nhưng chắc chắn bạn đang sử dụng lightdm chứ không phải trình quản lý máy tính để bàn mặc định cho KDE là kdm?
Lie Ryan

1
Đầu tiên, ứng dụng mà đồng nghiệp của bạn thực sự muốn chạy có cần GL không? Nếu không, thất bại của glxgears có vẻ như là một cá trích đỏ. Thứ hai, ba cách giải quyết đầu tiên của bạn sẽ cần có trên máy chạy máy chủ X (là máy tính để bàn / máy tính xách tay của bạn), nhưng cách thứ tư cần có trong môi trường của máy khách X được đề cập (đang chạy trên máy chủ từ xa) . Thuật ngữ X cảm thấy ngược, vì vậy hãy cẩn thận với nó hoặc tất cả chúng ta sẽ bị nhầm lẫn!
Jamey Sharp

1
Tôi đã lưu ý thuật ngữ phức tạp và nhận được 3 từ đầu tiên đúng, nhưng đã làm cái cuối cùng trên máy sai. Đối với glxgears là cá trích đỏ, điều đó hoàn toàn có thể xảy ra nhưng các thông báo lỗi là giống hệt nhau và vì chương trình anh ta cần chạy là một hộp đen thương mại không được hỗ trợ nữa, nên đây là cách tốt nhất của tôi để chạy thử nghiệm.
dargaud

1
Chúng tôi vừa thử nghiệm các phiên bản cũ của CentOS (6) và Ubuntu (14.10) với "glxinfo -i" và khi chúng hoạt động, phần mềm của anh ấy hoạt động. Vì vậy, anh ấy sẽ làm việc trong một VM với một hệ điều hành cũ kể từ bây giờ. Tôi xem xét trường hợp đã đóng, ngay cả khi độ phân giải không được tìm thấy trên các Linux gần đây.
dargaud

Câu trả lời:


4

Máy trạm Linux

Éo le thay, nhiều phiên bản của GDM không cung cấp một cách để vượt qua đối số như +iglxđể Xorg. Đáp lại, các phiên bản X.org mới có một IndirectGLXtùy chọn (xem thêm văn bản ví dụxorg.conf ).

Trong trường hợp không có tùy chọn đó, có một cách giải quyết là tự gói Xorgbằng một tập lệnh shell :

mv /usr/bin/Xorg /usr/bin/Xorg.original
echo -e '#!/usr/bin/env bash\nexec /usr/bin/Xorg.original "$@" +iglx' > /usr/bin/Xorg
chmod +x /usr/bin/Xorg
chcon --type=bin_t /usr/bin/Xorg

máy trạm macOS (XQuartz)

Chỉ cần chạy

defaults write org.macosforge.xquartz.X11 enable_iglx -bool true

và khởi động lại XQuartz nếu nó đang chạy. (Cảnh giác với lỗi chính tả: không có lỗi kiểm tra tên miền và tên biến.)

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.