# Setup ROS 2 with VSCode and Docker on MAC ## Install XQuartz and socat 1. Install XQuartz from [website](https://www.xquartz.org) or using homebrew ```shell brew cask install xquartz ``` 2. Install socat ```shell brew cask install socat ``` 3. Run XQuartz 4. In the XQuartz preferences, go to the Security tab and make sure Allow connections from network clients is ticked. 5. Open XQuartz terminal and type the following: ```shell defaults write org.xquartz.X11 enable_iglx -bool YES ``` 6. Exit XQuartz ## Access docker container gui from OSX 1. Open MAC terminal and type the following: ```shell socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\" ``` 2. Run XQuartz 3. Open XQuartz terminal and type the following: ```shell xhost + ``` ## Open and Build Development Container 1. Install vscode and docker 2. Edit devcontainer.json ```json { "name": "osrf/ros:humble-desktop-full", "build": { "dockerfile": "Dockerfile" }, "runArgs": [ // "--cap-add=SYS_PTRACE", // Allows the container to trace processes using ptrace system call // "--security-opt=seccomp=unconfined", // Disables seccomp security profiles for the container // "--ipc=host", // Shares the host's IPC namespace with the container // "--network=host", // Shares the host's network namespace with the container // "--pid=host", // Shares the host's PID namespace with the container // "--privileged", // Gives the container full access to the host's devices and allows it to run with root privileges ], "workspaceMount": "source=${localWorkspaceFolder},target=/root/${localWorkspaceFolderBasename},type=bind", "workspaceFolder": "/root/${localWorkspaceFolderBasename}", "containerEnv": { "DISPLAY": "host.docker.internal:0" }, "mounts": [ //* Uncomment to allow the container to access the X server on the host e.g. to run Rviz and other GUI tools { "source": "/tmp/.X11-unix", "target": "/tmp/.X11-unix", "type": "bind" }, /* { "source": "${localEnv:XAUTHORITY:-$HOME/.Xuthority}", "target": "/root/.Xauthority", "type": "bind" }, /* Uncomment to persist bash history between sessions { "source": "${localEnv:HOME}${localEnv:USERPROFILE}/.bash_history", "target": "/root/.bash_history", "type": "bind" } */ ], "customizations": { "vscode": { "settings": {}, "extensions": [ "mhutchie.git-graph", // "eamodio.gitlens", // "donjayamanne.githistory", // "ms-python.vscode-pylance", // "ms-python.python" // "ms-vscode.cpptools", // "ms-vscode.cpptools-extension-pack" ] } } } ``` 3. Edit Dockerfile ```dockerfile FROM osrf/ros:humble-desktop-full SHELL [ "/bin/bash" , "-c" ] # Upgrade all packages RUN sudo apt update && sudo apt upgrade -y # Install essential packages RUN sudo apt install -y wget x11-apps python3-pip net-tools RUN pip3 install pygame # Create overlay workspace # WORKDIR /root/ros_ws/src # COPY packages.repos . # RUN vcs import < packages.repos; \ # cd ..; \ # rosdep install --from-paths src --ignore-src -r -y; \ # source /opt/ros/${ROS_DISTRO}/setup.bash; \ # colcon build; # Add sourcing ROS setup.bash to .bashrc RUN echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> ~/.bashrc RUN echo "export LIBGL_ALWAYS_INDIRECT=1" >> ~/.bashrc ```