J’utilise pour presque tous les travaux de bureau, mon ordinateur portable, mais parfois, j’ai besoin d’un peu plus de puissance, ou j’ai besoin d’utiliser une application Windows, donc je vais démarrer la vieille bête; Une plate-forme de jeu transformée en station de travail sans tête.
Mais, le poste de travail est dans une autre pièce, j’ai donc implémenté un alias pour reveille à distance dans mon .zshrc
comme alias upwin=wakeonlan 12:34:aa:bb:cc:56
et c’est bien, mais après cela, je dois attendre 20 secondes, ouvrir “Microsoft Remote Desktop Connection.app”, puis choisir l’ordinateur dans une liste et double-cliquer dessus pour me connecter.
Pour un paresseux, c’est trop. J’ai donc décidé de faire un script qui enlèvera toute cette pression.
Après quelques recherches, j’ai trouvé un moyen d’ouvrir depuis la ligne de commande la connexion à distance. Pour vous connecter à un ordinateur Windows à partir de la ligne de commande en utilisant l’application Microsoft Remote Desktop-AppStore sur un MacBook ; vous devez d’abord créer la connexion à cet ordinateur, vous y connecter pour voir que tout se passe bien, puis exporter le fichier de connexion. Vous pouvez ensuite utiliser le fichier de connexion dans une fonction comme ceci :
# Deplacez le fichier généré dans un endroit connu
rdpfile="/Users/radu/Documents/Scripturi/megaport.rdp"
openRdp(){
# La commande `open` donnera le chemin du fichier comme argument à l'application.
open /Applications/Microsoft\ Remote\ Desktop.app $rdpfile
}
La fonction openRdp
assure la connexion par ligne de commande mais si l’ordinateur n’est pas en marche elle ne fera rien, en fait.
C’est bien que nous ayons la commande wakeonlan que je vous ai montrée auparavant. Il ne s’agit pas d’un binaire de terminal instalé par défaut, je vous conseille donc d’installer Homebrew, le gestionnaire de paquets basé sur la communauté macOS. Pour installer homebrew :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Ensuite, pour installer wakeonlan
:
brew install wakeonlan
Donc, l’ordinateur est éteint, nous appelons wakeonlan
puis la fonction openRdp ?
#!/bin/bash
macadd=12:34:aa:bb:cc:56
wakeonlan $macadd
openRdp
Cela ne fonctionne pas, l’ordinateur met du temps à se réveiller, environ 15 secondes j’ai observé. Une nouvelle fonction est née, qui ajoutera une minuterie.
wakeMegaport(){
wakeonlan $macadd
secs=15
while [ $secs -gt 0 ]; do
printf "\r%02d Time to start : $((secs%60)) seconds"
sleep 1
secs=$(( secs - 1 ))
done
openRdp
}
Ok, donc si l’ordinateur est éteint on peut le réveiller puis on peut se connecter. Mais comment savoir si c’est éteint ? J’ai trouvé qu’ICMP en ipv6 fonctionne un peu mieux, j’utilise donc ping6 pour tester la connexion.
ipadd='2a01:e0a:366:da10:1493:beef:cafe:91f6%en0'
# La terminaison sur l'IP est l'interface sur laquelle l'ordinateur doit effectuer les requêtes.
ping6 -c 1 $ipadd
# Testez s'il est activé, s'il est activé, appelez la fonction openRdp, sinon la fonction de réveil.
if [ $? == 0 ]; then
openRdp
else
wakeMegaport
fi
Je pense que nous savons tous que les ordinateurs sous Windows sont un peu imprévisibles, donc pour être sûr que le script n’essaiera pas une seule fois de réveiller l’ordinateur et de supposer qu’il est réveillé, j’appellerai la fonction de manière récursive. Jusqu’à ce qu’il ait un résultat de ping positif.
#!/bin/bash
rdpfile="/Users/radu/Documents/Scripturi/megaport.rdp"
macadd=12:34:aa:bb:cc:56
ipadd='2a01:e0a:366:da10:1493:beef:cafe:91f6%en0'
openRdp(){
open /Applications/Microsoft\ Remote\ Desktop.app $rdpfile
}
wakeMegaport(){
wakeonlan $macadd
secs=15
while [ $secs -gt 0 ]; do
printf "\r%02d Time to start : $((secs%60)) seconds"
sleep 1
secs=$(( secs - 1 ))
done
startConnexion
}
# En en faisant une fonction, je peux l'appeler à partir de la fonction de réveil
# et s'il échoue au test ping, il réessayera de réveiller l'ordinateur.
startConnexion(){
ping6 -c 1 $ipadd
if [ $? == 0 ]; then
openRdp
else
wakeMegaport
fi
exit
}
startConnexion
Maintenant, tout va bien, mais cela signifie que j’ai un script et que j’ai besoin d’ouvrir le terminal et de me souvenir de la commande ou de la fonction, trop dur, pourquoi ne pas l’ajouter en tant qu’application ?
Un moyen simple de le faire est grâce à Automator.app
.
Alors dernière étape, après avoir ouvert l’application, choisissez nouveau document puis application :
Ensuite, dans la petite boîte de recherche de variables, recherchez le script shell:
Double-cliquez dessus et dans la nouvelle case à droite supprimez tout à l’intérieur et écrivez :
open /System/Applications/Utilities/Terminal.app /Users/radu/Documents/Scripturi/auto-rdp.sh
Le open /System/Applications/Utilities/Terminal.app
est la commande et le reste est le chemin où se trouve votre script. Vous pouvez copier le chemin en ouvrant Finder
en allant dans le dossier où se trouve votre script, cliquez sur votre script et choisissez de copier en tant que chemin:
Essayez votre application en appuyant sur run/executer
. Cliquez ensuite sur le titre changez son nom et enregistrez votre application dans le dossier Application.
Le temps de démarrage dépend de votre matériel et les temps définies dans votre minuterie.Le premier ping sans réponse prend aussi beaucoup de temps. Je n’ai pas encore trouvé la zone goldylock.
Ça y est, le script est fait, si vous avez des améliorations, partagez-les dans la section des commentaires.