前提・実現したいこと
vscodeのRemote-sshでJetsonをリモートで接続し、デバッグ環境が構築できたらと考えていますが、
まずは、ターミナルのSSHでプログラムを実行して、動画を再生できるようにしたい。
発生している問題・エラーメッセージ
SSHを使わずにJetson上のターミナルで直接実行した場合は、実行結果の動画(ポップアップ)をJetson上で再生できるのですが、
SSH越しで実行した場合「cannot open display」となり、実行できません。
以下がエラー文となります。
$ python3 trt_yolov3.py --file --filename test_movie.mp4 --model yolov3-416 [TensorRT] WARNING: Using an engine plan file across different models of devices is not recommended and is likely to affect performance or even cause errors. [TensorRT] INFO: Glob Size is 126503808 bytes. [TensorRT] INFO: Added linear block of size 22151168 [TensorRT] INFO: Added linear block of size 11075584 [TensorRT] INFO: Added linear block of size 5537792 [TensorRT] INFO: Added linear block of size 1384448 [TensorRT] INFO: Added linear block of size 692224 [TensorRT] INFO: Found Creator ResizeNearest [TensorRT] INFO: Found Creator ResizeNearest [TensorRT] INFO: Deserialize required 2001242 microseconds. (TrtYOLOv3Demo:16563): Gtk-WARNING **: 16:22:13.484: cannot open display: localhost:0.0 ------------------------------------------------------------------- PyCUDA ERROR: The context stack was not empty upon module cleanup. ------------------------------------------------------------------- A context was still active when the context stack was being cleaned up. At this point in our execution, CUDA may already have been deinitialized, so there is no way we can finish cleanly. The program will be aborted now. Use Context.pop() to avoid this problem. ------------------------------------------------------------------- 中止 (コアダンプ)
該当のソースコード
- Jetsonで実行しているコード:tensorrt_demos
試したこと
- SSHのYオプションをつけて接続しても実行できず。
bash
1ssh -Y <ユーザー名>@<IPアドレス>
実装環境
クライアント | サーバー | |
---|---|---|
ハードウェアー | Dell Precision 3520 (ノートPC) | Jetson AGX Xavier |
OS | Ubuntu 18.04 LTS | Jetson OS(ubuntu 18.04ベースのOS) |
sshd_config で、X11Forwarding 等の設定はしていますか?
JetsonのX11Forwardingを確認したところ、yesとなっていました。
この設定であっていると思います。
参考記事:X11 Forwarding設定 https://qiita.com/kou_bacchus/items/47c40beb147a3040fe5e
デバッグ環境のOSは?X11は動いていますか?(リモートで動画を再生するのは重そう…。)
OSはサーバー、クライアントともにLinuxになります。
本文に実装環境を追加しました。
私も動画は重いのかなと思っていますが、重くても動いてくれればと思っています。
X11については起動状態を確認する方法がわからないため、少し調べてみます。
了解です。ならきっとX11は動いてますね。次にJetsonにsshした時の環境変数DISPLAYの確認と、適当なXクライアント(xtermとかxclockなんて今時のOSにあるのかな?)の動作確認をしましょう。
サーバー(Jetson)にDISPLAYの設定がされてなかったので、下の記事を参考に設定したのですが変わらず。
https://shimi-dai.com/check-x11-forwarding/
他に記事ないかとDISPLAYに関する記事をあさっていたら、
ちょうどやりたいことに一致する記事が見つかり、動作させることができました。
https://symfoware.blog.fc2.com/blog-entry-2269.html
おそらく、下の2点が原因で動かなかったのかと思います。
- サーバーのForwardX11Trustedをyesにする。
- クライアントからSSH接続する際、Xオプションを追加する。
ssh -X <ユーザー名>@<IPアドレス>
解決したところに水を差すようで申し訳ないのですが、誤った情報は有害なので指摘させてもらいます。
> https://shimi-dai.com/check-x11-forwarding/
このページの内容は間違っているので、参考にしてはいけません。
ここに書かれている内容の通り設定した場合、Xの通信がSSHのX転送機能を通さずに直接ネットワークに流れます。
> https://symfoware.blog.fc2.com/blog-entry-2269.html
こちらも内容が怪しい、もしくは書き方が紛らわしいです。
> おそらく、下の2点が原因で動かなかったのかと思います。
> - サーバーのForwardX11Trustedをyesにする。
ForwardX11Trustedはクライアント側の設定です。サーバ側に設定しても何も効果はありません。
クライアント側に設定したのならば意味は有りますが、これの効果は「ssh -X の動作を ssh -Y と同じにする」という物です。
> - クライアントからSSH接続する際、Xオプションを追加する。
ーX はセキュリティ的に機能を制限したX転送を提供する物です。
それに対して -Y は制限の無いX転送を提供します。
-Xで動くアプリケーションならば-Yでも問題無く動きます。
なので、解決した理由は、
- 上記2点とは別の設定変更/対処の効果が有った
- -Yで動かないというのは確認ミス等による勘違いだった
のどちらかだと思います。
ご指摘ありがとうございます。
真剣に考えていただいたき、とても助かります。
今度はなぜYオプションで動かなかったのか、少しまた確認してみます。
一旦サーバー側の設定を戻して、クライアントからXとYオプションで接続したところ、
どちらでもプログラムを実行でき、動画を再生することができました。
原因不明となりますが、困りごとは解消しているため、この質問はクローズいたします。
回答1件
あなたの回答
tips
プレビュー