Está en la página 1de 7

Encendiendo equipos de manera remota

Julio Ros

Encendiendo ordenadores sin levantarse de la silla

ndice de contenido
Problemtica.........................................................................................................................................1 Solucin................................................................................................................................................1 Limitaciones.....................................................................................................................................1 Solucin................................................................................................................................................1 Solucin entorno Windows..............................................................................................................2 Solucin entorno GNU/Linux..........................................................................................................5 Advertencia...........................................................................................................................................7

Problemtica
A veces necesitamos hacer algo con algn computador que est alejado de nuestro sitio, y sabemos que est apagado. Necesitamos encenderlo y nos resultara muy cmodo poder encenderlo desde nuestro sitio sin tener que desplazarnos hasta su sitio y pulsar el botn de encendido.

Solucin
Resolver este problema es posible siempre y cuando se den unas cuantas combinaciones: La placa madre de la computadora debe ser capaz de esto La tarjeta de red de la computadora debe ser capaz de esto Se le debe activar estas opciones tanto a la placa base como a la tarjeta de red Este manual no trata de resolver como se debe activar estos parmetros tanto en la tarjeta de red, como en la placa base. Si se quiere saber si una computadora es capaz de ser encendida mediante el uso de la otra se le debe preguntar al fabricante del equipo si es capaz de esto. Generalmente esto se conoce como wol (wake on lan). Este manual asumir que es posible arrancar mediante esta tcnica los equipos que nosotros queremos.

Limitaciones
Entre las limitaciones intrnsecas es que slo se pueden arrancar los equipos que estn conectados en nuestra LAN, no pudiendo arrancar equipos que estn en redes WAN.

Solucin
Para arrancar un equipo de manera remota nosotros necesitamos conocer la direccin MAC de la tarjeta de red, este es un nmero complejo que hace que los humanos no podamos recordar con facilidad. Nosotros podemos recordar por ejemplo el nombre del PC que queremos arrancar pero no su direccin MAC. Para evitar tener la direccin MAC de las tarjetas de red de nuestros equipos anotadas en un
julio punto rios punto 2006 arroba gmail punto com Pg. 1 de 7

Encendiendo equipos de manera remota

Julio Ros

documentos de texto yo he usado un software libre para inventariar los equipos que se llama OCS, donde se puede encontrar informacin de este software en el siguiente enlace http://www.ocsinventory-ng.org/en/ Este software entre otras muchas cosas recolecta este dato y asocia los datos que nosotros necesitamos que son el nombre del PC (que solemos recordar) y la direccin MAC. Este dato este software lo guarda en una base de datos de MYSQL. Por defecto los parmetros para la conexin a esta base de datos son: Direccin IP o Nombre del servidor Usuario: ocs Contrasea: ocs Base de datos: ocsweb La consulta SQL que asociar la direccin MAC al nombre de la computadora es la siguiente: SELECT distinct macaddr FROM networks n where status = 'Up' and deviceid like '[Nombre del Equipo]%' order by deviceid desc LIMIT 0,1000 As pues la solucin consiste en utilizar un programa para arrancar el equipo y poder pasar pasarle como parmetro la direccin MAC

Solucin entorno Windows


