--- tags: Jetson Nano, Basic, NVIDIA, 基礎, 教學, 環境安裝, 設定, Mac, 勇哥, Yungger Refs: - http://baijiahao.baidu.com/s?id=1646393833889121079&wfr=spider&for=pc - https://zh-hant.hotbak.net/key/%E7%8E%A9%E8%BD%89JetsonNano%E4%B8%80%E9%96%8B%E6%A9%9F%E6%BA%96%E5%82%99%E8%88%87%E9%81%A0%E7%A8%8B.html - https://blog.csdn.net/bbc2005/article/details/80034065 - https://blog.csdn.net/bbc2005/article/details/80034065 - https://blog.csdn.net/qianbin3200896/article/details/103760640?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control - https://medium.com/@yanweiliu/nvidia-jetson-nano%E5%AD%B8%E7%BF%92%E7%AD%86%E8%A8%98-%E4%B8%80-%E5%88%9D%E6%AC%A1%E4%BD%BF%E7%94%A8-4dce57a0b2b1 - https://www.digikey.com/en/maker/projects/getting-started-with-the-nvidia-jetson-nano-part-1-setup/2f497bb88c6f4688b9774a81b80b8ec2 - https://www.rs-online.com/designspark/jetson-nano-1-cn --- # Jetson Nano - 遠端連線 ![](https://i.imgur.com/pOw9r7A.png) ![](https://i.imgur.com/bUAI5Ji.png) [TOC] --- IP 與 MAC address -- 首先, 須先知道 Jetson Nano 的網卡 IP 與 MAC address, 後續的網路連線服務 (例如 Telnet, SFTP, VNC, ...) 都會用到 (例如我的 Jetson Nano 是 IP 為 192.168.31.222 與 MAC address 為 ...:0C:D0:40) :::success 提供服務的主機, 通常建議不使用動態配發 IP, 而是在內網的 DHCP Server (例如 WiFi AP 上) 上直接指定一個固定 IP 與主機的網卡 MAC address (例如 192.168.0.222 => 1c:xx.xx.xx.xx:94) 綁定, 如此, 用戶才不需要每次都需要在連線前, 特別花功夫去確認目前主機的 IP 是哪一個? ::: 查詢的最簡單常見的方式有兩種: - 終端機指令 `$ ifconfig` ![](https://i.imgur.com/SoDlFDU.jpg) - IP Scanner 類的軟體來掃描區域網路 ![](https://i.imgur.com/rPo1brF.jpg) --- 終端機連線: SSH (Secure Shell) --- 要如何從遠端登入 Jetson Nano 呢?最簡單普遍使用的方式就是在遠端主機上先架好並啟動 SSH Server, 然後用戶電腦再透過 SSH Client 軟體來連上遠端主機。 :::success 使用遠端連線的主要好處: - 不使用螢幕, 可少掉畫面顯示運算上吃掉 GPU 資源。 - 避免因外接設備而產生電流供應上的不足, 所造成系統不穩或當機的風險。 - 不需要多餘的實體設備與有線連線, 減少所佔空間, 與多工開發上的方便。 ::: :::info ### OpenSSH Server Ubuntu 系统預設只安裝了 openssh-client,但若要由用戶透過 SFTP Client 軟體上傳資料到 Jetson Nano 的 SFTP Server 主機上, 就還需要安裝並啟動 openssh-server。 ::: - 檢查 Jetson Nano 主機上是否已安装 sftp `$ dpkg --get-selections | grep ssh` ![](https://i.imgur.com/2auTzT8.jpg) :::success Jetson Nano 預設是已安裝並啟動了 SSH Server. 所以, 只要透過慣用的 SSH Client (例如 [PuTTY](https://www.putty.org/) 或 [MobaXterm](https://mobaxterm.mobatek.net/download.html)), 就可以輕易從遠端筆電/桌機連上 Jetson Nano。 ::: - 上圖顯示均已安裝, 無須再安裝, 只需啟動它, 但若是沒有則自行安裝即可 - 安裝 openssh-server `$ sudo apt update -y` `$ sudo apt-get upgrade -y` `$ sudo apt-get install openssh-server` - 安裝完後會自動啟動, 可以查詢目前狀態 `$ sudo systemctl status ssh` - 先檢查 SSH 服務是否已啟動 `$ sudo ps -e | grep ssh` 若尚未啟動 `$ sudo service ssh start` - 修改設定檔 `$ sudo nano /etc/ssh/sshd_config` 將 PermitRootLogin without-password 或 prohibit-password 加上註解符號, 再加上一行 PermitRootLogin yes - 安裝 chrony 来保持時間同步 `$ sudo apt-get install chrony` :::danger #### Ubutun 的防火牆 UFW 若是啟用時, 記得要開放 SSH 埠 `$ sudo ufw allow ssh` ::: :::info ### SSH Clients ::: - 在用戶端, 開啟 SSH client 軟體 Windows: PuTTY 或 [MobaXterm](https://mobaxterm.mobatek.net/) MacOS: [Termius](https://termius.com/mac-os) - 輸入遠端主機 Jetson Nano 的登入用戶帳密 ![](https://i.imgur.com/l8y6LHq.jpg) - 連上 Jetson Nano 主機的終端機畫面如下 ![](https://i.imgur.com/RGKkIYC.jpg) :::danger 若使用 SSH Client 軟體無法連線到 Jeston Nano 時, 先確認登入的帳密是否有誤 (尤其是大小寫 or 語系的切換錯誤) 或再輸入以下指令試試 `$ sudo ssh-keygen -A` `$ /etc/init.d/ssh restart` ::: #### 雖然透過 SSH 連上 Jetson Nano 是最簡單與快速的方式, 但卻限制於文字的終端機方式. 因此, 若需要的是圖形化桌面視窗的操作方式, 就可能需要使用 VNC 或 RDP 的遠端共享桌面的方式來連線。 --- 桌面分享連線:VNC --- :::info ### VINO (VNC Server) VINO 是 Jetson Nano 所預設內建的 VNC Server, 但使用上卻有幾項缺點必須先克服。 - 官方版映像檔與 Gnome 桌面有不相容的情況,必須要先修正後才能使用。 - 必須在本機上的系統設定, 設定桌面分享, 以及將 VINO 加入初始啟動程式中。 - 最大的缺點就是登出或重新開機後, 又必須到 Jetson Nano 本機上登入, VINO VNC Server 被啟動後, 才能再允許由遠端連線桌面。 ::: :::warning ### 移除與重新安裝 VINO VNC Server ::: - 先移除 VINO `$ sudo apt remove vino` - 重新安裝 VINO `$ sudo apt-get install vino` ![](https://i.imgur.com/hl1nm0D.jpg) - 設定 VINO 登入選項 (VNC 密碼假設為 x123456789x) `$ export DISPLAY=:0` `$ gsettings set org.gnome.Vino prompt-enabled false` `$ gsettings set org.gnome.Vino require-encryption false` `$ gsettings set org.gnome.Vino authentication-methods "['vnc']"` `$ gsettings set org.gnome.Vino lock-screen-on-disconnect false` `$ gsettings set org.gnome.Vino vnc-password $(echo -n "x123456789x"|base64)` => 若登入VNC需先經認證, 可修改此處密碼 `$ sudo reboot` :::danger - 需要注意的是,不要用 sudo 来執行上面的指令,否則修改的不是當前的配置。 - 若出現錯誤訊息: failed to commit changes to dconf: 沒有 X11 $ DISPLAY 不能自動執行 D-Bus, 則需要先在終端機內輸入以下指令 `$ export DISPLAY=:0` `$ gsettings set org.gnome.login-screen disable-user-list true` 重新啟動 `$ sudo reboot` 再重新執行之前發生錯誤的指令, 應該就沒有錯誤發生了 ![](https://i.imgur.com/J6xOuY2.jpg) ::: - 修正共享桌面的錯誤, 編輯「 org.gnome.Vino.gschema.xml 」補上缺少的 enable 選項 `$ sudo nano /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml` - 在檔案的最下方的</schema>之前, 補上以下內容至 xml檔中 ```xml= <key name='enabled' type='b'> <summary>Enable remote access to the desktop</summary> <description> If true, allows remote access to the desktop via the RFB protocol. Users on remote machines may then connect to the desktop using a VNC viewer. </description> <default>false</default> </key> ``` :::danger :star: :star: [常用的 Nano 編輯器指令](https://www.itread01.com/content/1548258701.html) ::: - 確認無誤, 存檔後離開 (Ctrl+O => Enter => Ctrl+X) ![](https://i.imgur.com/pGpxFxz.jpg) - 接著再重新編譯 Gnome schemas `$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas` - 開啟 VNC Server `$ /usr/lib/vino/vino-server` - 執行過程若不再出現錯誤訊息, 表 VINO 一切均已正常安裝與設定完畢 :::info ### VNC Viewer (VNC Client) ::: #### 遠端用戶可使用 [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) 來連到 Jetson Nano 的 VNC Server, 控制其桌面 ![](https://i.imgur.com/b4R6L5J.jpg) - 若有設登入前的認證密碼時, 需先輸入 ![](https://i.imgur.com/RJjdeQU.jpg) - 遠端連上 Jetson Nano 的桌面畫面 ![](https://i.imgur.com/msqOVQr.jpg) - 若想確認系統是否已有正確啟動 VNC Server,可先安裝 nmap,再用這個工具來檢查。 `$ sudo apt-get install nmap` `$ nmap 主機名稱或IP` - 若正常的話,應會看到下面資訊 5900/tcp open vnc - 若無, 表示尚未啟動 ![](https://i.imgur.com/AGAlZMY.jpg) #### 到此為止, 遠端透過 VNC 來連上 Jetson Nano 的桌面似乎以沒問題。但實際作業卻又會碰到一個新的問題, 因為當您登出 or 重新開機後, VNC Server 因沒有自動啟動, 所以, 下一次又變成無法由遠端連線, 除非先在本機登入才會啟動 VNC Server, 然後才能透過 VNC Client 進行遠端桌面的連線。 :::warning ### <font color=red>設定 VINO VNC Server 登入後自動啟動</font> ::: - 系统設定 VINO 自動啟用 `$ gsettings set org.gnome.Vino enabled true` - 編輯 vino-server.desktop `$ mkdir -p ~/.config/autostart` `$ sudo nano ~/.config/autostart/vino-server.desktop` - 填入以下內容 ``` [Desktop Entry] Type=Application Name=Vino VNC server Exec=/usr/lib/vino/vino-server NoDisplay=true ``` - Ctrl+O 存檔 => Enter 確認 => Ctrl+X 離開 :::warning ### <font color=red>設定 Jetson Nano 開機後自動登入</font> ::: 雖然, 我們將系統設為登入後自動啟動, 如此可以省下一些啟動 VNC Server 的指令作業, 但卻必須 "登入後才會被啟動"。因此, 若要一開機就自動能由遠端 VNC Client 連上 Jetson Nano, 建議直接設定使用者為自動登入到桌面。 #### 作業方式: 登入 => 系統設置=> 使用者 => 解除鎖定 => 輸入密碼 => 勾選 自動登入 => x 離開 ![](https://i.imgur.com/5ecqTlo.jpg) --- :::danger ### 若出現了 Unable to init server: 無法連接: 連線被拒絕 表示須先在 [系統設定值] 中, 啟動 [桌面分享] - 勾選「允許其它使用者觀看及控制你的桌面」 - 點選桌面左上角 [綠色 ubuntu 圖示]按右鍵, 選擇[應用程式], 搜尋[初始啟動程式] - 在偏好設定畫面按「加入」, 開啟新增始動程式 - 名稱:Vino - 指令:/usr/lib/vino/vino-server - 註解:VNC Server - 存檔完成設定 ![](https://i.imgur.com/L4cz8oc.jpg) ![](https://i.imgur.com/gPAVRKH.jpg) ::: --- 桌面分享連線:RDP --- :::info ### 另一種遠端桌面分享連線: RDP (Remote Desktop Protocol) ::: 雖然 Jetson Nano 已內建 VINO VNC Server, 但卻因官方版映像檔與舊的 Gnome 桌面不相容,必須經過上述複雜的程序重新設定後才能使用。所以, 另一個方式是改為 <Font color=green>透過 RDP 來連線會更方便簡單些</font>。 - Server 端安裝 $ sudo apt update $ sudo apt install -y xrdp $ sudo reboot - Client 端連線 <Font color=red>直接使用 Microsoft Remote Desktop 軟體連線</Font> ![](https://i.imgur.com/cSsdecs.jpg) :::danger #### 問題排除: 若剛一連線, 好像已登入但卻畫面立即閃退, 則必須在 Jetson Nano 的 RDP Server 上還須進一步安裝 xfce4 與一些設定 ::: - 安裝 xfce4 $ sudo apt-get install xfce4 - 設定 xfce4 $ echo xfce4-session > ~/.xsession $ touch .session $ sudo nano /etc/xrdp/startwm.sh 在 ./etc/X11/Xsession 的上面加一行 xfce4-session ![](https://i.imgur.com/HdL9O0Z.png) - 重新啟動後, 再由用戶端連線, 應該就可連上 $ sudo service xrdp restart :::success #### 一些 xRDP 的指令: ::: - 查詢 xrdp 目前的運行狀態 $ systemctl status xrdp - 重啟 xrdp 服務 $ sudo systemctl restart xrdp - 啟用 xrdp 服務 systemctl enable xrdp - 若系統是禁用 ufw, 造成 xrdp 的端口 3389 被防火牆檔下時 $ sudo ufw enable $ sudo ufw allow 3389/tcp --- 檔案傳輸: sFTP --- 當遠端連上 Jetson Nano 的桌面後, 就可以讓用戶操控它就像在本機上操作一般, 但若想要將資料上傳或下載呢 ? 最普遍的方式就是透過 FTP 或 SFTP 來傳送。 :::success SFTP 是 Secure File Transfer Protocol 的縮寫,在傳送文件的過程中會以加密的方式傳輸,它相對於傳統的FTP 是一種較安全的文件傳輸協定。 ::: :::warning ### 新增群组與用戶 ::: - 新增 SFTP 群组, 名稱自訂, 此處範例為 sftp-users `$ sudo addgroup sftp-users` - 新增 SFTP 用戶, 名稱自訂, 此處範例為 sftp `$ sudo adduser sftp` - 將 sftp 加入 sftp-users 群組, 並移出其他群組,且關閉 Shell 的權限 `$ sudo usermod -G sftp-users -s /bin/false sftp` - 新增 SSH 群組, 名稱自訂, 此處範例為 ssh-users `$ sudo addgroup ssh-users - 將連線用戶 (例如 vincent) 加入 SSH 用戶群組 `$ sudo usermod -a -G ssh-users vincent` :::danger 其他常用指令: - 將用戶將入 sudo 群組 `$ sudo usermod -a -G sudo 用戶帳號` 參數 -a , 表示僅加入但不從既有的群組中移除 - 將用戶從群組中移除 `$ sudo deluser 用戶帳號 群組名稱` 例如 sudo deluser kevin sftp-users ::: :::warning ### 新增共享目錄 ::: - 在 home 目錄下新增 sftp_root 目錄與 shared 子目錄 `$ sudo mkdir /home/sftp_root` `$ sudo mkdir /home/sftp_root/shared` - 更改 sftp_root 目錄權限, 並限制 ChrootDirectory 存取 `$ sudo chown root:sftp-users /home/sftp_root` - 設定 shared 目錄權限, 並加入要存取 `$ sudo chown sftp:sftp-users /home/sftp_root/shared` `$ sudo chmod 770 /home/sftp_root/shared` :::warning ### 修改 OpenSSH 設定 只讓 ssh-uers 及 sftp-users 可通過 SSH 登入 ::: - 編輯 sshd_config 設定檔 `$ sudo nano /etc/ssh/sshd_config` - 註解 Subsystem sftp /usr/lib/openssh/sftp-server - 新增 Subsystem sftp internal-sftp - 在檔案的尾端加上下面的片段 ``` AllowGroups ssh-users sftp-users Match group sftp-users ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp ``` :::danger 經以上設定後, SSH 與 SFTP 用户均可使用 SSH 來連上主機,但使用SFTP 連上後, 會被限制存取的目錄僅限於 /home/sftp_root/shared。 ::: - 文件畫面修改如下圖: ![](https://i.imgur.com/RW9OOax.jpg) - 最後, 重啟 SSH 服務 $ sudo service ssh restart :::info ### SFTP Clients ::: - 下載與安裝 SFTP Client 軟體 - Windows: [WinSCP](https://winscp.net/eng/download.php) 或 [MobaXterm](https://mobaxterm.mobatek.net/) - MacOS: [ForkLift](https://apps.apple.com/tw/app/forklift-file-manager-and-ftp-sftp-webdav-amazon-s3-client/id412448059?mt=12) 或 [Cyberduck](https://cyberduck.io/download/) - 開啟 SFTP Client 軟體, 輸入主機 IP 與連線用戶帳密 ![](https://i.imgur.com/B5AKnB8.jpg) - 連上 Jetson Nano 主機 ![](https://i.imgur.com/D6etnQf.jpg) ### 完成此文的實作, 接下來就可以隨時開關機, 控制主機, 共享檔案與桌面, ... 等開發與管理的工作了 !!