乐趣区

VNC-viewer单根网线直连访问ubuntu1804-unity桌面的方法适用于被监控方没有屏幕的情况

最近入手一英伟达 jetson nano,安装的是 ubuntu 18.04。但是手头上缺少一个显示器,本着省钱,简单,高效的原则,采用一根网线组建一个笔记本电脑和 jetson nano 之间局域网,实现 VNC viewer 访问 ubuntu18.04 unity 桌面,并安装 ftp,创建 ftp 用户,实现 ftp 传文件。

一、实现笔记本电脑和 jetson 之间的网络通讯

首先直连个人电脑和 <font color=”red”>jetson nano</font>。本人的笔记本是 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

6. 装一个 forkLift,尽情的 get,put 玩耍吧

退出移动版