Lo que se necesita para poder ejecutar este programa es que la mquina que intentar despertar mquinas remotas necesita lo siguiente: MySQL ODBC conector 5.1 (http://dev.mysql.com/downloads/connector/odbc/) Programa WOL (http://www.gammadyne.com/cmdline.htm#wol) Script para arrancar el programa El cdigo script es el siguiente: ''''''''''''''''''''''''''''' ' Arrancar los equipos de una oficna intentado encontrar la mac usando la base de datos ocs de MySQL ' Es necesario tener instalado el odbc de Mysql ' http://www.gammadyne.com/cmdline.htm#wol Programa para arrancar equipos ' http://dev.mysql.com/downloads/connector/odbc/ conector odbc para windows Const ForReading = 1 Function CadenaConexion ' Para poder acceder a la base de datos Const Aux = "Driver={MySQL ODBC 5.1 Driver};Server=servidor;Port=3306;Database=ocsweb;User=ocs; Password=ocs;Option=3;" CadenaConexion = Aux End Function Function TrataComillas (Cadena) TrataComillas = Replace (Cadena, "'", "''") End Function 'Funcin: Ejecuta una transaccin SQL en la base de datos Sub Ejecuta_Transaccion (SQLStr)
julio punto rios punto 2006 arroba gmail punto com Pg. 2 de 7

Encendiendo equipos de manera remota

Julio Ros

Dim Conn, Rs Set Conn = CreateObject("ADODB.Connection") Conn.Open CadenaConexion Set Rs = CreateObject("ADODB.Recordset") On Error Resume Next Rs.Open SQLstr, Conn Conn.Close Set Rs = Nothing Set Conn = Nothing End Sub Function QuitarCaracter (Cadena) ' Quitar el caracter : de la cadena QuitarCaracter = Replace (Cadena, ":", "") End Function Sub ArrancarEquipo (NombrePC) Dim objShell, Aux Aux = "%comspec% /c wol " & NombrePC On Error Resume Next Set objShell = CreateObject("Wscript.Shell") objShell.Run Aux, , true End Sub Sub Main() Dim CadenaSQL Dim Conn, Rs Dim Aux, NombreEquipo NombreEquipo = InputBox("Introduce el nombre del equipo que quieres encender", "Nombre del Equipo a encender") If NombreEquipo <> "" Then CadenaSQL = "SELECT distinct macaddr FROM networks n where status = 'Up' and deviceid like '" & NombreEquipo & "%' order by deviceid desc LIMIT 0,1000" Set Conn = CreateObject("ADODB.Connection") Conn.Open CadenaConexion Set Rs = CreateObject("ADODB.Recordset") On Error Resume Next Rs.Open CadenaSQL, Conn While Not Rs.EOF Wscript.Echo "Intentando arrancar el equipo " & NombreEquipo & " usando: " & QuitarCaracter(Rs("macaddr")) Call ArrancarEquipo (QuitarCaracter(Rs("macaddr"))) Rs.MoveNext
julio punto rios punto 2006 arroba gmail punto com Pg. 3 de 7

Encendiendo equipos de manera remota

Julio Ros

Wend Conn.Close Set Rs = Nothing Set Conn = Nothing End If End Sub Call Main() '''''''''''''''''''''''''''''

julio punto rios punto 2006 arroba gmail punto com

Pg. 4 de 7

Encendiendo equipos de manera remota

Julio Ros

Se debe generar un fichero vbs tal y ponerlo en una carpeta junto el fichero wol.exe tal y como acompaa el siguiente grfico

Para ejecutar el script basta hacer doble clic sobre el icono EncenderPC t luego poner el nombre del PC a encender

Solucin entorno GNU/Linux


Adjunto un script que hace lo mismo ###################### #!/bin/bash # Autor : Julio Ros 20110711 # Idea de acceso a MySQL basado de http://epistemomaniaticos.blogspot.com/2011/04/consultando-mysql-desde-bash.html # Script para ver la direccin MAC de un equipo registrados mediante inventario OCS Base de datos de MySql # http://www.ocsinventory-ng.org/en/ # Este script necesita lo siguiente: # Acceso a mysql desde la consola # el paquete zenity para hacer ms mono la intraduccin de datos (http://library.gnome.org/users/zenity/stable/index.html.es) # el paquete notify-send para hacer ms mono la salida de datos
julio punto rios punto 2006 arroba gmail punto com Pg. 5 de 7

Encendiendo equipos de manera remota

Julio Ros

http://www.userlinux.net/1393_notify_send.html # el paquete wakeonlan http://packages.debian.org/squeeze/all/wakeonlan/download # Configuracion base de datos DbUser=ocs DbHost=servidor DbPass=ocs DbName=ocsweb # Variables necesarias Equipo=$(zenity --entry --title="Nombre de la computadora a encender" --text="Escribe el nombre del PC que quieres encender") RES=`echo "SELECT distinct macaddr FROM networks n where status = 'Up' and deviceid like '$Equipo%' order by deviceid desc LIMIT 0,1000" | mysql -N -B -u $DbUser --host $DbHost -p$DbPass $DbName` # Ejecuto la consulta y la guardo en RES OLDIFS="$IFS" # Respaldo el valor de IFS, no olvidar las comillas dobles IFS=$'\n' # Seteo el valor de IFS que me sirve for row in $RES ; # Itero por los registros porque for separar por \n do if [ ${#row} -gt 0 ]; then # Chequeo si tengo un registro INNERIFS="$IFS" # Hago un respaldo temporal de IFS, no olvidar las comillas dobles IFS="$OLDIFS" # Ahora separar los campos id=$(echo $row | awk '{print $1}') # Utilizo awk porque s el orden de los campos: id es el 1 y nombre es el 2 # nombre=$(echo $row | awk '{print $2}') # echo "El id es $id y el nombre es $nombre" echo "Encendiendo el equipo $Equipo a travs de $id" notify-send -i /usr/share/icons/Nuvola/scalable/actions/dialog-ok.svg "Encendiendo el equipo $Equipo a travs de $id" wakeonlan $id IFS="$INNERIFS" # Vuelvo a hacer que IFS separe por \n para la prxima iteracin fi done IFS="$OLDIFS" # Dejo IFS en su estado original. ###################### Observar que yo uso notify-send y un conjunto de icono llamado Nuvola. Se deber cambiar esto si se quiere que funcione la notificacin en el escritorio. Generar un fichero con este cdigo y luego ejecutarlo bien con un lanzador o desde la consola

julio punto rios punto 2006 arroba gmail punto com

Pg. 6 de 7

Encendiendo equipos de manera remota

Julio Ros

Advertencia
Como el cdigo est dentro de un documento de texto al hacer el script ya sea en entornos windows como en GNU/Linux tomar la precaucin de que al copiar y pegar al editor de textos esto se hace correctamente porque sino el script no funcionar.

julio punto rios punto 2006 arroba gmail punto com

Pg. 7 de 7

También podría gustarte