Main menu:

Site search

Categories

septembre 2025
L M M J V S D
1234567
891011121314
15161718192021
22232425262728
2930  

Archive

Manipuler les fichiers pdf

Il existe un toolkit, c’est à dire une boîte à outils, qui permet de manipuler facilement les fichiers pdf. Quand je dis manipuler, je pense fusionner des fichiers, splitter un fichier pour obtenir un pdf par page, crypter et décrypter un fichier pdf ou encore ajouter une watermark à chaque page d’un pdf. Il s’agit d’une liste non exhaustive. Il y a encore bien d’autres possibilités.

Ce programme s’appelle pdftk et s’installe très facilement d’un simple:

$ sudo aptitude install pdftk

Le programme plus ses librairies est toutefois assez volumineux mais vite indispensable lorsqu’on travaille beaucoup avec des fichiers pdf.

Je vous renvoie au site de pdftk pour la documentation et des exemples d’utilisation.

Monsieur Patate

Pour tous ceux qui veulent installer Mr. Patate pour leurs enfants et pour que la prochaine fois, je me souvienne du nom du paquet à installer:

$ sudo aptitude install ktuberling

Bug: VirtualBox et changement de kernel

Je n’avais plus utilisé VirtualBox 1.6.0 depuis un bon bout de temps. En fait, je ne l’avais plus utilisé depuis la dernière mise à jour du kernel dans Hardy et le passage au kernel 2.6.24-19. Résultat, VirtualBox refuse de lancer l’installation de ma nouvelle machine virtuelle. Moi qui voulais tester Intrepid alpha 6
La solution est simple. Lorsque le kernel change, il faut effectivement recompiler le module du noyau. C’est bien expliquer dans la doc. Ceci se fait en lançant:

$ sudo /etc/init.d/vboxdrv setup

Ce que je fais. Mais, comme on peut le voir, la recompilation échoue:

$ sudo /etc/init.d/vboxdrv setup
[sudo] password for michel: 
 * Stopping VirtualBox kernel module                                             *  done.
 * Recompiling VirtualBox kernel module                                         
 * Look at /var/log/vbox-install.log to find out what went wrong

Je vais alors voir dans le fichier /var/log/vbox-install.log, comme m’y invite VirtualBox et j’y trouve:

$ tail /var/log/vbox-install.log
/etc/init.d/vboxdrv: 311: /usr/lib/virtualbox/src/build_in_tmp: not found

Si ceci a du sens pour vous, expliquez-moi! Le répertoire /usr/lib/virtualbox/src n’existe pas. Ce doit être la cause de l’erreur. Il manque des sources.
Je fais une petite recherche sur Google et là, j’apprends qu’il s’agit d’un bug mais qu’il suffit de supprimer le fichier /etc/vbox/vbox.cfg et de relancer la procédure de setup:

$ sudo rm /etc/vbox/vbox.cfg
$ sudo /etc/init.d/vboxdrv setup

Et effectivement, tout se passe bien et je peux enfin tester Intrepid ibex dont je vous reparlerai bientôt.
Par contre, je n’ai pas bien compris pourquoi il fallait deleter le fichier de config mais en tout cas, ça marche.

Ecrire ses propres scripts Nautilus

Il est possible dans le gestionnaire de fichiers Nautilus de créer des scripts qui pourront être lancés via le menu Fichier/Scripts ou via le menu contextuel apparaissant lors d’un clic droit sur un fichier.
A quoi peuvent bien servir ces scripts?
A exécuter des tâches répétitives. Par exemple si vous devez toujours redimensionner des images avec les mêmes caractéristiques, il peut être intéressant de créer un script.
Ou bien pour effectuer une tâche que Nautilus ne permet pas. Par exemple afficher une image en fond d’écran directement sans passer par l’outil Préférences de l’apparence dans la configuration de Gnome.

L’élément Scripts du menu Fichier ou du menu contextuel n’apparaît que si vous avez placé un script (fichier) exécutable dans le répertoire ~/.gnome2/nautilus-scripts. Ne vous étonnez donc pas si dans votre Nautilus, il n’y a pas (encore) de menu Scripts qui apparaisse. Les scripts peuvent être écrits dans le language que vous désirez. Dans l’exemple ci-dessous, je vous donnerai une version du script écrite avec bash et une version écrite avec python .
Le nom du fichier script est le nom qui apparaît dans le menu Scripts. Donnez donc un nom significatif à vos scripts.

Voici comment procéder pour créer un script qui va afficher une image en fond d’écran (wallpaper).

Créer dans le répertoire ~/.gnome2/nautilus-scripts, un fichier appelé fond’écran. Ouvrez ce fichier avec gedit par exemple et copiez le code ci-dessous dans votre fichier:

#!/bin/sh

