JETSON NANOでSSH接続+DOCKER+DISPLAY

はじめに

モニターにつながったJetson nanoを目の前に置いているけれども、WindowsからSSHでJetson nanoに繋いでDOCKERを動かして、pythonで作ったプログラムをJetson nanoの画面に表示したかったのですが、うまく表示できずにはまったので解決策のメモです。

環境

  • Jetson nano
    • docker
    • jetson-interface
  • Windows
    • RLogin(SSHクライアント)

試したこと

通常のSSH接続と同じように以下のように実行

export DISPLAY=:0
~/jetson-interface/docker/run.sh

そうすると以下のエラー(※太字部分)が出てうまくいかなかった。

reading L4T version from /etc/nv_tegra_release
L4T BSP Version:  L4T R32.7.1
size of data/networks:  644857380 bytes
CONTAINER:     dustynv/jetson-inference:r32.7.1
DATA_VOLUME:   --volume /home/ubuntu/jetson/jetson-inference/data:/jetson-inference/data --volume /home/ubuntu/jetson/jetson-inference/python/training/classification/data:/jetson-inference/python/training/classification/data --volume /home/ubuntu/jetson/jetson-inference/python/training/classification/models:/jetson-inference/python/training/classification/models --volume /home/ubuntu/jetson/jetson-inference/python/training/detection/ssd/data:/jetson-inference/python/training/detection/ssd/data --volume /home/ubuntu/jetson/jetson-inference/python/training/detection/ssd/models:/jetson-inference/python/training/detection/ssd/models
USER_VOLUME:   
USER_COMMAND:  
V4L2_DEVICES:    --device /dev/video0 
No protocol specified
xhost:  unable to open display ":0"

解決策

以下の手順で実行すれば問題なくdockerの中からGUIを利用するプログラムを実行できるようになった。

export DISPLAY=:0
xhost +
~/jetson-interface/docker/run.sh

試したコード

root@sjet:/jetson-inference# python
Python 3.6.9 (default, Dec  8 2021, 21:08:43) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> img = cv2.imread('data/images/bird_0.jpg')
>>> cv2.imshow('display test', img)
>>> cv2.waitKey(0)

以下のように鳥の画像がJetson nanoにつながったモニターから出力された。

pythonプログラムの画像が表示されたところ。

これで、Jetson nanoを好きなところからコントロールができる!!!

おまけ

jetson-interfaceのスクリプトを使わず、JetPackのdockerイメージを呼び出す際にGUIを利用する手順は以下の通り。

export DISPLAY=:0
xhost +

CONTAINER_IMAGE=nvcr.io/nvidia/l4t-ml:r32.7.1-py3
sudo docker pull $CONTAINER_IMAGE
sudo docker run --runtime nvidia -it --rm --network host -e DISPLAY=$DISPLAY \
    -v /tmp/.X11-unix/:/tmp/.X11-unix \
    $CONTAINER_IMAGE

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください