SSH -Y를 통해 연결된 원격 서버에서 실행 파일을 실행하려고 합니다. 실행 파일이 OpenGL을 사용하는 것 같습니다.
서버는 Ubuntu를 실행하고 로컬 시스템은 OSX를 실행합니다.
ssh -Y는 일반적으로 X11을 통해 내 로컬 컴퓨터의 디스플레이를 엽니다. 이는 다른 응용프로그램(firefox, matlab 등)에서도 잘 작동합니다.
이번에는 다음과 같은 메시지를 받았습니다.
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 35
Current serial number in output stream: 34
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 34
Current serial number in output stream: 35
나는 또한 glxinfo를 실행했고(포럼에서 찾은 것을 시도하고 있었습니다) 이것을 얻었습니다.
name of display: localhost:11.0
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 23
Current serial number in output stream: 22
이 문제를 해결하는 데 도움을 줄 수 있는 사람이 있나요?
감사합니다!
답변1
2021년 5월 5일에 수정됨: XQuartz 2.8.0이 출시되면서 구성 경로가 org.macosforge.xquartz.X11
에서 변경된 것으로 보입니다 org.xquartz.X11
. 동일한 지침이 여전히 적용됩니다. 미래에서 온 경우 기존 경로를 새 경로로 바꾸십시오.
여기에 있는 답변은 수정되었지만, 직장에서 격년으로 이 질문이 나올 때 향후 참조로 사용할 수 있는 또 다른 답변을 제출합니다. :)
이는 X가 (SSH, Docker 등을 통해) 전달될 때 자주 발생합니다. 많은 X11 서버(예: XQuarts 또는 Ubuntu의 표준 X11 서버)에서 기본적으로 비활성화되어 있는 OpenGL 그리기(iglx)를 허용해야 합니다. 이와 관련하여 볼 수 있는 다른 로그는 다음과 같습니다.
XRequest.155: GLXBadContext 0x500003a
XRequest.155: BadValue (integer parameter out of range for operation) 0x0
XRequest.155: GLXBadContext 0x500003b
[xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
../../src/xcb_io.c:259: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.
수정 사항은 iglx를 활성화하는 것입니다. 먼저, 사용 중인 XQuarts 버전이 이 기능을 지원하는지 확인하세요. 이 글을 쓰는 시점의 최신 버전은 이것이지만 더 이상 사용되지 않으므로 앞으로는 그렇지 않을 수도 있습니다. 내 버전은 입니다 XQuartz 2.7.11 (xorg-server 1.18.4)
.
다음으로 실행 defaults write org.macosforge.xquartz.X11 enable_iglx -bool true
하여 설정되었는지 확인할 수 있습니다.
$ defaults read org.macosforge.xquartz.X11
{
"app_to_run" = "/opt/X11/bin/xterm";
"cache_fonts" = 1;
"done_xinit_check" = 1;
"enable_iglx" = 1; ####### this should be truthy
"login_shell" = "/bin/sh";
"no_auth" = 0;
"nolisten_tcp" = 0;
"startx_script" = "/opt/X11/bin/startx -- /opt/X11/bin/Xquartz";
}
마지막으로 xquartz(또는 전체 머신)를 다시 시작하세요. 보안 및 인증을 비활성화한 상태에서 다시 실행해야 할 수도 있습니다 xhost +
(격리된 컴퓨터에는 좋지만 인터넷에 노출된 컴퓨터에는 위험함). 이제 예상대로 GUI 애플리케이션을 실행할 수 있습니다. 도움이 되었기를 바랍니다!
답변2
모든 분들의 의견과 제안을 토대로 다음과 같은 방법으로 이루어질 수 있다고 생각합니다. 달리기:
quartz-wm --help
이것은 다음과 같이 출력됩니다
usage: quartz-wm OPTIONS
Aqua window manager for X11.
--version Print the version string
--prefs-domain <domain> Change the domain used for reading preferences
(default: org.xquartz.X11)
마지막 줄에는 defaults
도메인이 표시됩니다. 이 경우 다음을 사용하여 확인할 수 있습니다.
defaults read org.xquartz.X11
그리고 바꿔봐
defaults write org.xquartz.X11 enable_iglx -bool true
지금 Zquartz를 다시 시작하는 경우(종료하거나 로그아웃한 후 다시 로그인하거나 다시 시작하여) 나에게는 Xquartz xterm 세션에서 ssh 세션을 시작해야 했습니다. 이것은 나에게 다음을 제공합니다:
nicola@raspy3:~ $ glxinfo
name of display: localhost:10.0
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
display: localhost:10 screen: 0
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_OML_swap_method, GLX_SGIS_multisample,
GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group,
GLX_SGI_make_current_read
따라서 swast 메시지는 여전히 존재하지만 이제 GL이 작동하고 있습니다.
PS: 한 줄의 코드로 필요한 구성을 작성합니다.
defaults write `quartz-wm --help | awk '/default:.*X11/ { gsub(/\)/, "", $2); print $2}'` enable_iglx -bool true
답변3
Mac OS Mojave에서 기본값을 사용하여 터미널 응용 프로그램에 쓴 org.macports.X11 enable_iglx -bool true
다음 동일한 터미널에서 Xquartz +extension GLX`를 실행했습니다.
그런 다음 glxgears를 실행하고 래스터 작업을 수행할 수 있지만 디스플레이는 기본/Retina 디스플레이 대신 외부 모니터의 왼쪽 상단 모서리에 배치되고 크기 조정/이동을 위한 프레임은 그려지지 않습니다.
이는 Nvidia 그래픽 카드에 대한 형편없는 드라이버 지원과 1990년대 Linux 데스크탑을 실행하려고 했던 것을 생각나게 합니다. :)
freedesktop.org 버그 저장소를 확인한 결과 Xquartz/X11이 아직 Retina 디스플레이를 지원하지 않는 것 같습니다. 몇 가지 트릭이 있지만 몇 년 전 내 Mac의 XQuartz에서 Wireshark를 실행하는 것이 얼마나 투박했는지 생각나게 합니다. 저는 X11 전달이 제대로 작동하고 프레임을 다시 그리는 데 약 3~5분 정도 걸리지 않기를 원합니다. 바라보다https://gitlab.freedesktop.org/xorg/xserver/-/issues/187