前言

我有个很奇特的需求,在保证性能的前提下对于我来说手机屏幕越大越好 pc 屏幕越小越好,主要目的是为了方便随时随地能利用碎片时间满足多样化办公。事实上现在手机或 pad 其实已经满足了部分用户专业化的办公需求,比如 iPad pro 已经可以运行完整的 PhotoShop 了,但是对于另一些比如想调试个代码或者运维什么的,还是离不开一台 PC 或者 mac,华为手机上推广的 云电脑 就是一个让你可以扔了普通 PC 的非常不错的 app,手机终端只是作为一个瘦终端(也不瘦了),目前我用的华为 mate 系列手机(不是打广告)就可以利用 typeC HUB 实现投屏功能,只要能连接上一台显示屏,我们就可以获得非常好的接近原生 PC 的办公体验。

华为云电脑收费如下

经济型 标准型
按需 2 元 / 小时 + 10 + 元数据保留 3 + 元 / 小时 + 10 + 元数据保留
按月 29.8 元 / 月 59.8 元 / 月

一年需要 300 + 的收费,在停止缴费后数据只保留 15 天,对于我这样的穷人来说买这个服务还是有些犹豫的。那么是否我们可以免费打造一个类似的服务呢,(当然是可以的,不可以我写啥呢)当然一个废话的前提是你得有一台 PC 机。

华为云电脑开启界面
华为云电脑开启界面

这样的问题可以简化为总共分两步实现:远程登陆我的电脑;远程控制电脑开机。

什么远控端好用

远控软件还是比较多的,有大名鼎鼎的老牌 teamviewer,VNC,还有像 Microsoft Remote Desktop,Chrome Remote Desktop,国产的向日葵远控等等。

要满足我们远控的最低要求是,可以从外网穿透内网,如果只能在同一网段的内网远程登陆,那显然不能满足我们的需求。最终选用了 teamviewer, VNC, 向日葵三种不同的远控软件,各有优缺点,不做强烈推荐,总结对比了一下优点和不足

几款远控软件
几款远控软件

  • teamviewer 这个大家可能都用过,算是最成熟广泛的使用的远控软件了。
  • VNC 官网称作 RealVNC, 也是历史悠久的软件了,之所以加面加 Real 前缀,或许是盗版太多?
  • 向日葵这款国产软件由花生壳出品,结合发布的一些硬件,有不少亮点,也是有相当多的用户。
优点 不足
teamviewer 免费,连接速度快,支持内网穿透,跨平台支持,支持文件传输 鼠标的控制的两种模式不能随意切换,对蓝牙鼠标支持不好
VNC 免费,连接速度快,鼠标键盘支持好,支持内网穿透,最全的跨平台 没有目标机上线提示,除了远控不支持远程文件传输等一系列便利功能
向日葵 主要功能免费,支持内网穿透,跨平台,支持鼠标的触摸模式,支持各种小功能包括硬件控制的远程开机 商业化太重,穿插广告过多,远程画面无平滑处理锯齿感太明显,除了远控外的功能都要收费

远控软件鼠标的处理方式,一般是两种,鼠标交互与触摸交互。

teamviewer 几种触摸方式
teamviewer 几种触摸方式

在 teamviewer 上,官方是支持在 6.5 寸的屏幕的 Android 平台才能开触摸交互,除此之外并没有设置的入口,根据在大屏手机上的使用来说,这个功能是有 bug 的,并不能在 6.5 寸手机上正常稳定开启。VNC 只有一种鼠标交互的模式,但是对于外接蓝牙鼠标支持非常友好,而向日葵只能切换到触摸交互才能使用鼠标,这种情况下也就失去了鼠标移动时在软件界面上的的 Hover 效果了。

VNC 远控界面
VNC 远控界面

综合来说,如果需要外接鼠标和键盘和外接屏幕,VNC 应该是首选。

如何远程开机

对于另外一个关键问题,我们不可能在家里长期不关机等着远控,那么在日常关机时,能远程开机就是一个必需要解决的问题了。

远程开机是一个十多年前就推出的技术,称作 WOL(Wake On LAN),最初是由 AMD 牵头开发推广的,关机时网卡不会完全关闭,当监听到了特定的数据包 (Magic Package) 时则会请求开机。

如果你的 PC 机是带网线插口的,那么一般来说主板都可以支持远程开机,但是需要注意的是如果某些笔记本只带无线网卡的情况下,是可能会阉割掉这个功能的。

远程开机有很多方法,有向日葵插在路由上的硬件开机棒,甚至某些路由的后台设置里就有控制选项,以下我会讲一个在智能路由上比较通用的方法(例如在小米路由极路由或者其它可开启 ssh 的路由上使用),不需要额外安装远程开机 app 或者购买特殊的硬件。

首先在确认了主板支持 WOL 后,需要在 BIOS 中开启功能,不同的 BIOS 设置的地方不一样,以下是一些可能见到的 BIOS

bios 设置
bios 设置

bios 设置
bios 设置

bios 设置
bios 设置

在 windows 中需要做如下设置,右键电脑属性,设备管理中

windows 设置
windows 设置

控制面板里关闭快速启动
控制面板里关闭快速启动

另外建议设置关闭睡眠开启定时休眠,做了如上设置后,WOL 功能才能算可以正式生效。

剩下我们要做的事是远程登陆路由,并在路由上放一个可执行程序帮助我们远程开机

对于小米路由或者极路由都是支持 ssh 登陆的,需要取得 root 权限,意味着我们可以完全的掌控此路由了,可以在路由的官网上找到拿 root 权限的详细说明。

我们可以看一下路由的 cpu 是什么型号,ssh 登陆后输入命令

cat /proc/cpuinfo | grep 'model' | awk -F ":" '{print $2}'

然后下载对应 cpu 的可执行文件 (小米和极路由对应的是 mipsle 架构) 下载地址:

https://github.com/oserz/wakeup-go

按项目说明中的操作填 sh 文件中 mac 地址,终端中切换到下载目录,用如下命令上传到路由中

scp wakeup root@192.168.X.X:/tmp/
scp wakesh.sh root@192.168.X.X:/tmp/

192.168.X.X 代表路由的 IP 地址

上传成功后,电脑插好网线,在关机状态下运行 sh 文件就可以成功启动电脑了。

路由上运行开机脚本效果
路由上运行开机脚本效果

还要做什么

为了方便在外网控制远程开机,方便可以在外网随时登陆路由,需要实现:

  • 绑定动态域名服务,就是把域名解析到动态的家庭 IP 上,最好是有穿透的功能动态域名,因为一般家庭的网络的对外 IP 并不是公网,也是按区域划分的 NAT 内网,这个像花生壳之类都有免费的服务,一般路由也都支持,各种路由没有统一的设置界面,因此需要针对不同的路由做不同操作,动态域名一般都是免费的。
  • 在路由后台上设置 TCP 端口转发,绑定一个 1024 以上的端口到内部 22 号端口。

这样我们用如下的命令就可以登陆上内网的路由了:

ssh root@(我的域名) -p (我绑定的转发端口)

另外因为远程控制的服务是一般可以在内网穿透的,同子网运行速度非常快,但如果是不同子网,通过隧道中转的网络包很多时候延时会比较高,表现为操作会比较卡顿,这个当然也是有办法解决的,可以在路由上构建一个 VPN 服务,在远程接入前先连入路由子网。具体不详细长篇大论了,可以参考一个开源项目叫做 brook 解决问题。

建议有办公需求的外接鼠标键盘,手机投屏运行,展示一下最终的效果

外接显示器远程 windows
外接显示器远程 windows