Trouble/Docker

Docker container 내에서 Open3D visualization 문제 : [Open3D WARNING] GLFW Error: X11: Failed to open display unix:1

침닦는수건 2023. 4. 18. 11:09
반응형

Docker container 내에서 open3d를 이용한 geometry visualization할 경우, 다음과 같은 오류가 뜰 수 있다.

No protocol specified
[Open3D WARNING] GLFW Error: X11: Failed to open display unix:1
[Open3D WARNING] Failed to initialize GLFW
[Open3D WARNING] [DrawGeometries] Failed creating OpenGL window.

 

OpenCV를 이용한 image visualization을 할 때 비슷한 에러가 날 경우, 다음 argument를 추가함으로써 간단히 해결했지만 Open3D는 몇가지가 더 있다. 

-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY

 

http://www.open3d.org/docs/release/docker.html

 

Docker — Open3D 0.17.0 documentation

Docker provides a convenient way to build, install and run applications isolated from the rest of your system. You do not need to change software versions on your system or install new software, except the Docker engine itself. First, install Docker follow

www.open3d.org

 

위 홈페이지에 친절하게 적혀있는 내용인데 요약하자면, Rendering을 사용하기 때문에 GPU에 대한 명시를 추가해야 한다.

 

1) 컨테이너 생성 전, local X11 connection을 허용할 것. 

xhost local:root

위와 같이 커맨드를 입력해주면 된다. 

non-network local connections being added to access control list

그러면 위와 같은 안내가 나온다. (무슨 뜻인지 나도 잘 모른다.)

 

2) GPU 정보를 추가할 것.

 

만약 Intel(Mesa DRiviers) GPU, 흔히 내장 그래픽 카드를 쓸 경우에는 다음과 같이 추가해야 한다.

--device=/dev/dri:/dev/dri 
--device=/dev/dri/card0:/dev/dri/card0 
--device=/dev/dri/renderD128:/dev/dri/renderD128

셋 중 하나를 고르면 되는데 이건 자세히 모르겠다면 각자 사용하는 PC에서 위 경로를 들어갔을 때 존재하는 것들을 보고 고르면 된다. 

 

만약 NVIDIA GPU를 쓸 경우에는 다음과 같이 추가해야 한다. (대부분 이 경우이지 않을까 싶다. 요즘은)

--gpus 'all,"capabilities=compute,utility,graphics"'

보통 all만 자주 써서 헷갈렸는데 '와 ''을 포함해서 다 적어주어야 한다.

 

마지막으로 만약 GPU가 전혀 없고 CPU만 쓸 경우에는 다음과 같이 추가해야 한다.

-env OPEN3D_CPU_RENDERING=true

Document에서 말하길, Ubuntu 18.04 이하에서만 입력하면 되고 이상 버전에서는 GPU가 없으면 자동으로 CPU를 선택하기 때문에 입력할 필요가 없다고 한다. 근데 그냥 다 적어주는게 좋은 것 같다.

 

주의할 점은 여전히 다음 argument는 추가해주어야 한다.

-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY

 

반응형