如前所述,自费购买了一台NUC8i7beh准系统,替代了很卡很卡的公司笔记本电脑。随之而来的问题是:下班后舍不得让电脑一直开机待命,有时不在公司需要让同事帮忙按一下开机按钮,才能用TeamViewer进行远程桌面。恰巧没人在公司的时候就没法开机,也就没法远程桌面。
为了解决这个难题,我想到了WOL(Wake On Lan,网络唤醒),搜索了大量文章,发现NUC不支持从关机状态下网络唤醒,但可以从休眠状态唤醒,于是妥协到“从休眠状态唤醒”。官方文档
由于WOL的原理我没有仔细查,大概是:从【局域网内】的一台【其他设备】在局域网内广播一个特定的【魔术包】,这个魔术包可以唤醒【指定目标MAC地址】的网卡主机,前提是这台主机设置了允许通过魔术包唤醒自己。
我的做法是:
① 在显示器后面挂一个树莓派3B,树莓派有无线网卡和以太网口,wlan连接公司wifi,以太网口使用一根网线与NUC的网口直连,在自己的腾讯云主机上常驻FRPS服务,在树莓派上常驻FRPC。这一步的目的是实现内网穿透,可以通过公网ip或域名访问到树莓派。
② 在树莓派上使用 sudo apt-get install etherwake -y
命令安装etherwake程序,这个程序可以通过 sudo etherwake 12:34:56:78:90:AB
这样的shell命令唤醒局域网内指定的MAC地址主机。先执行验证一下,看是否可以唤醒NUC……………… OK唤醒了没问题。
③ 现在因为有了frp的内网穿透,树莓派已经映射到公网了,只需要让树莓派在接收到特定指令时执行②中的命令即可。我在树莓派上安装node.js + koa2 + koa-router,写了一个简单的get接口,当这个接口被调用时,就会执行②中的shell命令,进而唤醒休眠中的PC。
④ PC被唤醒后,TeamViewer自动联网,自己家里电脑也开一个TeamViewer就可以远程控制了。
⑤ 因为最近盛传TeamViewer被黑客攻破,已经不安全,公司也不允许使用TeamViewer进行远程协助了并且推荐使用向日葵进行远程协助(??啥???我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出:别碰Oray家的东西)。于是我改用Windows自带的远程桌面(3389)。PC被唤醒后,常驻PC后台的frpc开始工作,映射本地的TCP:3389端口到云服务器的xxxxx端口,当PC被唤醒以后就可以使用自己的域名+端口号+Windows用户名密码来登录远程桌面了。