2 minutes
Afficher sur Mac l’interface graphique d’une app executée dans Docker
Introduction
Depuis quelque temps je travaille sur l’apprentissage de robots dans ROS. Je fais tourner ROS sans un container Docker et accède à l’interface graphique via VNC (dans le browser avec noVNC). Ce n’est clairement pas une solution qui me contient. Le clavier est mal supporté, les performances sont mauvaises. Je cherche donc une solution de remplacement pour piloter à distance l’outil ROS. En faisant des recherches sur internet, je suis parvenu à afficher l’interface graphique d’une app exécutée dans un container Docker sur mon Mac. L’application est basique mais cette piste est à explorer. Voici comment afficher une app basique sur Mac.
Steps
Configurer Xquartz
Ouvrir Xquartz et rendez-vous dans les préférences.
open -a Xquartz
Dans l’onglet “Sécurité” cocher la case “Allow connections from network clients”.
Lancer socat
Si vous ne l’avez pas déjà, installer socat
via la commande brew install socat
puis dans un terminal exécuter la commande suivante:
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
Socat permet de manipuler des sockets réseau.
Lancer une app dans un container
export macbook_ip=IP_MACBOOK_SUR_LAN
docker run -it --rm -e DISPLAY=$macbook_ip:0 fr3nd/xeyes
Voici le Dockerfile de cette image:
FROM debian:jessie
RUN apt-get update && apt-get install -y \
x11-apps \
&& rm -rf /usr/share/doc/* && \
rm -rf /usr/share/info/* && \
rm -rf /tmp/* && \
rm -rf /var/tmp/*
RUN useradd -ms /bin/bash user
USER user
CMD xeyes
A priori, il n’y a donc pas grand chose à installer pour que cela fonctionne. A voir ce que cela va donner pour ROS desktop…
Résultat