Arch linux实现远程开机

2017-12-06 23:21:44

你是否有过这样的情况,迫切的想打开一台远程的电脑。有可能是你在公司,想拿家中电脑中的一个文件。或者是在家中,想打开公司电脑处理一系列的问题。

但是不幸的是,你发现你想要打开的电脑是关机的,纵然你是多么顶极的黑客,你也只能够望洋兴叹,鞭长莫及
  • 笔者就有在家敲代码时,发现公司中的一些代码忘记提交代码仓库,所以大冬天的又跑回公司的惨痛经历。所以我想把相关的思路或者说是解决方案记录下来,以供需要的人参考,使用。
  • 因为现在笔者所有电脑都统一用成了arch linux 系统,所以本教程只能使用arch系统作为演示了,其它的linux系统应该是大同小异。至于windowns系统,方法应该也是有的,不过可能要装一些第三方的软件,具体你可以通过linux的解决方法,来试试win下是否能够走的通,笔者就不进行实验了。
  1. 首先,因为arch linux 默认并没有安装相应的网络管理工具,比如说ifconfig,route,nslookup等命令,为了接下来使用方便,还是推荐装一下的,安装命令很简单,直接执行以下命令即可
pacman -S net-tools dnsutils inetutils iproute2
  1. 查看主板目前已经开启了远程唤醒,首先执行下面命令查看当前网卡名称
 ifconfig

如图所示

可以看到,笔者的网卡名称为enp2s0,当然你的可能叫做eth0,对号入座即可

  1. 然后执行命令

    sudo ethtool enp2s0 | grep Wake-on

笔者的执行结果如图所示

可以看到,笔者的很幸运,Wake-on的值为g,默认就是开启的状态的。当前的电脑大部分都已经支持了wake on lan选项,如果你的Wake-on的值为d的话,那么需要执行如下命令开启。

 sudo ethtool -s enp2s0 wol g

如果你压根就看不到wake-on命令,那么很有可能是你的主板禁用了wake on 命令,所以你需要进入bios系统,把wake on lan设置为enable,具体情况可自行google或baidu

  1. 当wake-on打开后,就可以在局域网中唤醒了,现在我们打开局域网中的一台电脑
    前面没有说,唤醒是有条件的,也就是说唤醒电脑的同一局域网上,必须有一台开启的电脑,这个比较坑爹,还好博主有一台路由器,可以充当唤醒电脑使用,当然你也可以买一台树莓派,充当唤醒电脑之用,所以在这里我还是推荐你搞一台开发版的路由器吧,这样成本比较低而且可以物尽其用
  2. 接着说,我们把需要唤醒的电脑称之为主机,那么唤醒它的就叫做客户端。需要在客户端装一个软件,unbutu下可以使用wakeonlan,安装命令
sudo apt-get install wakeonlan

archlinux 下可以使用wol命令,安装命令如下

sudo pacman -S wol

那么接下来,在客户端执行wakeonlan 主机mac地址,如

 wakeonlan xx:xx:14:f3:08:0f

,或wol 主机mac地址,如

wol xx:xx:14:f3:08:0f

,如果成功的话,终端中会相应的显示如下

  • Waking up xx:xx:14:f3:08:0f... //此为wol唤醒
  • Sending magic packet to 255.255.255.255:9 with xx:xx:14:f3:08:0f //此为ubuntu唤醒

如果不出意外的话,关掉主机,在客户端执行相应命令,主机是能正常开机的

那么问题来了,如何在远程唤醒电脑,因为前文中我们是在局域网站唤醒的,必须在远程唤醒才有意义。如在公司唤醒家中电脑,在外地出差唤醒公司电脑

这里提供两套方案作为参考

  • 如果有公网ip的话,那么一切就简单多了,你可以在客户机上装一个php环境或者是别的环境,然后写入相应的代码,使用浏览器访问即可唤醒,在此演示php的写法
<?php
$data = shell_exec("wakeonlan xx:xx:xx:af:74:42");
echo $data;
?>
  • 并没有公网ip,这样你或许可以弄一个frp之流来完成内网穿透,但如果实在是懒得折腾的话,那么,可能就需要借助一些外力了,比说你有一台云服务器,那么你就可以设置一个开关,让客户端每分钟去请求一次,如果云服务器的条件是满足的,那么客户端发送相应的指令

这两个方案抛砖引玉了,你肯定有更好的想法,本文仅仅是提供思路

接下来,电脑开机以后,我认为你有一百种办法可以远程操作并且使用它