Search
🔵

bb8_2. [info] title: MacOS Docker, OpenGL, X Window troubleshooting

생성
🚀 prev note
🚀 next note
♻️ next note
14 more properties
ORB-SLAM2. Docker env, host: Macbook Pro M1 2021
ORB-SLAM2. Docker env, host: Macbook Pro M1 2021
Profile ORB-SLAM2 with easy profiler. Docker env, host: Macbook Pro M1 2021
하고 싶은 것
디버깅 방법
문제 원인
도커 이미지에 X 시스템 설치
xclock, xeyes 실행
apt install \ x11-utils \ x11-apps
X11 포워딩
xclock, xeyes 실행
 xhost 권한 비활성화  도커 컨테이너 실행 옵션 문제
도커 이미지에 OpenGL 관련 패키지 설치
apt install \ libgl1-mesa-glx \ mesa-utils
OpenGL에 의존하는 GUI 앱 실행
glxgears 실행
 xhost 권한 비활성화  X 서버 OpenGL 시각화 활성화
GPU 등 가속기를 사용하는 GUI 앱 실행
 하드웨어 가속 문제
apt 패키지 설치(ref3)
Dockerfile 에 알아서 잘 넣자.
 xhost 권한 비활성화 문제
X 서버 실행 중
X 서버 종료
xhost 명령어를 이용해 권한 부여
xhost +
Bash
복사
재부팅은 물론 X 서버를 재실행할 때마다 반드시 실행해 주어야 함
권한을 조금 더 작게 부여하고 싶다면 명시적으로 지정할 것
HOSTNAME=example xhost + ${HOSTNAME}
Bash
복사
 의 방법1 을 사용하는 경우
xhost + localhost
Bash
복사
 의 방법2, 방법3을 사용하는 경우
 도커 컨테이너 실행 옵션 문제(ref2)
docker-compose에 대응되는 docker run 명령어를 실행해도 된다.
방법1
privileged: true environment: - DISPLAY=${HOSTNAME}:0 volumes: - /tmp/.X11-unix:/tmp/.X11-unix
YAML
복사
docker-compose.yaml
방법2
privileged: true environment: - DISPLAY=host.docker.internal:0 volumes: - /tmp/.X11-unix:/tmp/.X11-unix
YAML
복사
docker-compose.yaml
방법3
privileged: true environment: - DISPLAY=docker.for.mac.host.internal:0 volumes: - /tmp/.X11-unix:/tmp/.X11-unix
YAML
복사
docker-compose.yaml / 위 명령은 MacOS에 의존적이다.
 호스트 X 서버 OpenGL 시각화 활성화
defaults write org.xquartz.X11 enable_iglx -bool true
Bash
복사
M1 MacOS에 의존적이다. 다른 운영체제는 이에 대응하는 다른 옵션을 찾아보아야 한다(ref1).
옵션이 잘 적용되었는지 확인하려면 호스트 컴퓨터에서 glxgears 실행
호스트 컴퓨터에서 잘 실행된다면 클라이언트 애플리케이션이 실행되는 컴퓨터에서 glxgears 실행
 하드웨어 가속 문제
예를 들어, 호스트 컴퓨터에는 CPU만 있지만, 원격 컴퓨터에 NVIDIA 그래픽카드가 붙어 있는 경우. X 클라이언트의 환경에는 GPU가 있는 경우, 화면 출력을 위해 QT 기반의 클라이언트가 하드웨어 가속을 사용하는 경우가 있다. 예를 들어 ROS의 rviz(QT 기반의 클라이언트)를 실행하는 하드웨어가 NVIDIA GPU가 부착된 하드웨어일 경우가 이에 해당한다. QT_X11_NO_MITSHM은 QT 기반의 클라이언트가 하드웨어 가속을 사용하여 그래픽을 처리하지 않도록 설정하는 옵션이다.
environment: - QT_X11_NO_MITSHM=1
YAML
복사
QT 클라이언트에 의존적이다. 다른 X11 클라이언트의 경우 이에 대응하는 다른 옵션을 찾아보아야 한다.
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료을 보관해 두는 영역입니다.
from : 과거의 어떤 원자적 생각이 이 생각을 만들었는지 연결하고 설명합니다.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는지 연결합니다.
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는지 연결합니다.
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되거나 이어지는지를 작성하는 영역입니다.
1.
None
ref : 생각에 참고한 자료입니다.