본문 바로가기
협업툴,가상환경 정리/wsl2_명렁어-docker_GUI_with_x11

2_docker_GUI_in_wsl2(window docker)

by 알 수 없는 사용자 2022. 7. 11.

 

ROS를 wsl2내에서 docker container로 빌드 한 후,컨테이너 내부를 x11을 이용해 GUI 환경 구성하기

가장 기본 구조

추후에 2_ 3_ 4_ 쪽으로 가면 dockerfile 구성 및 ros 버전업, ros네이게이션 연동 까지 할 예정


조건

윈도우 : 11

wsl2 ( window 내에 설치,디폴트 ) // Windows 10 버전 2004 이상 버전 필요함

리눅스 : Ubuntu ( wsl2에서 설치 microoffice store) 

docker : docker desktop ( window 내에 설치 ) // wsl2 버전 필요함 wsl2랑 연동 되는거라

x11 버전 : VcXsrv ( window 내에 설치, 옵션 변경해줌)

ROS : kinetic ( wsl2에서 docker pull로 설치 )

 

기본적인 지식이 필요합니다.

docker ros x11 bashrc 리눅스

 

 

다운로드 버전 링크

참조링크

더보기

여기꺼 봄

https://marinerobotics.gtorg.gatech.edu/running-ros-with-gui-in-docker-using-windows-subsystem-for-linux-2-wsl2/

 

저기 사람은

https://jack-kawell.com/2019/09/11/setting-up-ros-in-windows-through-docker/

요기꺼 봄

 

나는 첫번째 링크 보고 구현 했음

두번째 링크가 좀더 자세함


셋업 설치 과정 시작

 

1. 윈도우 wsl2 리눅스 docker  까지 설치됫다 가정 하고 설명합니다.

 

 

2. https://sourceforge.net/projects/vcxsrv/

에서 x11 을 다운 받습니다.

To run VcXsrv, you will open the application, and click through a few settings. Most can stay at default, but ensure that:

  • Native opengl is left unchecked        
  • Disable access control is checked

 

<-- 깔고나서 XLaunch 파일 키면 밑에 세팅 할 수 있는ㄱ ㅓ뜸

위 내용 외에는 전부 default로 다운 받습니다. 보안사항( 사설 및 공용 네트워크 으로 함 )

사설

wsl1에서 x11 을 쓰려면 보안레벨을 낮춘다거나 하는 부분이 필요합니다. 그러나 docker desktop을 이용해 x11 을 쓰는 경우 방화벽 보안레벨을 낮추지 않고도 사용이 가능합니다. 본인 피셜로는 이부분이 가장 강점이라고 생각하는중... x11, docker desktop, wsl2(리눅스) 조합이 정말 좋음

심지어 이런 그림도 있음 ㄷㄷ MS ..ㄷㄷ

 

 

3. docker hub 로 ROS kinetic 이미지 다운  

docker pull osrf/ros:kinetic-desktop-full

 

 

4. 이미지 이용해서 docker container 구성 ( 중요 !!!!!!!!!!!!!! )

docker run -it --name ros-test -e DISPLAY=host.docker.internal:0.0 -e LIBGL_ALWAYS_INDIRECT=0 osrf/ros:kinetic-desktop-full bash

여기 나오는 내용 알아야함

-e 설명 : 컨테이너에 환경 변수를 설정합니다.  ( 이 밑에 부분은 그냥 퍼온거 )

windows 나 Mac 의 Host IP 를 가져오려면
host.docker.internal

Linux의 host ip 를 가져오려면 
localhost

원래 원문은
echo 'export DISPLAY={your_ip_address}:0.0' >> ~/.bashrc
이거임 자기 ip 주소 기입

이것은 응용 프로그램이 X 서버를 찾을 수 있도록 합니다. WSL용 vEthernet 네트워크 어댑터를 지정하는 IP에 연결해야 합니다. 내가 그 IP를 검색하는 데 필요한 모든 것이 host.docker.internal(물론 Docker를 사용할 때)이라는 것을 알아내는 데 얼마나 오랜 시간이 걸렸는지 당신은 믿을 수 없을 것입니다. WSL2에 대한 많은 자습서는 resolv.conf 파일에 의존하지만 Docker에서는 호스트 대신 컨테이너를 지정하는 특수 IP를 포함하므로 해당 파일은 WSL2의 일반 배포판에서만 작동합니다.

LIBGL_ALWAYS_INDIRECT=0

이것은 애플리케이션이 렌더링되는 방법을 지정합니다. 간접이 켜져 있는 경우 다음 단계에서 기본 OpenGL을 켜야 합니다. 불행히도 일부 ROS 응용 프로그램은 간접 렌더링과 함께 작동하지 않습니다. 즉, WSL을 통한 기본 가속이 없습니다.

위 내용 설명 ( 간단히 말하자면 DRM이  Indirectly하게 rendering 하게끔 해주는 리눅스 커널 하위 시스템인데 wsl에서는 지원을 하지 않는다. )

https://en.wikipedia.org/wiki/Direct_Rendering_Manager

 

Direct Rendering Manager - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Subsystem of the Linux kernel The Direct Rendering Manager (DRM) is a subsystem of the Linux kernel responsible for interfacing with GPUs of modern video cards. DRM exposes an API that

en.wikipedia.org

 

 

 

5. run 한 컨테이너 안에서 ROS 관련 설정 함

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

한다음 'roscore'를 실행해 줍니다.

 

 

6. 이제 wsl2에 있는 컨테이너에서 ROS 관련 GUI 화면이 windows에 뜨는 지 확인해 봅시당

docker exec -it ros-test bash

하고

rqt_console

이것도 해보고

gazebo worlds/pioneer2dx.world

or

gazebo

이것도 해보삼 ( 가제보는 시뮬레이션 기본 툴 )

 

 

 

 

 

 

 

 

댓글