动手实现Linux远程控制
小糖豆在工作中有时需要将深度学习算法和模型部署到Jetson TX2嵌入式开发板。Jetson TX2 模块采用 NVIDIA Pascal™ 架构,性能强大,且外形小巧,节能高效,非常适合机器人、无人机、智能摄像机和便携医疗设备等智能边缘设备。
但是在平时部署代码的时候,经常需要给TX2外接显示屏、鼠标键盘,操作起来极其不方便,于是小糖豆这几天捣鼓了下远程控制,在局域网下直接远程部署代码,非常方便。
总结了两种方式,供大家参考(PS:下文中将主动实施远程控制的机器称为用户端,被远程控制的机器称为服务端)。
SSH远程控制
使用SSH的好处是配置方便,一步到位,而且速度非常快。远程部署代码时使用SSH省缺了不少麻烦。配置SSH的方式如下:
服务端安装OpenSSH
在服务端安装开源工具OpenSSH,将其配置成服务器。
终端输入
sudo apt-get install openssh-server
服务端获取IP
现在该服务端处于可以被SSH登录的状态,但是在用户端控制需要知道服务端的IP地址。在服务端输入如下指令获取IP。
ifconfig
如果系统提示没有安装,按照提示就可以。
sudo apt install net-tools
确保ifconfig能用后,获取IP地址。比如小糖豆的tx2 ip地址是192.168.8.112。
用户端远程控制
在用户端输入指令,格式为
ssh username@ip
ssh tx2@192.168.8.112
输入指令后,密码为服务端密码,连接成功后会出现类似如下信息:
现在可以在用户端开心的操作服务端了。随便输个指令测试下:
传输文件时使用scp命令,格式为
【文件】scp xxx username@ip:xxx
【文件夹】scp -r xxx username@ip:xxx
举个栗子:
VNC远程控制
SSH只能用来命令行控制,如果想要看到服务端的桌面,可以使用VNC远程控制。具体方式如下:
服务端安装Xrdp
终端输入命令
sudo apt-get install xrdp vnc4server xbase-clients
服务端设置桌面共享
在/usr/share/applications目录下打开Desktop Sharing
可能会有小伙伴在这一步发现Desktop Sharing打不开(事实上小糖豆也没打开),可以按如下操作解决该bug。
首先终端命令行输入
sudo vim /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
在末尾两个介绍标签之前添加一个key
<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>
可以参考小糖豆添加key后的结果:
继续在终端输入指令使其编译生效:
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
现在可以正常打开Desktop Sharing了,桌面共享选项中开启共享,远程连接的密码根据需要自己设定,可参考小糖豆的配置,如下图:
服务端安装dconf-editor
终端输入指令
sudo apt-get install dconf-editor
安装完成后运行dconf-editor,注意前面不要加sudo
dconf-editor
出现如下界面后,将"promotion-enabled"选项和"requre-encryption"选项关闭
服务端设置开机启动
打开Startup Applications
打开后点击Add添加一个新的启动项,在Command一栏中填写如下指令:
/usr/lib/vino/vino-server
配置完毕,重启服务端。
用户端远程控制
打开Ubuntu自带的软件Remmina Remote Desktop Client
点击加号新建一个连接
name一栏根据喜好设置,Protocol一栏里面选择VNC-Virtual Network Computing
在Server一栏中点击最右边三个点,选择要连接的服务端,对于IPV4和IPV6随便选一个就行。
Password一栏中填入设置服务端时候的远程连接密码,然后点击Connect就大功告成了(速度有点感人)。