本文通过ToDesk/Linux etherwake实现Windows Wake On Lan,并通过Windows专业版自带mstsc工具配合虚拟局域网TailScale实现电脑的远程操作。
一、RDP mstsc工具配置
微软自带的mstsc是一个非常好用的工具,相比于TeamViewer之流的工具,mstsc并不是通过录屏的方式来实现远程操作,而是通过微软自家的RDP协议将GDI命令参数传送至客户端再进行渲染,只传送命令不传送画面,因此对网络要求较低,延迟也较小。
与此同时,mstsc还可实现客户端硬盘、摄像头等设备挂载至远程设备(远程操作的电脑可以调用手边电脑的摄像头、话筒甚至是硬盘)。
作为一个surface用户,当我使用surface作为客户端时,它甚至支持手写笔及触控输入。😃
这一步可以参考晨钟酱的视频。
(1)TailScale组建虚拟局域网
以往文章中也略作介绍(上述视频链接中有详细介绍),该软件可以将同一账户登陆下的设备组件至同一虚拟局域网之中。通过这一方法,我们可以不通过公网IP的方法便可以在外访问内网。
- 在两台电脑上下载TailScale并登陆同一账号,可以使用微软/Github/谷歌等账号登陆。
- 打开Tail Sacle console即可查看被绑定设备的虚拟IP地址,如下图所示。
- 在被控端电脑打开设置->系统->远程桌面 中打开该选项。
就此,被控端设置完成。 - 在客户端打开远程桌面连接(mstsc),在计算机中填写TailScale虚拟IP地址,用户名中填写被控机器所登录的微软账户名称(一般为Outlook邮箱),密码则为微软账户密码。
(2)RDP优化配置
这里主要总结一下如何进行RDP远程桌面的设置优化[1]。
显卡加速
- 首先打开远程主机上的组策略(Win+R打开运行,输入gpedit.msc)。
- 依次找到计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境。
- 在右边选择将硬件图形适配器应用于所有远程桌面服务会话。
- 右键编辑,选择已启用,确定保存并重启。
开启RemoteFX USB重定向
- RDP默认支持共享存储设备,我们可以让它共享大多数的USB设备。
- 在客户端电脑上,打开组策略(Win+R打开运行,输入gpedit.msc)。
- 依次找到 计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话客户端->RemoteFX USB 设备重定向。
- 选择右边的允许此计算机中受支持的其他 RemoteFX USB 设备的 RDP 重定向,设置为已启用,然后将选项中的RemoteFX USB重定向访问权限”设置为“管理员和用户。
- 确定保存,重启生效。
重启后打开远程桌面客户端,点击显示选项,在本地资源里的本地设备和资源的详细信息中可以找到其他支持的RemoteFX USB设备,一般来说可以全都勾选上。
声音流畅度优化
- 首先打开远程主机上的组策略(Win+R打开运行,输入gpedit.msc)[2]。
- 依次找到 计算机配置 - 管理模板 - Windows 组件 - 远程桌面服务 - 远程桌面会话主机 - 设备和资源重定向。
- 双击打开 限制音频播放质量,打开 已启用,然后根据网络情况选择音频质量。
win+R
运行gpupdate /force
重新加载策略组。就此,服务端已设置完毕。- 客户端中打开mstsc,显示->颜色->16位色深;体验->调制解调器(56 kbps),输入被控端虚拟ip地址。将配置文件另存为桌面。
- 以记事本方式打开该文件,并在末尾添加:
set audioqualitymode:i:2
- 在后续连接时,直接打开该.rdp文件即可。
据[3],图形首选项中将两台电脑的声卡设置为高性能也可改善音频延迟的情况。
(3)其它设置
由于作者试图从关机到控制完全远程实现,因此还需一些额外设置。例如:TailScale作为Windows软件,在首次开机锁屏密码输入前它并不会运行(设置开机自启也不会在输入密码前运行),这使得我们的TailScale在登陆账户前无法生效。但我们只能在TailScale虚拟局域网下才能实现远程操作输入密码,陷入死循环。
这里通过Windows任务计划程序来实现TailScale服务自启[4]。
win+R
输入control
打开控制面板,在搜索栏中搜索“计划任务”并打开。- 选择创建任务,在名称中输入“TailScale开机自启”,下方勾选“不管用户是否登陆都要运行”。
- 在触发器->新建->开始任务中选择“启动时”。
- 在操作中绑定应用程序,程序选择TailScale安装地址中的
tailscale-ipn.exe
。
- 最后,在条->网络中一栏勾选“只有在以下网络连接可用时才启动”并选择“任何连接”。
二、Wake On Lan设置
(1)Wake On Lan 主板设置
- 在BIOS中打开
Wake On Lan
相关设置[5]。 - 被控端网卡驱动里需要设置开启WOL相关选项。
无线网卡一般不支持wol,有线网卡大部分支持。在设备管理器中找到支持wol唤醒的网卡设备,右键选择「属性」,然后在「电源管理」里面开启「允许此设备唤醒计算机」,然后在「高级」一栏里找到「唤醒魔包」并「启用」。
- 关闭快速启动
(2)ToDesk方法
这里参考ToDesk的官方教程,使用较简单,但是该方案有如下缺点:
- 需要被控端开机自启ToDesk,与此同时被控端局域网下需要有另一台
linux/ios/mac/win/android
设备登陆ToDesk并始终在线。
(3)linux唤醒
作者的使用场景为:Surface在寝室中远程控制实验室的笔记本电脑,实验室局域网下还有配有TailScale的linux服务器。因此作者使用同局域网下的linux搭配etherwake软件包实现windows设备的WakeOnLan[6]。
- 首先通过
sudo apt-get update && sudo apt install etherwake
安装软件包。 - 安装完成后即可通过
etherwake AA:BB:CC:DD:EE:FF
实现windows设备的远程开机。其中AA:BB:CC:DD:EE:FF
为windows的MAC地址。
shell脚本
尽管etherwake是一个很方便的工具,但是每次远程开机都需要输入MAC地址未免有些麻烦,因此在这里作者选择编写一个很简单的bash
脚本来简化该命令。
- 编写脚本
- 创建脚本文件,命名为
wol
:
sudo vim wol
- 在
wol
中添加如下命令[7]:
#!/bin/zsh echo 管理员密码 | sudo -S etherwake echo 'Wake On Lan......OK!'
esc
->:
->wq
进行保存。
- 创建脚本文件,命名为
- 给予权限[8]
在上述脚本所在文件夹中执行以下命令:sudo chmod 777 wol sudo chmod +x wol
- 添加环境变量[9]
- 通过
sudo vim /.~zshrc
打开zsh
配置文件。(如果用bash则打开~/.bashrc) - 在末尾添加
export PATH=$PATH:/home/fbwenoll
。其中/home/fbwenoll
为上述wol文件所处的目录。
- 通过
(4) 物联网方法MQTT
此外也可以通过ESP32/ESP8266一类带有WiFi功能的MCU实现计算机的WOL,这里提供两个链接供参考。
其它
由于作者使用Ubuntu+windows11双系统,当开机时会先进入grub引导来选择要进入的系统(默认为ubuntu)。因此还要将win11设置为grub默认开机选项。这里提供一篇博客供参考[10]。
https://blog.csdn.net/csdn_life18/article/details/108250846#RemoteFX_USB_64 ↩︎
https://www.bilibili.com/read/cv4421723/ ↩︎
https://www.zhihu.com/question/406412942 ↩︎
https://www.zhihu.com/question/43325335 ↩︎
https://www.todesk.com/faq/57.html ↩︎
https://www.jianshu.com/p/ea09ec4d4867 ↩︎
https://blog.csdn.net/Britripe/article/details/114081200 ↩︎
https://blog.csdn.net/niuxikun/article/details/108996733 ↩︎
https://blog.csdn.net/m0_46278037/article/details/120457468 ↩︎
https://blog.csdn.net/weixin_41683971/article/details/105199558 ↩︎