Le Blog de C-quad

Mais quel est donc le nom de cette application GNOME ?

Qui n’a pas déjà eu besoin de connaitre le nom qui se cache derrière une application lancée sous Gnome ?

Bien souvent la section « A propos » ou le titre de la fenêtre peuvent aider, mais parfois c’est plus délicat.

Voici un petit exemple :

baobabLe titre de l’application associée à cette icône, c’est « Analyseur d’utilisation des disques ».

Si je veux pouvoir l’installer sur un autre poste, il est préférable de connaitre son « vrai » nom plutôt que le titre.

 

Installée par défaut sur Fedora la commande xwininfo retourne beaucoup d’informations concernant la fenêtre sur laquelle on clique après avoir lancé la commande.

Parmi ces nombreuses informations, une nous intéresse plus particulièrement : le PID. C’est grâce à celui-ci que l’on va retrouver le nom du processus qui tourne derrière la fenêtre en question.
La commande étant un peu longue à écrire et difficile à retenir aussi par la même occasion, nous allons définir un alias

alias quelnom='ps --no-header -o comm -p $(xwininfo -all | grep "Process id:" | cut -d":" -f2 | cut -d" " -f2)'

il suffit ensuite de lancer notre alias, de cliquer sur la fenêtre en question, et on sait le nom du processsus associé :

$ quelnom
baobab

Grâce à cet exemple nous savons maintenant que l’analyseur d’utilisation des disques correspond à l’application baobab.
 

Installer via le réseau – boot PXE

J’installe depuis un bout de temps, mes ordinateurs en passant par le réseau. Jusqu’à présent je me référais en cas de doute à la documentation Fedora pour configurer le serveur hébergeant les images.

Cela fonctionnait très bien jusqu’à ce que je décide de migrer mon serveur vers CentOS 6. Et oui system-config-netboot n’est plus disponible sur CentOS 6.

Nous allons voir ici comment se passer de cet utilitaire. Plutôt que de détailler uniquement la configuration du netboot, et d’avoir à aller lire le reste sur d’autres sites, je détaille ici la procédure complète.

Préparation – Installation des logiciels nécessaires

Afin de pouvoir effectuer une installation grâce au réseau, il est nécessaire d’avoir quelques logiciels sur le serveur :

  • Un serveur DHCP : qui va attribuer une adresse IP au PC qui démarre et l’envoyer vers le boot PXE.
  • Un serveur TFTP : qui va héberger la partie nécessaire au boot
  • Un serveur HTTP : qui va héberger les ISO d’install. Ceci étant optionnel, il est tout à fait possible d’utiliser un répertoire NFS ou autre.

Nous allons donc procéder à l’installation de ces divers services :

# yum install syslinux xinetd tftp-server dhcp

Le service tftp est lancé par xinetd, il est nécessaire de l’activer :

# chkconfig tftp on
# service xinetd restart

Le service dhcp doit pointer vers le serveur hébergeant le boot.
Nous allons donc éditer le fichier /etc/dhcp/dhcpd.conf, Voici en exemple le mien :

 ddns-update-style none;
 ignore client-updates;
 authoritative;
 allow booting;
 allow bootp;
 subnet 192.168.0.0 netmask 255.255.255.0 {
        option routers 192.168.0.254;        # passerelle par défaut
        option subnet-mask 255.255.255.0;    # masque de sous-réseau
        option domain-name "cquad.lan";    # nom de domaine
        option domain-name-servers 212.27.40.241, 212.27.40.240;# serveurs DNS (free)
        range 192.168.0.50 192.168.0.100;    # plage d’adresse
        default-lease-time 21600;        # durée du bail en secondes
        max-lease-time 43200 ;            # durée maxi du bail en sec.
        next-server 192.168.0.5;             # adresse du serveur tftp     
        filename "pxelinux.0";   # fichier a chercher sur le serveur tftp
}

Les informations nous concernant sont les 2 dernières lignes :

        next-server 192.168.0.5;             # adresse du serveur tftp     
        filename "pxelinux.0";   # fichier a chercher sur le serveur tftp

Après avoir modifié cette configuration, il est nécessaire de relancer le service dhcp afin qu’elle soit prise en compte :

service dhcpd restart

Publier les images ISO d’installation

Nous allons créer un point de montage qui correspond à la distribution qui sera installée via PXE et y monter l’image du DVD ou CD :

