Tym-Project

From: SUPINFO
To: Tous
Subject: IT

Gérer L'allumage Et La Mise Hors Tension D'une Machine Linux via Un Smartphone Android

Si vous ne le saviez pas, et bien sachez que ma machine “perso” tourne sous Linux (ArchLinux), et que mon smartphone fonctionne sous Android. On est content, non ?
Continuons dans cette voie, avec une photo de mon bureau :

De mieux en mieux, non ? Vous avez certainement remarqué que l’écran de mon portable est fermé, recouvert de figurines et de poussière…
Et donc ? Et donc je ne peux pas l’allumer via le bouton habituel… car cela m’oblige à virer les figurines, soulever l’écran, le refermer avant qu’il ne devienne l’écran principal… bla bla bla… j’ai dû trouver un moyer de gérer l’alimentation de cette machine à distance. Oh, et je vais vous en parler dans cet article du coup !

Allumer une machine sans les mains, le WOL.

J’utilise en fait mon smartphone pour déclencher la mise sous tension de mon ordinateur, à l’aide d’un protocolo relativement connu : le Wake On Lan . Cet outil permet tout simplement d’allumer une machine à travers le réseau, mais sous deux conditions : la cible doit être réliée au réseau via un câble Ethernet et la carte réseau doit supporter le protocole WOL.
Sous Linux, vous pouvez vérifier assez simplement si votre carte Ethernet est compatible WOL avec ethtool (il faudra probablement allez bidouiller dans votre BIOS au préalable) :

[tym@tym-laptop ~]$ sudo ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 2
Transceiver: internal
Auto-negotiation: on
MDI-X: on
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000007 (7)
               drv probe link
Link detected: yes

Ce qui nous inéteresse ici c’est Supports Wake-on: pumbg, qui signifie que la carte supporte le réveil par (man ethtool) :

p   Wake on PHY activity
u   Wake on unicast messages
m   Wake on multicast messages
b   Wake on broadcast messages
g   Wake on MagicPacket™

Le g, soit “MagicPacket” est l’option qui nous intéresse ! Si Wake-on ne contient pas g, vous pouvez utiliser ethtool -s eth0 wol g pour l’activer… à probablement mettre dans un script systemd ou initd pour garder l’option au reboot.

Pour allumer ma machine en WOL depuis Android j’utilise cette application car elle permet de générer des Widgets sur le bureau, mais aussi de sauvegarder la configuration via la synchronisation Google… très pratique car configurer une machine cible requiert de saisir son adresse MAC.

Eteindre une machine sans les mains, la bidouille.

Il existe des applications sur le Play Store pour éteindre votre machine à distance, dans la plupart des cas à travers un client installé sur la cible… je n’ai pas trouvé mon bonheur et donc je me suis lancé dans un bidouille !

Le principe est le suivant : un serveur web est installé sur mon Linux, en appelant une URL spécifique depuis le smartphone on va déclencher un script qui va arrêter la machine. Simple, non ?

Je vous passe les détails sur l’installation du serveur Web… Google est ton ami (enfin il vaut mieux pour toi…), mais voici plutôt la page qui déclenche l’arrêt de la machine (en PHP) :

<?php
echo 'Shutting down...';
file_put_contents('/srv/http/poweroff.now', 'poweroff');
?>

Oui, c’est tout ! Cette page a pour seul rôle la création d’un fichier poweroff.now dans le dossier /srv/http.
La suite du traitement se trouve dans un script bash exécuté par crontab :

*/1 *   *   *   *   /home/tym/scripts/remote_poweroff.sh

poweroff.sh se lance donc toute les minutes, et voici ce qu’il fait :

#!/bin/bash
ACTION=/srv/http/poweroff.now
if [ -e "$ACTION" ]; then
rm $ACTION
/sbin/poweroff
fi

Ce script vérifie l’existence du fichier créé par la page web, le supprime le cas échéant et arrête la machine. Il est bien entendu possible d’améliorer le fonctionnement en proposant d’autre action comme le reboot ou autre, il suffirait de faire évoluer la page Web et le script de traitement…

Comments