【目的】
Jetson NanoでHeadlessセットアップを行います。
【内容】
エッジ系デバイスはモノが小さい分、マウスやキーボード、更にはディスプレイなどの付属品をつけるとケーブル類が邪魔で困ります。
ラズパイを触っているときには公式イメージでHeadlessセットアップが行えましたが果たしてJetson Nanoでは可能なのでしょうか?
調べてみたところNVIDIAが公開している「JetCard」を使えば、簡単にHeadlessセットアップが行えることがわかりました。
今回はこれを使ってチャレンジします。
##【前提条件】
本手順では以下のHWが必要になります。
- SDカード (32GB以上)
- DC電源 (5V 4A)
- PC (SDイメージを書いたり、ssh接続するため)
- Wifiアダプタ (オプション)
- VNC設定
DC電源はHeadlessセットアップには必須ではありませんが、本手順においては必須です。
無いと結構面倒だと思います。
【作業手順】
基本的には以下のリポジトリの内容を踏襲します。
【JetCard - GitHub】
本記事では以下の手順を行います。
- OSイメージとSDカードの準備
- Jetson Nanoの起動
- USB Device Modeの利用
- sshで接続
- Wifi設定
- システムアップデート
- その他
- Jupyter Lab
- VNC設定
【OSイメージとSDカードの準備】
まずはOSイメージであるJetCardをダウンロードします。
JetCardのリポジトリから最新バージョンをダウンロードしてください。
本記事を書いて時点では以下のURLからダウンロードしました。
【ダウンロード JetCard image(GoogleDrive)】
ダウンロードしたイメージファイルをSDカードに書き込んでください。
ここではSDカードへの書き込み手順は書きませんが、公式手順では Etcher などを使ってFlushしろと書かれています。
【Jetson Nanoの起動】
SDカードの準備が出来たらPCからSDカードをアンマウントして、Jetson Nanoに挿入してください。
そして電源を入れてJetson Nanoを起動してください。
この時一点注意があります。
Jetson Nanoには電源供給ポートが2つあります。
1つはMicroUSBポートによるUSBからの給電。 (下記画像の③)
もう一つはACアダプタを利用したDCジャックからの給電です。 (下記画像の⑧)
本手順では⑧のDCジャックからの給電を想定した手順になっています。
なお、DCジャックから給電するためにはDCジャック後方にある「J48」と書かれているジャンパーをシャントする必要があります。
【USB Device Modeの利用】
DCジャックから給電してJetson Nanoを起動した場合、「USB Device Mode」というものを利用できるようになります。
具体的には給電に使っていないMicroUSBポートにデータ通信可能なUSBケーブルを接続したJetson Nanoを、パソコンのUSBに接続することで利用可能になります。
Jetson Nanoをパソコンに接続すると、ネットワークアダプタとReadMeが含まれたディスクがパソコンにマウントされます。
なお、USB Device ModeはGithubのissuesなどを見る限りJetCardを利用時のみ有効なようで、公式OSイメージでは機能しないようです。
【sshで接続】
JetCardではデフォルトでsshサービスが起動しています。
USB Device Modeを利用している場合は、 192.168.55.1
に対してsshで接続可能です。
ログイン時のユーザおよびパスワードは jetson
になります。
ssh jetson@192.168.55.1
Windows7など、標準でsshクライアントが利用できない場合はTeraTermなどを利用してください。
なお、USB Device Modeを利用していない場合は、有線LANに接続した上で何らかの方法でJetson NanoのIPを知る必要がありますが、ここでは割愛します。
【Wifi設定】
sshで接続できたらWifiの設定を行います。
有線LANで運用する場合は、この項目は読み飛ばして構いません。
まずは、WifiドングルをUSBポートに挿してください。
lsusb
コマンドや iwconfig
でWifiドングルを認識していることが確認できたら、下記コマンドでSSIDを探しましょう。
sudo nmcli device wifi rescan
sudo nmcli device wifi list
IN-USE SSID MODE CHAN RATE SIGNAL BARS SECURITY
SSID1 Infra 1 130 Mbit/s 92 ???? WPA2
SSID2 Infra 1 130 Mbit/s 92 ???? WPA2
SSID3 Infra 11 130 Mbit/s 92 ???? WPA2
SSID4 Infra 11 130 Mbit/s 89 ???? WPA2
-- Infra 13 130 Mbit/s 75 ???_ WPA2
SSID5 Infra 13 130 Mbit/s 75 ???_ WPA2 802.1X
......
<後略>
接続したいSSIDが見つかったら、下記コマンドでWifiに接続します。
<ssid>
や <password>
実際に接続する環境に合わせて変更してください。
sudo nmcli device wifi connect <ssid> password <password>
Device 'wlan0' successfully activated with 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx'.
上記のような出力が表示されたらWifiへの接続完了しています。
ip a
コマンドで割り当てられたIPアドレスが確認できればJetson NanoをUSBポートから外してしまっても良いかと思います。
【システムアップデート】
ここまで出来たらネットワークの接続が完了しています。
下記コマンドを実行してシステムアップデートを行います。
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove
# 再起動
sudo reboot
概ね設定が完了したのでディスクの空き容量を確認してみましょう。
df -h
/dev/root 30G 18G 11G 64% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 2.0G 4.0K 2.0G 1% /dev/shm
tmpfs 2.0G 19M 2.0G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 397M 116K 397M 1% /run/user/1000
すでに32GBのSDカードを60%以上使ってるとか…
【その他】
Jupyter Lab
JetCardは起動した時点でJupyter Labが動くようになっています。
USB Device Modeの場合は http://192.168.55.1:8888
にアクセスするとJupyter Labが起動します。
なお、接続時のパスワードは jetson
です。
VNC設定
どうしてもGUI環境が必要な方はVNCを設定しましょう。
USB Device Mode時にPCにマウントされる「L4T-README」内に「README-vnc.txt」というファイルがあるので、その手順を踏襲してみます。
まずはvinoをインストールします。
sudo apt update
sudo apt install vino
コマンドを実行しましたが、vino自体はインストール済みでしたのでこの操作自体は不要でした。
次にvinoを有効化します。
gsettings set org.gnome.Vino enabled true
No such key “enabled”
何やらエラーが出てしまいました。
vinoを有効化する方法が変わったようです。
調べたところ、いくつか方法がありましたが最終的には以下のフォーラムの情報を参考にしました。
NVIDIA Developer Forums - Setting up VNC server
mkdir ~/.config/autostart/
vi ~/.config/autostart/vino-server.desktop
[Desktop Entry]
Type=Application
Name=Vino VNC server
Exec=/usr/lib/vino/vino-server
NoDisplay=true
最後にREADME-vnc.txtの情報をもとに、vinoの設定を変更しました。
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false
# 再起動
sudo reboot
再起動後にVNCの接続が可能になりますので、PCからVNCクライアントで接続します。
USB Device Modeの場合は 192.168.55.1:5900
で接続できます。
上記設定でvinoの暗号化を無効化しているため、接続時には以下の警告が表示されます。
警告画面を無視して「Connect」を実行すると、VNCの接続が完了します。
なお、解像度を変えたかったのですが、ディスプレイ非接続状態ではGUIの設定ツールは異常終了して落ちてしまうので設定できませんでした。
CLIや設定ファイルでの設定方法がわからなかったので、御存知の方がいましたら教えて下さい。
【最後に】
JetCard + USB Device Mode を使うことで、ほとんど何もせずにsshとJupyter Labが使えるようになって非常に便利です。
あとは好きにカスタマイズしていけば良いです。
ちなみにJetCardはデフォルトではUS環境で動いていますので、必要に応じてタイムゾーンを替えたりUIの言語を替えたりしてください。