# mkdir -p /var/pxe/fedora17
# mount -t iso9660 -o loop /home/Ced/Téléchargements/iso/Fedora-17-x86_64-DVD.iso /var/pxe/fedora17

Vous pouvez bien sur monter l’image via /etc/fstab

Il faut indiquer au serveur apache qu’il doit publier ces informations :

Nous créons le fichier suivant /etc/httpd/conf.d/pxeboot.conf :

Alias /fedora17 /var/pxe/fedora17
<Directory /var/pxe/fedora17>
 Options Indexes FollowSymLinks
 Order Deny,Allow
 Deny from all
 Allow from 127.0.0.1 10.0.0.0/24
 </Directory>
Penser à vérifier et recharger la configuration apache :
# apachectl -t
 Syntax OK
# service httpd reload

Configuration du boot

Cette partie était précédemment réalisée par l’utilitaire system-config-netboot. Nous allons désormais le faire manuellement.

A noter que cela n’est pas spécialement une mauvaise chose, cela permet de comprendre le fonctionnement.

Nous allons créer un répertoire qui va contenir le menu de démarrage lors du boot PXE :

# mkdir -p /var/lib/tftpboot/pxelinux.cfg

Nous recopions le fichier pxelinux.0 qui est pointé par la configuration DHCP et le fichier qui permet de gérer le menu:

# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/

Pour chaque distribution à installer, nous allons ajouter un dossier contenant les fichiers nécessaires à son installation :

# mkdir /var/lib/tftpboot/fedora17

Nous y recopions les données nécessaires au boot :

# cp /var/pxe/fedora17/images/pxeboot/vmlinuz /var/lib/tftpboot/fedora17/
# cp /var/pxe/fedora17/images/pxeboot/initrd.img /var/lib/tftpboot/fedora17/

Il nous reste à définir les options du boot dans le fichier /var/lib/tftpboot/pxelinux.cfg/default

# create new

timeout 100
default menu.c32

menu title ########## PXE Boot Menu ##########
label 1
   menu label ^1) Install Fedora 17
   kernel fedora17/vmlinuz
   append initrd=fedora17/initrd.img method=http://192.168.0.5/fedora17 devfs=nomount

label 2
   menu label ^2) Boot from local drive
   localboot

Attention, Il est nécessaire d’ouvrir le port 69 en UDP afin que le serveur TFTP soit accessible

Il ne vous reste plus qu’a démarrer le PC à installer en lui demandant dans le BIOS de démarrer sur la carte réseau.

Régler la luminosité d’écran avec les touches Fn

Je dispose d’un ordinateur portable Acer Aspire V3-571G qui fonctionne sous Fedora 17.  Tout fonctionne bien sous Linux, mis à part la gestion de la carte graphique (Nvidia Optimus), dont j’ai désactivé dans le BIOS la partie Nvidia pour n’en garder que la carte Intel peu consommatrice en ressource.

Néanmoins, le réglage de la luminosité (qui fonctionnait bien auparavant) nécessite maintenant de modifier quelques options au démarrage :

Ajouter dans le fichier  /etc/default/grub à la ligne commençant par « GRUB_CMDLINE_KERNEL » :

acpi_osi=Linux acpi_backlight=vendor

Créer une nouvelle configuration basée sur le système en cours d’exécution et ce qui se trouve dans /boot ainsi que ce qui est défini dans /etc/default/grub avec la commande :

grub2-mkconfig -o /boot/grub2/grub.cfg

Redemarrer pour prendre en compte les modifications.

Shell – Opérateur sur les variables

Aujourd’hui, je vais vous parler des opérateurs sur les variables shell. C’est loin d’être une nouveauté, ces opérateurs existent depuis le début du shell, mais je me rends compte que les opérations possibles directement dans les variables restent plutôt méconnues.

Une variable shell accepte deux écritures, soit $VARIABLE ou ${VARIABLE} jusque la c’est quasi connu de tous. Mais pourquoi donc y a t’il deux écritures ?

L’une des raisons c’est qu’il est possible de réaliser des opérations sur la variable grâce à la deuxième écriture, alors que cela ne l’est pas avec la première.

Prenons un exemple :

$ VARIABLE=/home/Ced/essai_Ced.txt

Comme $# retourne le nombre de paramètre reçus par un programme ${#VARIABLE} retourne le nombre de caractères de la VARIABLE soit sa longueur.

