由于我目前打游戏已经全线转移到主机平台,所以一直没有什么换电脑的需求,2017 年上大学时买的神舟战神笔记本一直用到现在。曾经一直以为这破本子不支持 Wake on LAN,因为 BIOS 里找不到任何相关设置项,直到我前几天无聊随手测试了一下,结果非常顺利地唤醒了电脑...于是稍加配置,现在我就可以非常方便地远程控制电脑了。

Wake on LAN

首先确保电脑是有线连接网络,然后翻一下 BIOS 里有没有网络唤醒的相关设置,有的话就全部打开。

然后打开网卡的属性,点击配置。

image-20230701221331094

在电源管理标签中勾选“允许此设备唤醒计算机”,下面的“只允许幻数据包唤醒计算机”也可以勾选。

image-20230701221419281

电脑上的 Wake on LAN 配置就这么简单,现在可以来简单测试一下能否正常接收到数据。

我使用的是这个项目:WakeOnLAN,打开后是这个样子

image-20230701222427779

选择“封包监控诊断工具”image-20230701222458761

然后在手机上随便下载一款能够发送 Wake on LAN 消息的 app07f037f078d65628992e0fa53b49c843

确保手机与电脑处于同一网络,填入相关配置,尤其注意电脑有线网卡的 MAC 地址一定要写对

21b40c592136091d59e195bd5f4fb794_720

保存后点击发送,如果电脑接收到相关数据,那就可以关机测试是否能正确开机了。

image-20230701223133607

HomeKit 配置

现在电脑已经可以在局域网内实现网络唤醒开机,下一个问题就是如何在外网环境向电脑发送指令。因为家里正好有一台 24 小时开机的树莓派在当服务器使用,所以我这里的解决方案是使用 Home Assistant。

翻了一下 Home Assistant 的文档,发现正好支持 Wake on LAN 的集成配置,可以作为一个开关设备控制,完美符合需求。

编辑 configuration.yaml,照猫画虎加入以下配置:

switch:
  - platform: wake_on_lan
    name: "电脑"
    mac: XX-XX-XX-XX-XX-XX
    host: 192.168.31.108
    turn_off:
      service: shell_command.turn_off_pc

shell_command:
  turn_off_pc: "ssh username@192.168.31.108 shutdown -p"

配置完重启 Home Assistant,就可以在控制面版中看到一个名为“电脑”的开关实体了。

image-20230701224820724

现在完整的数据流,就是我在手机的 HomeKit 里点击开机,家里作为中枢的 HomePod mini 接收到指令并下发到树莓派 Home Assistant 中创建的开关,开关再在局域网中向电脑发送 Wake on LAN 消息完成开机。

关机配置

这里需要额外注意的是关机命令,是通过 ssh 登录 Windows 执行 shutdown 命令来实现的,还需要在电脑上做一些相关配置。

打开系统设置,在 应用 - 可选功能 中安装 OpenSSH 服务器,让我们可以通过 ssh 连接到电脑。image-20230701225825601

由于我们需要无密码访问,所以还要配置 ssh 密钥。

在树莓派上使用 ssh-keygen 生成密钥,由于我的 Home Assistant 使用的是 docker 版本,所以需要进入容器的 bash 再生成密钥才行

docker exec -i -t homeassistant /bin/bash

将生成的公钥 ~/.ssh/id_rsa.pub 内容复制出来,在 Windows 端的用户目录 C:\Users\%UserName%\.ssh 下创建 authorized_keys 文件,把公钥粘贴进去,现在就可以通过 ssh 命令一键执行 Windows 关机了。

远程桌面

由于我这边没有公网 IPv4 地址,尝试跟客服申请也无果,所以只能使用 IPv6 来连接了。

首先配置光猫,我使用的中国联通的 TEWA-802G,跟宽带安装师傅要到了管理员密码是 CUAdmin,登录后修改 INTERNET 连接的 IP 模式为 IPv4&IPv6

6526f5153993440b601ffc166baf641b

在路由器后台也打开 IPv6 相关设置

image-20230701233604015

此时电脑应该已经可以获取到公网 IPv6 地址了

image-20230701233657933

由于不是固定 IP,每次开机获取到的 IPv6 地址都会变化,所以还需要 DDNS,我使用的是 GitHub 上的这个项目 DDNS 配合阿里云来实现。

直接下载 Windows 二进制版,首次运行会在当前目录生成 config.json,填写域名和 token,就可以在每次运行的时候更新域名解析地址。

最后配置任务计划程序,就可以实现每次开机后自动刷新 DNS,并且每五分钟更新一次。

image-20230702002906281

在系统中打开远程桌面,就可以愉快地连接了。

image-20230701234728305

如果还无法连接,可能是防火墙的原因,需要在路由器和光猫中开放相应端口

ip6tables -I forwarding_rule -p tcp --dport 3389 -j ACCEPT

最终效果

4d2f86202877a9657fc51a53a05bfde0_720

现在出门在外,无论在公司还是在户外,只要有 IPv6 网络,都可以一键开启家里的电脑,并连接远程桌面随意控制,非常方便。

fe78c68b5d1140adaf920db8731f4ecd_720

将电脑接入 HomeKit 之后,还能联动智能家居进行一些更有趣的玩法,比如配合人体传感器在我靠近桌面之后自动打开电脑,或是在晚安场景中关闭灯光的同时控制电脑关机,更多的玩法就自由发挥想象力吧。

Last modification:July 2nd, 2023 at 02:31 pm
If you think my article is useful to you, please feel free to appreciate