Tous les articles par Anthony

Un grub2, un jour, une heure…

Si vous avez un multi-boot utilisant grub2 sur votre machine et que vous souhaitez démarrer automatiquement sous un système d’exploitation suivant l’heure, le jour ou bien le mois de votre choix, ceci est possible. Lors de l’amorçage de grub2 les fichiers de configuration situé dans /etc/grub.d/ sont exécutés dans l’ordre numérique. Le premier fichier 00_header déterminant le système d’exploitation par défaut, on peut court-circuiter sont fonctionnement en créant un petit script 01_date_based_selection par exemple s’exécutant juste à près le premier. Ce petit script aura besoin de connaitre la date actuelle, ce qui peut se faire en utilisant le module datehook qui permet d’avoir accès aux variables entières DAY, HOUR, MINUTE, MONTH, SECOND, YEAR ainsi que qu’à la chaine de caractères WEEKDAY retournant (Monday, Thuesday…). Il nous reste encore à déterminer les entrées présentes dans le menu de grub grâce à la commande :

 

grep -E '^menuentry|^submenu' /boot/grub/grub.cfg | cut -d '"' -f2 | cut -d "'" -f2

qui pourrait nous retourner par exemple :

 

Ubuntu
openSUSE 12.3
Microsoft Windows XP Professionnel (on /dev/sda1)
Windows 7 (loader) (on /dev/sda2)

Notre script final à placer dans /etc/grub.d/ et qui sera bien entendu rendu exécutable pourra ressemble à ce qui suit si par le plus grand des hasard vous donnez des cours sous Windows XP le vendredi matin :

 


#!/bin/sh
cat <<EOF

# This module creates special variables that return the current date/time
insmod datehook

# Add and extra 0 to minutes if it's less than 10 (force a 2-digit minute) 
if [ \$MINUTE -lt 10 ]; then PADDING="0"; else PADDING=""; fi
TIME=\$HOUR\$PADDING\$MINUTE

# Boot "Windows XP" from 07AM to 11:50AM on Friday
if [ \$WEEKDAY == Friday -a \$TIME -ge 0700 -a \$TIME -lt 1150 ]; then
        set default="Microsoft Windows XP Professionnel (on /dev/sda1)"
else
        set default="Ubuntu"
fi
EOF

Nous finirons par mettre à jour grub via la commande sudo update-grub2, afin de mettre à jour le fichier grub.cfg

source

NoteAprès une mise à jour de grub celui-ci à refusé de changer la priorité du boot… la variable
WEEKDAY à été traduite, il faut maintenant tester pour mon cas \$WEEKDAY == vendredi.

Modifier son fond d’écran.bmp sous windows via un script batch

Aujourd’hui nous allons voir comment modifier simplement le fond d’écran du système d’exploitation de la firme de Redmond à l’aide d’un petit script. Pourquoi faire un script me direz vous si on peut passer par un « clic droit sur le Bureau > apparence > choisir son fond d’écran » ou par un «clic droit sur l’image souhaité > définir en tant que papier peint de bureau », je vous répondrai, « parce qu’on peut » ou « juste pour le sport » ou bien « parce que c’est plus rapide pour des taches automatisées ». Bon fini l’introduction, passons à la méthode. Une des première chose que j’ai faite est donc une petite recherche sur un moteur de recherche, il est rapidement tombé que la pierre angulaire de notre script allait être la modification de la clé de registre

HKCU\Control Panel\Desktop\Wallpaper

oui c’est déjà un début, mais très rapidement, on bute sur « Ça marche pas avec un png ou un jpeg, ou même la plupart des images» en fait si on veut que ça fonctionne, il nous faut une image au format bitmap soit avec l’extension .bmp. Un pas de plus vers la solution se profile, mais windows étant ce qu’il est, il est bon de s’armer de patience. Et pour lui dire qu’on a changé quelque chose dans la base de registre il est bon d’insister par la commande

RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True

qui permettra magiquement de faire apparaitre notre nouveau fond d’écran… ou pas. En effet à ce moment là de ma recherche je travaille exclusivement avec des bmp, mais alors que la commande fonctionne sur certains fichiers, d’autres refusent catégoriquement de s’afficher sur mon écran. Ô désespoir ! Heureusement porté par une envie irrésistible de réussir, je tente une méthode passant par un petit peu de code C++, mais là le même problème que précédemment ce pose. Que faire ! Après encore quelques recherches qui termineront cette quête avec succès je l’espère, il s’avère que les bitmaps gérés par windows, ne sont pas à prendre à la légère. En effet, lorsque j’ai dis, à un moment de ma progression, que je travaillait exclusivement avec du bitmap, ces fichiers était en fait des images de mon cru, originellement des png que j’avais converti en bmp… et la clé résidait donc dans cet export. Je vous décris donc les deux paramètres nécessaires lors de l’export fructueux d’un bitmap à l’attention de windows, à l’aide du logiciel très connu Gimp :

– le NON stockage des informations relative à l’espacement de couleurs ?

– le stockage de l’image au format 24 bits.

boite de dialogue des options avancés pour l'export de fichier bitmat sous gimp
boite de dialogue des options avancés pour l’export de fichier bitmap sous gimp

Je vous laisse le soin d’adapter les réglages à votre propre logiciel de dessin, en espérant qu’il n’y ai pas d’autres embûches sur notre chemin.

En résumé pour changer son fond d’écran via un script batch sous windows

1 – Préparer une image bitmap, enregistrée de la bonne manière (24 bits, sans informations d’espacement de couleurs)

2 – Créer un fichier .bat contenant les lignes


reg add "HKCU\Control Panel\Desktop" /v Wallpaper /d "C:\Chemin\de\l\image.bmp" /F
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True

3 – Adapter le script à vos besoins… comme par exemple jouer avec la clé TileWallpaper pour centrer, étirer ou utiliser le mode mosaïque d’affichage à l’écran