相关信息
事情是这样的,有时候需要用到的文件,总是会在家里的台式机上,而我已经进行了异地组网,随时可连上家里的网络,这时候如果能远程开关机就更棒了。
第一步,肯定是在bios中开启该功能,我是微星主板,在「设置」-「高级」-「唤醒事件设置」中,将pcie设备唤醒选项开启即可。
第二步,我的软路由和它下面接的华硕路由器(AP模式)里面都自带网络唤醒功能,只要记住电脑的mac地址即可通过任何一台路由器唤醒。
但是事情肯定没有这么简单,因为每次想要唤醒电脑,都要先登录路由器,然后在众多菜单中找到网络唤醒菜单,然后再找到自己的电脑mac地址,然后再唤醒,每多一步操作,我就少一分耐心,我想应该还能有更简单的方式。
正好想起我自己的公众号代码就部署在家里的另一台小服务器上,那我应该可以通过公众号直接唤醒电脑啊,说干就干,接下来就是我的实现方式,关键代码就两行:
pythonfrom wakeonlan import send_magic_packet
send_magic_packet("xx:xx:xx:xx:xx:xx") # 函数中填入电脑mac地址
emmmmm,Python就是好,连WOL都有现成的包可用,直接调包就完事了。
于是我只需要在公众号服务端监听消息,只要是我指定的wol唤醒「咒语」,就自动触发这段代码,这里需要特别注意一个事情,由于我公众号服务端是使用docker部署的,所以如果需要网络唤醒这个功能,部署的docker容器一定要使用host模式,桥接模式下亲测并不能在局域网内唤醒电脑。
做完这个功能后,再也不用记电脑的mac地址了,而且有时候回来,到楼下顺手发一下咒语,上楼都不用等电脑开机了,十分方便。
既然说的是远程开关机的实现方式,必定不能只有开机。一般情况下我都是用windows自带的远程桌面连接,顺手关机倒也还好,但是我还是好奇,能否有其他方式实现,比如我没法远程桌面的时候也想远程关机怎么办?
找了找,发现还真有解决方案,思路大致如下:
关键代码如下:
pythonimport paramiko
def ssh_shutdown(hostname, port, username, password):
# 创建SSH对象
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
client.connect(hostname, port, username, password)
# 执行关机命令
stdin, stdout, stderr = client.exec_command('shutdown /s /t 0')
# 获取命令输出
print(stdout.read().decode())
# 关闭连接
client.close()
return "关闭电脑"
参数中hostname填入电脑ip地址,port一般是22,username为电脑登录名,password开机密码
其实可以把远程开关机的功能都做成 web 接口,这样可以用iPhone中的快捷指令一步就实现开关机,连打开微信公众号的功夫都省了,甚至可以使用 siri 动动嘴就能开关机,或者直接用自动化,进入大楼附近就直接开机,离开自动关机。
最近重装系统后发现,哪怕BIOS中开启了WOL功能,但是也不能正常使用,一番摸索发现,重装系统后,还需要在windows中关闭快速启动功能,否则WOL功能还是会使用不了
本文作者:狄云
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!