arg=$(printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"  | sed '2,$d' )
gconftool-2 --set --type string  /desktop/gnome/background/picture_filename "$arg"
gconftool-2 --set --type string /desktop/gnome/background/picture_options "scaled"

La première ligne indique qu’il s’agit d’un script shell. Ensuite, on récupère dans la variable arg le nom du fichier passé en argument par Nautilus. Lorsque vous sélectionnez un fichier ou plusieurs dans Nautilus, ce dernier les passent au script via la variable d’environnement NAUTILUS_SCRIPT_SELECTED_FILE_PATHS qui contient tous les noms de fichiers sélectionnés, séparés par des ‘\n’ (newline). Autrement dit chaque ligne est un nom de fichier. D’autres paramètres sont transmis aux scripts par des variables d’environnement dont nous n’avons pas besoin ici.
La commande sed ‘2,$d’ permet de ne prendre que le premier fichier si plusieurs ont été sélectionnés.
Ensuite, gconftool-2 écrit dans les fichiers de configuration de Gnome, le nom du fichier choisi comme fond d’écran et choisit le mode d’affichage ‘scaled’.
Sauvez ce fichier et rendez-le exécutable:

$ chmod o+x le_nom_du_fichier

Vous pouvez le faire aussi directement dans Nautilus via les propriétés du fichier.

Le même script écrit en python pour ceux qui préfèrent ce langage:

#!/usr/bin/env python

import os

file = os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'].splitlines()[0]
os.system('gconftool-2 --set --type string  /desktop/gnome/background/picture_filename ' + '"'+ file +'"')
os.system('gconftool-2 --set --type string /desktop/gnome/background/picture_options "scaled" ')

A nouveau, n’oubliez pas de rendre votre script exécutable sinon il n’apparaîtra pas dans le meu Scripts.

Notez que rien ne vous empêche de créer dans vos scripts des boîtes de dialogue que vous auriez créées avec glade pour python ou en utilisant zenity pour vos scripts shell. De même, les scripts peuvent être écrits avec n’importe quel langage.
Je vous renvoie à la page d’ubuntu-fr concernant les scripts nautilus pour plus d’infos sur le sujet et bien sûr à la documentation de Gnome.

Enregistrer un screencast avec VLC

Tout d’abord, je tiens à préciser que si la possibilité d’enregistrer son bureau existe dans VLC, je vous conseille fortement d’utiliser un autre outil que VLC. Faire un screencast avec VLC est possible mais complètement buggé. Donc, c’est seulement à titre anecdotique et juste pour montrer combien VLC est un programme formidable que j’en parle ici. Si les erreur de segmentation ne vous font pas peur, si vous voulez expérimenter ou si vous voulez juste voir si je ne vous raconte pas de conneries, voilà comment procéder.

Lancer VLC à partir d’un terminal en tapant:

$ vlc screen://

Ouvrez le menu Fichier/Assistant de diffusion… Choisissez Transcoder/Sauvegarder et cliquez sur Next >.
Dans la fenêtre qui s’ouvre alors, sélectionnez Elément de la liste de lecture et cliquez sur Choisir. Dans la liste choisissez screen:// et cliquez sur Next >.
Dans la fenêtre suivante, choisissez le type de transcodage que vous désirez pour la vidéo et l’audio. Cliquez sur Next >.
Sélectionnez l’encapsulation désirée et cliquez à nouveau sur Next >.
Donnez un nom de fichier et cliquez sur Finish.
Ouf!
A partir de maintenant, VLC est en mode screencast et enregistre votre bureau…si vous avez de la chance et que le programme ne s’est pas planté entretemps.

Bon, ok, c’est pas du tout utilisable. Quand ça marche, le résultat n’est même pas à la hauteur. C’est bien ce que je disais au début de cet article mais bon, peut-être que cela aura été amélioré dans la nouvelle version qui vient de sortir, la 0.9.2. Et en tout cas, cela a le mérite d’exister.

C++ – Comprendre les structures

Bien souvent, on me demande d’expiquer la notation des structures telles que celle utilisées dans l’API Windows. Je sais, cela n’a rien à voir avec Linux sauf que Microsoft ayant tendance a rendre son code illisible parfois (ou disons plus compliqué pour le débutant), je vais tenter d’expliquer cette construction même si on d’éloigne un peu du C++ (les structures en C n’ayant que peu à voir avec celles du C++). Voici un exemple typique d’une structure en C:

typedef struct type1
{
  int i;
  char *c;
}var1, *var2;

Commençons par simplifier cette structure afin d’y voir plus clair:

struct type1
{
  int i;
  char *c;
};

Ceci définit une structure de type type1 contenant un entier i et un pointeur vers un caractère c. Ok, jusque là, c’est assez simple.

struct type1
{
  int i;
  char *c;
}var1;

Cette fois-ci nous avons défini une structure de type type1 et une variable var1 de type type1.

Si vous mettez le mot-clé typedef devant une variable, vous changez la déclaration de la variable en une déclaration de type. Le nom de ce qui devrait être le nom de la variable devient, à cause du typedef, un nom de type.

typedef int i;

i devient un type équivalent à un int.
Revenons-en à notre problème et voyons en quoi le typedef en modifie le sens.

typedef struct type1
{
  int i;
  char *c;
}var1;

Ceci déclare un type type1 et var1 qui est aussi un type mais équivalent à type1.

struct type1
{
  int i;
  char *c;
}var1, *var2;

Ici, on définit une structure de type type1, une variable de type type1 corespondant à la structure et une variable de type pointeur vers un type type1.
Ajoutons le typedef:

typedef struct type1
{
  int i;
  char *c;
}var1, *var2;

Avec le typedef, on en arrive finalement à notre structure telle que rencontrée fréquemment dans l’API Windows.
Cette structure, précédée de typedef, définit trois types. D’abord un type type1 et un type var1 qui sont équivalents. Ensuite on définit le type var2 comme étant un pointeur vers le type type1. Remarquez qu’on ne définit donc pas de variables mais bien trois types.