Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1817685
  • 博文数量: 473
  • 博客积分: 13997
  • 博客等级: 上将
  • 技术积分: 5953
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 11:52
文章分类

全部博文(473)

文章存档

2014年(8)

2013年(38)

2012年(95)

2011年(181)

2010年(151)

分类: WINDOWS

2011-02-24 16:03:15

本文以一个具体实例,介绍了如何配置和使用网络唤醒 -Wake On LAN (WOL) 。

WOL 简介

Wake-on-Lan,既网络唤醒或者远程唤醒,是一种综合了硬件和软件,通过发送特定的网络包(Magic Packet)来远程启动电脑(待机,休眠或者软关机-在操作系统中关闭计算机,而不是通过按电源开关)的技术。Magic Packet,所谓魔包,一般是一个UDP数据报,包含有连续6个字节的FF和连续的重复16次的MAC地址。
对于支持WOL的主板,如果使用板载的网卡,除了在BIOS里面启用WOL外,不需要额外的硬件设置。如果使用单独的网卡,有可能需要与主板进行连线。是否支持WOL以及如何设置,可以查阅主板的说明书。

要解决的问题

在公司有两台台式器,一台安装了Linux (Fedora 12),另外一台是Windows XP。XP比较少使用,在家的时候,偶尔需要登录到上面用一下,但是如果因此而整天让它开机的话,又比较费电。所以最好能够在需要的时候,能够先VPN登 陆到Linux机器,然后通过WOL来启动这台XP。

配置Windows XP机器

设置BIOS

这里以ThinkCenter M5x机器为例,说明如何设置BIOS以启用WOL。
在电脑启动时,按F1进入BIOS设置界面,切换到Power页,跳到Wake on LAN项,选择Automatic,再切换到Devices页,在Network Setup里面,记下显示的十六进制形式MAC地址,然后保存退出即可。

设置启动计划任务

在一般的公司网络中,IP地址都是通过DHCP动态获得的,虽然一段时间内,改变的几率比较小,但是这种可能性是存在的。所以我们需要在机器启动后,自动把机器的IP地址更新到我们肯定可以获取的地方,比如自动把IP地址发送到自己的邮箱。
在这里,我用的方法是把IP地址写到Linux机器上的Samba共享目录下面。
1) 编写内容如下的脚本,保存为bat文件。不要忘记替换IP地址,共享名以及用户名密码。

  1. echo +++++++++++++++++++++++++++++++++++++++++++++++++  
  2. echo start: %date% %time%  > _Update_IP.log 2>>&1  
  3. java Sleep >> _Update_IP.log 2>>&1  
  4. net use W: /delete >> _Update_IP.log 2>>&1  
  5. net use W: \\192.168.0.2\lnx_share your_password /user:your_name >> _Update_IP.log 2>>&1  
  6. ipconfig /all > W:\desktop_win_ip.txt  
  7. echo end:  %date% %time%  >> _Update_IP.log 2>>&1  
  8. echo +++++++++++++++++++++++++++++++++++++++++++++++++  

在脚本中我们调用了一个Java程序Sleep(所以请安装JDK或者JRE),来实现延时,因为系统在刚启动的时候,网络并没有就绪,如果不延迟 几分钟的话,后面映射网络驱动器的步骤就会失败。缺省延时3分钟,如果要改变延时时间,请在java Sleep后面指定时间数值(单位是毫秒)。
下面是Sleep.java的源代码,请自己编译,并把编译后的Sleep.class文件放到bat脚本所在的目录

  1. public class Sleep {  
  2.     public static void main(String[] args) throws Exception{  
  3.         long sleepSeconds = 3 * 60 * 1000L;//default: 3 minutes  
  4.           
  5.           
  6.         if(args.length == 1) {  
  7.             try {  
  8.                 sleepSeconds = Long.parseLong(args[0]);  
  9.             }  
  10.             catch(Exception ex) {  
  11.                 //ignore, use the default value  
  12.             }  
  13.         }  
  14.         System.out.println("Begin to sleep " + sleepSeconds/60000 + " minute(s)");  
  15.         Thread.currentThread().sleep(sleepSeconds);  
  16.         System.out.println("End sleep.");  
  17.     }  
  18. }  

2) 新建一个任务计划,选择bat文件作为要执行的程序,并指定在计算机启动时执行。

配置Linux机器

设置Samba共享

关于如何设置Samba共享,请参考<使用Samba实现Fedora和Windows系统的文件共享 >

安装WOL客户端

Linux上的WOL客户端的rpm包就叫wol,如果没有安装的话,运行如下命令安装:
$sudo yum install -y wol

wol的使用也很简单,最直接的用法就是后面跟上目标机器的MAC地址(十六进制形式,共12位,每两位以:分隔)。
为方便起见,可以写一个脚本,内容如下(请替换MAC地址):
wol 01:23:45:67:89:AB
每次要启动Windows机器的时候,执行该脚本即可,几分钟后,到共享目录查看生成的文件里面Windows机器的IP地址。

如果要定时启动的话,可以把该脚本加到crontab里面。

另外,关于Windows上的WOL客户端,大家可以搜索Magic Packet。

如何跨子网使用WOL

以上的内容都是基于两台机器在同一个子网的假设的。如果在不同的子网内,需要在路由器或者交换机上做特别的设置。条件所限,我没有机会去尝试,有兴趣和条件的朋友可以参考Cisco网站上的如下文章:

阅读(2192) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~