用笔记本电脑控制Jetson Nano听起来好像只是“连上去”这么简单但你真操作一遍就知道这里面有烧录镜像、启动配置、网络分配、SSH连接、远程桌面一长串坑。尤其是我第一次拿到这块板子的时候顺手接了显示器键盘鼠标结果发现桌面卡到怀疑人生外设还占半张桌子。真正搞边缘计算的人其实早就把显示器收起来了全程通过笔记本远程连上去干活。本文是Jetson Nano系列的第一篇专门解决“笔记本电脑控制Jetson Nano”这件事我会从官方镜像烧录、首次启动、SSH远程开发到VNC远程桌面一条龙讲清楚还会把我在实际配置中踩过的坑一并列出来。1. 为什么偏要用笔记本电脑来“控制”Jetson Nano1.1 无头开发到底解决了什么“无头”headless这个词本质就代表一台没有显示器的Linux主机。Jetson Nano本身定位是边缘计算开发板不是替代日常办公桌面的它真正的使用场景是部署在摄像头旁边、无人机上、机器人底盘里或者某个小小的边缘网关中整天开机运行神经网络推理任务。你在这些场景里不可能给它接个显示器更不可能天天蹲在它旁边操作。所以从笔记本电脑远程控制不是“偷懒”而是嵌入式AI开发的基本姿势。从开发体验上说这也更合理。你用自己习惯的笔记本写代码、看文档、跑终端把Jetson Nano当成一台远程服务器来处理CPU、GPU、内存都在开发板上跑笔记本这边只负责交互。这样不仅省下了一整套显示器、键鼠还能让你模拟真实的部署环境因为生产环境的设备绝大多数也是不接显示器的。1.2 这套方案适合谁、不适合谁如果你是刚入手Jetson Nano、想跑YOLOv5这类目标检测模型或者要做边缘计算相关的课程设计、比赛项目那这套“笔记本远程控制”的方案非常合适。尤其是希望能把精力集中在模型推理和调参上的人不应该把时间浪费在拔插U盘、切换显示器和键盘这种琐事上。但我也要泼一点冷水如果你对Linux命令行完全不熟悉连cd、ls都还没上手我建议你第一次启动还是老老实实接一个显示器至少在安装系统和基础配置阶段走一遍图形界面。远程控制不是万能药它需要你具备最基本的网络概念和Linux操作认知。等系统装好、网络配通之后再切回纯远程模式这样你会轻松很多。也就是说本文后面讲的步骤默认你已经在第一次启动时接过了显示器。1.3 你需要准备的东西在正式开始之前先盘点一下手里的装备项目说明Jetson Nano开发板本文以4GB版本为例2GB版本操作基本一致官方电源适配器建议5V/4A或原装DC电源USB口供电很容易翻车TF卡至少32GB读写速度A1以上认真选这直接影响烧录和运行体验读卡器用于把镜像写入TF卡网线或无线网卡Jetson Nano自带千兆网口无线网卡需要另配USB款官方镜像对常见USB网卡支持一般还行笔记本电脑Windows / macOS / Linux均可本文会分别说明显示器、USB键盘鼠标只在第一次启动时用后续可收起来这些东西里最容易忽略的就是电源。Jetson Nano对供电比较敏感很多网上说的“不亮机”“频繁重启”八成都是因为电源电流不够或者用了劣质充电头。我自己的习惯是直接上官方适配器别在这上面省事。2. 先把系统烧进TF卡NVIDIA官方镜像的来龙去脉2.1 官方镜像到底选哪个版本Jetson Nano不像是台式机不能用U盘启动安装程序它的系统是整个烧写到TF卡上的。NVIDIA官方提供的镜像是一个完整的Linux发行版内核、驱动、CUDA、cuDNN、TensorRT这些基础开发库全部都预装好了烧录完成开机即可用不需要像装Ubuntu那样一步步分区、配置源。到这里你可能会问官方镜像那么多版本我到底该下载哪个我的建议很简单去NVIDIA的Jetson下载中心找到与你的板子匹配的官方镜像优先选择最新稳定版JetPack系列。比如JetPack 4.6.x是Jetson Nano比较成熟稳定的一个大版本网上绝大多数教程、YOLOv5的部署脚本也都是基于这个版本跑的。如果你非要尝鲜新版本也请先确认你的板型在支持列表里不然烧完根本启动不了。需要特别提醒的是很多人在搜索时容易找到第三方精简镜像甚至还有“优化版”“加速版”之类的说法。我个人不建议一上来就折腾这些因为官方镜像里预装的驱动和库版本是互相匹配的第三方镜像一旦某个组件版本不一致后面装软件时能让你排查到怀疑人生。先用官方镜像把流程跑通再琢磨优化也不迟。2.2 烧录工具与完整步骤烧录工具我推荐balenaEtcher图形化界面Windows、macOS、Linux全平台通用操作也非常无脑基本就是三连选镜像文件、选TF卡、点Flash。具体步骤如下先把TF卡插到电脑上用系统自带工具或SD Card Formatter把它格式化为FAT32。这一步网上很多人会跳过但如果你之前这块卡上装过树莓派或其他系统的镜像不格式化直接烧很容易在启动阶段出现分区混乱的问题。打开balenaEtcher点击“Flash from file”选中你下载好的官方镜像压缩包。NVIDIA的镜像通常是一个.img.xz文件Etcher能直接识别不需要解压。点击“Select target”选择你的TF卡这个环节一定要看清楚盘符千万不要选到电脑的系统盘别问我为什么特意强调因为笔者身边真有人把整块移动硬盘给清了。点击“Flash”等待写入完成。整个过程大概要五六分钟烧录完Etcher会自动做一次校验看到绿色的“Flash Complete”才算结束。把TF卡插回Jetson Nano接上电源板子就开始启动了。如果你是Linux用户也想体验一下纯命令行烧录的感觉可以用dd命令sudo dd ifjetson-nano-sd-card-image.img of/dev/sdX bs1M statusprogress sudo sync其中/dev/sdX是你的TF卡设备同样要小心别写错。dd写完之后没有任何提示执行完直接拔卡看起来“一切正常”但如果你中途断电或者设备名写错那就是另一种故事了。2.3 第一次上电常踩的坑我第一次烧录完上电的时候板子上的绿灯亮了但屏幕上什么都没有我当时以为自己买到了一个坏的开发板。后来排查发现问题出在TF卡和电源这两个最基础的环节上。先说TF卡。市面上很多写着“高速”字样的卡实际4K随机读写性能非常烂而Linux系统启动恰恰特别依赖4K小文件读取。所以我不止一次建议身边的朋友要么选官方推荐的存储卡型号要么选A1或A2级别的卡读写在80MB/s以上不然烧录过程看似成功了一开机就直接卡在启动画面。再说电源。Jetson Nano的MICRO USB口供电方案极其脆弱如果你用普通手机充电头电流不够的时候板子会呈现一种“反复重启”或者“启动到一半就黑屏”的诡异状态。解决办法也很简单换成5V/4A的DC圆口电源或者官方电源适配器基本立竿见影。判断板子是否在正常工作可以看板载LED灯如果绿灯一直稳定亮说明硬件没问题。3. 首次启动从“能开机”到“能远程连上”3.1 初次启动离不开显示器和键鼠虽然我们的目标是远程控制但第一次启动还是建议接上显示器、键盘和鼠标。开机后系统会让你完成一系列Ubuntu初始化设置选语言、创建用户名、设置密码、选择自动登录等。这里有几个细节值得注意用户名和密码不要随手乱起因为后续SSH远程登录都要用到如果你忘了密码最后的办法往往是重新烧系统。建议用户名直接用简短的英文比如nano、jetson、dev这样的别带空格和特殊字符不然后面路径和命令全都要跟着遭殃。系统问你是否要启用开机自动登录时我的建议是选择启用。我们是要做远程控制的如果每次开机都要在显示器前面敲一次密码才能进桌面那“无头”的意义就大打折扣。当然如果你考虑安全性也可以不开启自动登录但后面VNC远程桌面时会多很多麻烦这一点后面会讲到。3.2 网络配置的两条路有线与无线系统进入桌面之后第一件事是连接网络。这里有两条路线有线网线连接和USB无线网卡连接。有线连接是最稳的方案。直接把网线从路由器或者交换机接到Jetson Nano的千兆网口上Ubuntu默认会自动获取IP地址什么都不用配。只要你的笔记本电脑也在同一个路由器下面那Jetson Nano和笔记本就已经处于同一个局域网了后续的SSH、VNC全都顺理成章。无线连接相对方便但要注意Jetson Nano板载是没有Wi-Fi模块的你需要一个USB无线网卡。插入之后在系统右上角点Wi-Fi图标选择你家路由器输入密码即可。这里有一个常见的坑官方镜像默认没有给某些Realtek芯片的USB网卡加载驱动插上之后系统没有任何反应。解决办法就是先接线去终端里执行sudo apt update sudo apt upgrade更新完驱动库之后把USB网卡重新插拔一次多数情况下就能识别了。如果还是不行建议先查一下自己的网卡型号是否在官方支持列表里或者干脆选择有线方案。3.3 确认IP地址与SSH服务不管是无线还是有线只要网络连通了就该确认Jetson Nano的IP地址。在Jetson Nano的终端里执行hostname -I会直接输出一串点分十进制的IP比如192.168.1.110这就是你从笔记本远程连接时要用的地址。另外我建议这时候顺便确认一下SSH服务是否已经启动。执行sudo apt install openssh-server -y sudo systemctl enable ssh sudo systemctl start ssh官方镜像在部分版本里默认没有安装或启用SSH服务所以这一步不要嫌麻烦。如果不放心可以用sudo systemctl status ssh看看服务状态显示“active (running)”就说明没问题了。顺带一提建议你在Jetson上把IP地址固定一下。因为路由器的DHCP很可能过几天就给开发板分配一个新IP那你的SSH命令、VNC连接、VS Code远程配置全都要跟着改非常折腾。固定IP可以用nmclinmcli con mod Wired connection 1 ipv4.addresses 192.168.1.110/24 nmcli con mod Wired connection 1 ipv4.gateway 192.168.1.1 nmcli con mod Wired connection 1 ipv4.dns 192.168.1.1 nmcli con mod Wired connection 1 ipv4.method manual如果你的网卡连接名称不叫“Wired connection 1”先执行nmcli con show查看一下。设置完成后重启网络或者重启板子IP就固定为192.168.1.110了。4. 主力连接方式SSH远程开发4.1 快速上手SSH到这里你已经可以在笔记本电脑上登录Jetson Nano了。如果你用的是Windows 10或Windows 11系统自带的PowerShell或CMD里已经集成了OpenSSH客户端不需要额外安装任何软件。直接打开终端执行ssh 用户名IP地址比如ssh nano192.168.1.110第一次连接时终端会提示你确认指纹输入yes回车然后输入你在首次启动时设置的用户密码看到Jetson的终端提示符就说明已经成功了。macOS和Linux用户直接在自带的Terminal里执行同样的命令即可。有一个能明显提升体验的操作配置SSH免密登录。每次输密码倒也不是不行但你在一天之内可能会连上几十次输几十次密码真的很烦。使用ssh-copy-id可以一键把本机公钥复制到Jetson上ssh-copy-id nano192.168.1.110这个命令会提示你输入一次密码之后你再执行ssh就不再需要输入密码了。如果你用的是Windows PowerShell没有ssh-copy-id命令也可以手动追加公钥type %USERPROFILE%\.ssh\id_rsa.pub | ssh nano192.168.1.110 cat ~/.ssh/authorized_keys前提是你已经生成了本机SSH密钥如果没有先执行ssh-keygen回车到底再执行上面这条命令。4.2 VS Code Remote-SSH让工欲善其事只靠终端写代码肯定不够爽所以我强烈建议在笔记本电脑上装VS Code并安装“Remote - SSH”扩展。这个扩展的本质是你可以在VS Code里直接打开Jetson Nano上的文件夹左边文件树是开发板上的目录底部终端也是Jetson的shell代码提示、补全、Git操作全都正常工作体验和本地开发几乎一模一样。具体用法是在VS Code中按CtrlShiftP输入“Remote-SSH: Connect to Host”然后输入nano192.168.1.110选择你的SSH配置文件通常直接回车即可。VS Code会帮你在远端安装一个server组件首次连接需要一点时间后续连接就很快了。这里要注意VS Code Remote-SSH的第一次连接对网络稳定性要求比较高如果你的无线网络延迟很大可能安装server组件的过程会超时失败。解决办法很简单先用网线把Jetson和路由器连起来或者把笔记本也放到信号好的地方。我自己的习惯是开发阶段尽量用有线毕竟无线偶尔抽风会打断思路。4.3 文件传输与常用调试技巧在开发过程中你经常需要在笔记本和Jetson之间传文件。最简单的工具是scp在笔记本终端执行scp ./test.py nano192.168.1.110:/home/nano/project/把Jetson上的文件拉回笔记本scp nano192.168.1.110:/home/nano/project/test.py ./如果你要同步整个目录可以用rsync它支持增量同步传大文件或者批量文件时比scp高效很多rsync -avz --progress ./project/ nano192.168.1.110:/home/nano/project/最后分享一个小技巧有时候你在Jetson上跑了一段长时间的训练或推理程序网线一拔掉程序就被挂起甚至中断了。这时候你需要tmux或者screen来保持会话。在Jetson上安装sudo apt install tmux -y tmux python3 train.py然后你可以放心断开SSH连接程序会在Jetson上继续运行。下次重新SSH登录后执行tmux attach即可回到之前的会话界面。这对做模型训练来说简直就是保命神技我强烈建议你从开始就养成用tmux的习惯。5. 需要桌面时用VNC远程桌面5.1 VNC服务端安装与配置SSH虽然能解决90%的开发需求但也总有些场景绕不开图形界面比如要看某个可视化工具的输出、调试OpenCV的窗口、或者干脆想用Jetson里的浏览器查个资料。这时候就需要VNC也就是远程桌面。Jetson Nano官方镜像里通常预置了vinoGNOME桌面环境自带的VNC服务端。如果你已经在桌面里登录了用户最简单的开启方式是在Jetson Nano的桌面中依次打开“设置” - “共享” - “屏幕共享”。打开“屏幕共享”开关。在“允许连接控制屏幕”前打勾并设置一个密码。如果发现“网络”一栏显示“已关闭”先点进去把无线网络或有线网络开关打开。这种方式虽然简单但它的前提是Jetson Nano必须已经登录进桌面而且有显示器或者虚拟显示器。对于无头使用场景我更推荐直接安装x11vnc它可以手动指定要镜像哪个显示屏幕也不需要依赖GNOME的设置项。在Jetson终端的SSH会话里执行sudo apt install x11vnc -y x11vnc -storepasswd第一次会提示你输入并确认VNC连接密码。设置完成后再启动x11vnc -forever -shared -rfbauth ~/.vnc/passwd -display :0 -auth guess注意这里的-display :0指的是Jetson当前正在运行的显示服务器编号-auth guess会尝试自动读取X授权的凭据。如果执行后没有报错终端会显示类似“VNC server started”的信息说明VNC服务已经跑起来了。5.2 从笔记本电脑连接VNC笔记本端需要装一个VNC客户端。Windows和macOS用户可以用RealVNC Viewer或者TightVNC Viewer个人推荐TightVNC Viewer轻量、免费、连接速度快。在地址栏输入Jetson的IP加端口192.168.1.110:5900回车后会提示输入你刚才设置的密码然后就能看到Jetson Nano的桌面了。第一次连接时画面可能会有一些粗糙感这是正常的VNC是逐帧传输压缩画面的网络越好画面越流畅。我在实际使用中发现VNC比较适合做临时操作比如打开一个可视化窗口看一下效果、调整一下系统设置。如果长时间在这个远程桌面上写代码体验其实一般因为VNC的延迟再低也不可能比本地终端更跟手。所以我的建议是能SSH的就SSH必须看界面的才用VNC。5.3 无外接显示器时的桌面体验很多人在拔掉显示器的第一次无头启动之后会遇到一个问题VNC连上了但桌面黑屏。我当初也遇到过折腾了很久才明白这里主要有两个原因。一个原因是Jetson Nano在检测不到显示器时X服务可能压根没有启动图形会话VNC就算连上了也看不到可用的画面。解决方法是先插上一个“虚拟显示器”设备或者使用xrandr手动给显示服务设置一个分辨率。比如export DISPLAY:0 xrandr --fb 1280x720也可以安装dummy显示驱动让系统在没有实体显示器时也认为自己有一个显示设备。不过这个过程相对繁琐对于大多数只想在远程桌面上看看界面的用户我更推荐另一个简单粗暴的办法在第一阶段配置时开启自动登录然后不要把显示器拔掉仅仅把屏幕关掉就行系统会一直认为显示器在线VNC就能稳定连接。另一个原因是如果你用系统自带的vino它很可能只在用户登录之后才会运行VNC服务。只要你开启了自动登录这个问题就自动解决了。如果你没有开启自动登录那么建议你改用x11vnc并按照上一节的方式手动启动。6. 常见问题排查与实用经验6.1 无法找到Jetson Nano的IP这是被问得最多的问题。网络环境不同IP地址获取方式也不一样这里按优先级列出几个排查手段在Jetson Nano上执行hostname -I如果Jetson就在手边这是最直接的方法。进入路由器管理后台查看DHCP客户端列表找主机名类似ubuntu或者nano的设备。在笔记本电脑上使用arp -a扫描局域网内所有设备配合MAC地址厂商NVIDIA来识别。装一个局域网扫描工具比如Advanced IP Scanner或nmap。Windows下可以用Advanced IP Scanner扫一遍看到设备名带“NVIDIA”的基本就是Jetson。这里有一个心得把笔记本和Jetson都插到同一个路由器下是省心最优先的操作。不要一开始就想用网线把笔记本和Jetson直连除非你熟悉手动配静态IP否则很容易把自己绕晕。直连方案留到你熟悉了网络原理之后再玩。6.2 SSH连不上或频繁掉线SSH连不上的情况可以分为几类。第一类是网络通但被拒绝这大概率是Jetson上的OpenSSH服务没装或者没启动回到5.3节检查服务状态。第二类是网络压根不通可能是IP地址写错了或者Jetson没连上路由器。检查Jetson的网口或者Wi-Fi图标确认它确实在同一个局域网里。第三类是SSH连接很慢或者一登录就掉线。这里最常见的原因是DNS解析超时。解决办法是修改Jetson上的SSH服务配置把DNS反向查询关掉编辑/etc/ssh/sshd_config添加一行UseDNS no然后重启SSH服务sudo systemctl restart ssh这能明显缩短登录时的等待时间同时减少掉线现象。如果你在SSH执行长时间命令时经常断线还有一个技巧在笔记本端设置SSH心跳编辑~/.ssh/config加上Host * ServerAliveInterval 30 ServerAliveCountMax 3意思是每隔30秒发送一次保活包这样长时间的编译、训练任务不会因为网络空闲被路由器踢掉。6.3 VNC黑屏、分辨率不对怎么办VNC黑屏的问题在5.3节已经给出了主要思路确保用户已经自动登录或者用x11vnc指定-display :0。如果你用的是系统自带vino黑屏时先在Jetson的终端里执行echo $DISPLAY如果没有输出说明当前会话的DISPLAY环境变量没设好可以在启动命令前加一下export DISPLAY:0远程桌面分辨率不对也是常见的现象。Jetson的默认桌面分辨率可能只有1024x768甚至更低。这时候可以在VNC连接后在远程桌面的设置里修改分辨率或者在命令行使用cvt和xrandr手动添加一个自定义分辨率。对大多数场景来说把分辨率调到1280x720或者1920x1080就够了分辨率太高反而会让VNC的画面卡顿明显。6.4 配置过程中格外值得注意的几个细节最后把我在多次操作过程中总结的几条经验集中说一下避免大家再走弯路第一Jetson Nano的TF卡系统非常依赖电源稳定性。如果出现莫名死机、重启、SSH连接时断时续先怀疑电源再怀疑系统最后才怀疑硬件故障。我在给设备加了一块USB硬盘后出现过几次运行中突然断电的现象换了原装5V/4A电源之后再也没出现过。第二在Jetson上安装Python包或者其他系统软件的时候不要直接改系统默认的Python环境。Jetson的JetPack里很多AI库是依托系统Python环境的你如果贸然把系统Python升级或者替换默认pip源可能会导致CUDA、TensorRT相关的Python模块失效。建议使用venv或者conda创建独立环境。尤其是后面跑YOLOv5时依赖比较多独立环境能帮你把各种依赖隔离清楚省去一堆麻烦。第三不要小看TF卡剩余空间。JetPack安装的深度学习开发库体积很大再加上模型文件、数据集32GB很容易就不够用了。我建议从一开始就准备64GB或128GB的TF卡并且在拿到系统后第一时间检查磁盘使用情况df -h如果某个分区占用过高及时清理不用的大文件。后续如果再烧录新镜像记得把重要的代码和模型备份到笔记本或网盘因为重新烧录镜像会清空整张卡。写到这儿整个“笔记本电脑控制Jetson Nano”的入门流程基本就闭环了。从烧录官方镜像、首次启动到SSH远程开发、VNC远程桌面再到各种常见问题的排查思路你已经可以完全摆脱显示器把Jetson Nano当作一台远程Linux服务器来使用。就我个人实际操作的感受来说这套流程最值得花心思的部分就是网络配置和固定IP前期把这块理顺之后无论是跑YOLOv5还是做其他边缘计算项目都会非常顺畅。下一篇文章里我会接着分享如何在Jetson Nano上搭建Python深度学习环境把YOLOv5这种目标检测模型真正跑起来到时候我们继续拿笔记本远程操刀。
阅读完成 · 觉得有帮助?