$ echo ${#VARIABLE}
23

Il est possible d’appliquer une opérande sur la variable:

Pour retirer des éléments en partant de la gauche (le début) :
C’est à dire que si l’on écrit ${VARIABLE#<pattern>} , on retire en partant de la gauche le premier pattern correspondant dans la variable.

exemple :

$  echo ${VARIABLE#*Ced}
/essai_Ced.txt

Et si l’on désire retirer le plus grand pattern correspondant, il faut doubler le #,  c’est à dire ${VARIABLE##<pattern>}

exemple :

$ echo ${VARIABLE##*Ced}
.txt

Pour retirer des éléments en partant de la droite (la fin):

C’est à dire que si l’on écrit ${VARIABLE%<pattern>}, on retire en partant de la fin le permier pattern correspondant.

exemple :

$ echo ${VARIABLE%Ced*}
/home/Ced/essai_

Et si l’on désire retirer le plus grand pattern correspondant, il faut doubler le %, c’est a dire ${VARIABLE%%<pattern>}

exemple :

$ echo ${VARIABLE%%Ced*}
/home/

PS : Cet article a aussi pour vocation de me servir comme mémo, étant donné qu’une recherche de ## ou de %% n’est pas des plus aisées dans les moteurs de recherche.

Récupérer la téléinformation avec un Arduino (suite)

Je vous avais parlé, il y a déjà un bout de temps de la méthode afin de récupérer la trame téléinformation EDF à partir d’un arduino. Le défaut de cette méthode, c’est que la trame est « brute ». Je trouvais dommage de ne pas la décoder directement au niveau de l’arduino et n’envoyer que les informations utiles.

Je me suis donc attelé à cette tâche.

Décodage de la trame téléinformation via arduino

Pour rappel, la trame « brute » ressemble à ceci :

ADCO 02092xxxxxx @
OPTARIF HC.. <
ISOUSC 45 ?
HCHC 010956910 %
HCHP 016779643 >
PTEC HP..
IINST 021 Z
IMAX 047 J
PAPP 04860 3
HHPHC A ,
MOTDETAT 000000 B

Le premier fichier (ar_teleinfo)  permet de récupérer et décoder la trame de téléinformation.
Une trame commence par le caractère 0x02 et se termine par le caractère 0x03. Celle ci est composée de groupes.Un groupe commence par 0x0A et se termine par un retour chariot 0x0D.

Une fois qu’on est arrivé au niveau des groupes nous allons pouvoir récupérer les informations intéressantes.

Un groupe est composé :

  • d’une étiquette
  • un espace 0x20
  • une valeur
  • un espace 0x20
  • un caractère de checksum

Il nous reste donc à traiter les chaines de caractères comprises entre les espaces. Le checksum va nous permettre de vérifier que les valeurs récupérées correspondent bien à ce qui nous a été envoyé.

Le deuxième fichier (xpl_teleinfo) sert a envoyé une trame xpl contenant les informations qui ont été décodées précédemment.

Le troisième fichier (time) va permettre d’envoyer le messge xpl-stat et hbeat régulièrement.

Pour votre installation, il est nécessaire de modifier les constantes en début de programme (ar_teleinfo) afin de spécifier notamment l’adresse ip de l’arduino, ainsi que l’intervalle désiré d’envoi de trames xpl.

Récupérer la téléinformation sous domogik

Maintenant que nous décodons et envoyons les trames téléinformation via xpl, nous pouvons nous atteler à les récupérer sous domogik.

Pré-requis: disposer au minimum de la version 0.20alpha1 de domogik.

La version 0.20 de domogik apporte une fonctionnalité très interessante pour la gestion des plugins et external, c’est que ceux ci sont gérés indépendament de domogik et s’installent sous forme de package à partir des repositories de domogik.
J’ai donc réalisé un package pour domogik pour la téléinformation via arduino.

Afin de l’installer, il suffit donc d’avoir domogik en version 0.20alpaha d’installée (en mode install et non develop) et de parcourir les plugins disponibles et de choisir ar_tinfo :

Ensuite afin de pouvoir visualiser les données, il est nécessaire d’ajouter un device :

Une fois le device affecté à un espace de visualisation, vous pouvez donc consulter les informations de téléinformation.

On retrouve un historique précis des consommations électriques :