最近入手一英伟达jetson nano,安装的是ubuntu 18.04。但是手头上缺少一个显示器,本着省钱,简单,高效的原则,采用一根网线组建一个笔记本电脑和jetson nano之间局域网,实现VNC viewer访问ubuntu18.04 unity桌面,并安装ftp,创建ftp用户,实现ftp传文件。
一、实现笔记本电脑和jetson之间的网络通讯
首先直连个人电脑和jetson nano。本人的笔记本是mac,没有网口,用的是type-C转RJ45口连接的jetson。我采用的方案是共享wifi给网口。
参考链接。这篇博文修改用了dhcp,然后通过ifconfig的方式先找到苹果电脑的地址,然后再在树莓派的/etc/network/interfaces设置了静态ip,保证这个静态ip和ifconfig出来的ip处于同一网段。一般来说,ubuntu网卡默认是dhcp的方式,在没有显示器的情况下设置静态ip设置会比较麻烦。其实,网络共享设置或者不设置dhcp都没啥影响,只要两边能ping通一般问题都不大。然后终端输入arp -a,获得jetson的ip地址是192.168.3.6。如下图,[bridge]类型的ip肯定是Jetson nano的。把这个ip地址记下来,后面建立连接和ftp都会用到。以后每次重新连接,如果192.168.3.6失效了(mac重启,换了固定IP,jetson连接过其他电脑等等),说明jetson那边dhcp动态分配了一个新的ip,终端重新输入arp -a,获得新的jetson的ip地址就行了。
至此,就实现了mac和Jetson之间的网络连接,并且jetson也可以访问互联网。如果有显示器可以接上去上个百度悄悄话,或者先用终端ssh访问测试一下。
如果Jetson nano的ubuntu没有装ssh,需要执行sudo apt-get install openssh-server,安装一下ssh。sudo service ssh start启动ssh服务,并sudo ps -e |grep ssh #查看ssh服务是否启动。如下图表示已经开启。
在Mac端打开终端直接ssh登陆。ssh ubuntu的用户名@ip,第一次会告诉你那边的权限不太够,是否继续,填yes即可。成功后ping一下百度,可以访问互联网,没毛病。
需要注意的是,由于mac在网络中的配置实际上是usb转出的网络,所以就算采用手动ipv4的方式配置ip地址为固定的192.168.138.1,最终实际上在jetson上对应的eth0的通信的ip却是192.168.3.6。如果是自带网口的windows本,配置会更简单,jetson上对应的eth0的通信的ip就直接是192.168.138.X了。
二、安装x11vnc服务端
常见的vnc的服务端有tightvncviewer,vnc4server等,但是对ubuntu的支持都不太好,tightvncviewer很久没有更新了,也没有在ubuntu上试过,而vnc4server只支持gnome桌面,还需要安装gnome桌面桌面。所以选择x11vnc。
1.apt-get安装X11VNC
apt-get update
apt-get install x11vnc
2.设置VNC密码
x11vnc -storepasswd
然后需要输入两次密码。这个指令默认将密码存储在~/.vnc/passwd中
3. 配置自启文件(Ubuntu 15.04及以后版本)
sudo vim /lib/systemd/system/x11vnc.service
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
User=你的用户名
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5900 -shared
[Install]
WantedBy=multi-user.target
首先解释一下x11vnc几个参数的含义,可以查v=x11vnc –help获得资料。
-auth file表示权限文件放置的地方。-auth guess会去猜测默认的位置。
-rfbauth表示密码放置的地方
-repeat 默认是-norepeat。好像是和键盘重复按下去相关的,如果是-repeat,表示键盘可以连按。不太确定。
-noxdamage表示Do not use the X DAMAGE extension to detect framebuffer,暂时还不太理解
-forever表示持续监听新的客户端请求,如果第一个连接的客户端不慎断开,vnc应用程序仍然运行等待下一个请求的到来。相对应的是-once,它表示如果第一个客户端断开了,就直接退出程序。
-shared表示vnc是共享的,多个客户端可以同时访问这个服务端。
-rfbport表示连接的端口号,新版本的x11vnc的帮助文档说已经弃用(passed)。
另外这个步骤有一个巨大的天坑,由于ubuntu默认是禁止root权限登陆的,默认以用户安装系统创建的账户去登陆,所以[Service]下一定要加上User=你的用户名这一项,否则系统默认会用root账户启动vnc,到时候用客户端访问非root账户的桌面,会报错:the connection is refused by te computer。可以用ps -aux |grep x11vnc查看当前的x11vnc服务是属于哪个用户的。折腾了我快两小时,当时配置命名完全没问题的。我也是晕。
4.启动服务,重启服务器
sudo systemctl daemon-reload
sudo systemctl enable x11vnc.service
sudo systemctl start x11vnc.service
reboot
服务器如果没有外接外接显示器,x-session不能从外部获取分辨率,需要在xorg.conf中设置虚拟分辨率。参考这个。
找到/etc/X11/xorg.conf,如果没有直接手动创建就行,并添加如下代码(客户端显示屏分辨率是1680×1050,可以根据实际情况修改Virtual参数)。主要是Section ‘Screen”段的内容,如果已经有Section “Device”或者Section “Monitor”可以不用加不用改,最后加上Section ‘Screen”段即可。
Section “Device”
Identifier “Configured Video Device”
EndSection
Section “Monitor”
Identifier “Configured Monitor”
EndSection
Section “Screen”
Identifier “Default Screen”
Monitor “Configured Monitor”
Device “Configured Video Device”
SubSection “Display”
Depth 24
Virtual 1280 800
EndSubSection
EndSection
终于,搞定了这一块。至少一块显示屏的钱省下来了,hdmi接口的少说也要个七八百吧?
三、安装ftp,实现简单的文件互相传输
1.在 Ubuntu 中安装 VSFTPD 服务器
sudo apt-get update
sudo apt-get install vsftpd
2.新建一个文件夹用于FTP的工作目录
mkdir ~/ftp
3.新建FTP用户并设置密码以及工作目录 ftpname为你为该ftp创建的用户名
sudo useradd -d ~/ftp -s /bin/bash ftpname
并为为新建的用户设置密码:passwd fit-name
(本人设置的都是ftper)
4.修改vsftpd配置文件 ,用命令打开vsftpd.conf
设置属性值(通过去掉#注释的方式)
anonymous_enable=NO #禁止匿名访问
local_enable=YES
write_enable =YES
5.启动ftp服务
service vsftpd start