XLOCK FRENCH HACKER


INTRODUCTION


Ce document est pour tous ceux qui veulent modifier xlock (more), ajouter de nouveaux modes, debugger , etc...

xlock kesako ?

xlock est une application pour X-windows qui empêche l’accès d’un ou plusieurs écrans. Il peut être envoyé manuellement ou plus communément envoyé automatiquement par un démon après une période d’inactivité. Xlock créé une fenêtre couvrant entièrement l’écran, et capte tous événements prévenant ainsi l’accès extérieur. Quand une touche est pressée alors xlock affiche un message mais aussi le mode dans une icone (MODE_ICONIQUE) et demande votre mot de passe.

Lorsque l’écran est locké ( fermé ), des images, des dessins, ou des animations sont affichées servant de screensaver évitant la dégradation du phosphore.

Xlock fut développé chez Sun Micro System par Pack J Naughton.David Bagley l’a repris et maintenu sous le nom de Xlockmore dans lequel d’innombrable mode ont été ajouté, ainsi que la possibilité d’afficher un mode dans une fenêtre et aussi sur la root window ou d’afficher sequentiellement plusieur mode par l’option random et par l’appuis du bouton du millieu.

Il existe des terminaux X avec plusieur ecrans gere par un seul terminal, alors le même mode s’affichera sur plusieur ecran. On peut toutefois faire des effets, comme une balle passant de lui a l’autre.


ORGANISATION GENERALE

xlock est organiser en deux partie.

  1. le traitement de la ligne de commande, la création de fenêtre(s), le mot de passe, etc ...
  2. les modes: ils peuvent être coder de tel manière qu’il n’y a pas besoin de faire appel à X pour la taille de la fenêtre, les couleurs. Une API est comprise dans xlock pour avoir tout les renseignements en ce qui concerne l’écran. C'est dans cette partie que vous allez pouvoir ajouter d'autres modes.

L’architecture logiciel d’un mode est structuré en 4 sortes de fonctions:

CONVENTION:

Le prototype de ces fonctions est défini dans mode.h et ressemble à:
void typefonction _mode( ModeInfo *mode_info)
La structure mode_info est en lecture seule, et contient l’ensemble des informations sur l’écran. Ne regardez pas les variables globales, n’écrasez pas ce pointeur. Au lieu de faire des requetes pour connaître le numéro de la couleur blanche etc..., il y a des fonctions propres a xlock: utilisez les. Si vous utilisez les informations passe en parametre des fonctions du modes ( voir ci dessus ), votre code sera toujours correcte

Le temps entre chaque appelle de fonctions est en milliseconde.


L’AJOUT D’UN NOUVEAU MODE:

Ajoutons un nouveau mode appelé fadeplot: Pour ce faire il faut d’abords ajouter dans mode.h

« extern ModeHook init_fadeplot;

extern ModeHook draw_fadeplot;

extern ModeHook release_fadeplot;

extern ModeHook refresh_fadeplot; »

les fonctions qui vont être créés.

« extern ModeSpecOpt fadeplot_opts; »

une structure qui ne m’a pas révélé tous ces secrets. mais aussi dans mode.c à coté des autres fonctions , dans ce que j’appelle le tableau des modes:

{"fadeplot", init_fadeplot, draw_fadeplot, release_fadeplot,

refresh_fadeplot, init_fadeplot, NULL, &blank_opts, 17000, 1, 20, 1.0,

"fadeplot", 0, NULL},

On passe ensuite à l’implémentation des fonctions proprement dit dans un fichier que l’on appellera fadeplot.c Il est évident qu’il faudra modifier le Makefile ( Pour cela je vous laisse faire :). Dans ces fonctions, à partir de la structure ModeInfo ( mode.h ) , on va obtenir des informations sur l’écran qui sont indispensables pour la suite.

;
fonction
MI_WIN_WIDTH(mi) et MI_WIN_HEIGHT(mi) vont nous donné la taille de l’écran
Display *display = MI_DISPLAY(mi); délivre le display
MI_SCREEN délivre le screen
Window window = MI_WINDOW(mi)délivre l’identificateur de la fenêtre
GC gc = MI_GC(mi); donne le graphics context courant
MI_DELAY donne le delai (microsec.) entre callbacks
MI_CMAPdonne la table des couleurs
XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi)); Mettre la couleur du tracé en noir
XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi)); Mettre la couleur du tracé en blanc
MI_WIN_IS_ICONIC(mi) permet de savoir si on est passé en phase password.
variable
MI_WIN_IS_MONO l’ecran est monochrome
MI_WIN_IS_INWINDOW le mode s’affiche dans un fenetre reguliere
MI_WIN_IS_INROOTle mode s’affiche sur la root windows
NUMCOLORSDonne le nombre de couleur
Oubliez pas après avoir dessiné l’ensemble de faire Xflush(display), ce qui permettra d’afficher réellement votre graphisme sur l’écran.

La création d’un nouveau mode s’éffectue souvent en récupérant le squelette d’un autre et de le modifier à sa volonté.

N’hésitez pas a à regarder le code des autres modes, c’est souvent trés instructifs.


Perspective:

Dernierement on peut utiliser la librairie mesa (la libraire OpenGL de silicon GNU) dans xlock, quelqu’un a fait le screen-saver pipe de Win NT mais en mieux :).

Je pense qu’il serait interressant de joindre a xlock un langage simple ( genre logo un peu plus evolue).


Reference:

HACKERS.GUIDE qui se trouve dans le repertoire docs ( j’ai essaye de le traduire :)

. X_Window programmation avec les Xt-Intrinsics Douglas A YOUNG MASSON PARIS


Voila j’espere que vous prendrez plaisir a ajouter des nouveaux modes à xlock; c’est une maniere de programmer facilement des graphismes sous X11. Un petit conseil le mainteneur de xlock est un fan de casse tête et compagnie. Bon Xlock.


Retour a la page d'acceuil
David A. Bagleyd, mainteneur du projet

charles vidal ,mode flag, fadeplot, circle

createur de xmxlock et xlock.tcl: GUI launcher de xlockmore.