Karyl F. Stein mailto:xenon@xenos.net
Même si le monde se dirige vers des interfaces graphiques utilisateurs habiles et l'univers du World Wide Web (WWW), il y a toujours besoin de prévoir pour ceux qui utilisent des terminaux en mode ASCII. Par exemple, beaucoup de Fournisseurs d'Accès offrent un compte shell, et, de plus, nombre de systèmes d'accès publics sont utilisés avec une interface en mode texte. Les systèmes qui offrent des interfaces en mode texte ont souvent des programmes pour automatiser les tâches courantes que l'utilisateur voudrait accomplir, mais l'utilisateur doit encore apprendre à exécuter ces programmes à partir de l'invite de l'interpréteur de commandes (shell). Quelques organisations ont développé des systèmes de menu qui protègent l'utilisateur de la complexité du système sous-jacent. Cependant, ces programmes -- d'ordinaire écrit dans un quelconque langage de script shell -- sont souvent lents, offrent une sécurité minimale, consomment une quantité démesurée de ressources, et peuvent être de maintenance difficile.
Ayant de l'expérience en tant qu'administrateur pour quelques systèmes en accès public, j'ai eu à faire face au double défi de concevoir des interfaces WWW indépendantes du navigateur, mais aussi des interfaces "mode-texte-facile-à-utiliser". Après avoir créé des mélanges de scripts shells lourds et des programmes C rigides pour aborder ce dernier, j'ai décidé que cela rendrait les choses plus faciles pour moi et les autres administrateurs d'avoir une méthode rapide, facile à gérer et hautement configurable pour générer des menus textes. La solution proposée et dont je vais discuter dans cet article est Xenmenu (prononcer zen-menu).
Pendant la conception initiale de Xenmenu, quelques objectifs majeurs ont été abordés. Tout d'abord, une solution qui s'efforçait de rendre les choses faciles ne devrait pas être trop complexe à utiliser ou à administrer. En même temps, cette solution devrait être suffisamment flexible pour permettre aux administrateurs d'adapter le système à leurs exactes spécifications. Ces conditions requises peuvent inclure une politique de sécurité du site, ainsi Xenmenu a besoin d'incorporer des caractéristiques qui lui permettent d'être utilisé comme shell sécurisé. Finalement, Xenmenu devra être aussi concis et rapide que possible.
Les quatres principaux composants de Xenmenu sont le coeur du programme, les fichiers de configuration, les fichiers de description de menus et les fichiers annexes. Le boulot du programme principal est en premier de se configurer lui-même, puis d'entrer dans une boucle de lecture des fichiers de description de menu, de les formatter et de les présenter à l'utilisateur, et de lire les entrées de l'utilisateur. Chacune de ces étapes va maintenant être décrite en détail.
Il y a trois fichiers de configurations qui peuvent ou non exister. Les deux premiers sont similaires aux fichiers de configuration du shell, l'un est général au système et l'autre spécifique à l'utilisateur sur le modèle de /etc/csh.login et /.login. Le fichier de configuration final, qui peut ou non exister, est le fichier de configuration de la sécurité ; Le fichier de configuration de la sécurité peut prévaloir sur toute action précédemment prise par les deux premiers fichiers de configuration. Cela permet aux administrateurs de laisser à l'utilisateur la possibilité de changer leur environnement sans compromettre la sécurité. Bien sûr, l'installateur peut aussi choisir d'empêcher complétement l'utilisateur de créer un fichier de configuration personnalisé si la sécurité est un souci majeur.
Les fichiers de configuration ne comportent que deux types de directives: la configuration des variables d'environnement et l'exécution des programmes. Pour cette raison le langage de configuration est simple. Le format des fichiers de configuration est :
ENVIRONMENT_VARIABLE VALUE
run PROGRAM [ARGUMENT [ARGUMENT ...]]
La première ligne est un exemple de configuration d'une variable d'environnement. Un exemple concret pourrait être : PAGER /usr/bin/more. Cela créerait la variable d'environnement PAGER égale à /usr/bin/more. La seconde ligne est un exemple d'exécution d'un programme externe. Un exemple concret pourrait être : run /bin/cat /etc/motd.
Une fois que l'on a agit sur les fichiers de configuration, un fichier menu est lu et affiché à l'utilisateur. Ces fichiers menu sont la partie la plus importante de Xenmenu du point de vue de l'administrateur puisqu'ils définissent l'apparence et la réactivité vis à vis de l'utilisateur. Puisque la majeure partie du temps d'un administrateur sera consacrée à écrire les fichiers menu, ils sont conçu pour être facile à créer. Du même coup, la flexibilité est un souci majeur.
Les fichiers menu sont des fichiers texte uniquement qui peuvent être modifiés et réinstallés même pendant que les gens utilisent activement Xenmenu. Chaque ligne d'un fichier menu est une commande, un commentaire ou une ligne blanche. Les commandes peuvent avoir zéro ou plus arguments séparés par un ou plusieurs espaces selon la commande. Les commentaires sont insérés en plaçant un # comme premier caractère différent d'un espace sur une ligne et continuent jusqu'à ce qu'une nouvelle ligne soit atteinte. Les lignes vides sont ignorées.
Il y a trois partie principale dans un fichier menu: les options globales, les options d'affichage et de formattage, et les déclarations de choix. Les options globales devraient apparaitre avant que n'importe quelle déclaration de choix soit faite et affectent l'apparance et l'ergonomie d'ensemble. Actuellement, il y a seulement deux options globales : différentiation des majuscules/minuscules (checkcase) ou non (nocheckcase). Si checkcase est défini, les déclarations de choix seront sensibles aux majuscules/minuscules. Cela signifie que si l'utilisateur tape un "Q", il sera pris en compte différemment d'un "q". Le comportement par défaut est le nocheckcase ce qui signifie qu'un utilisateur peut aussi bien entrer un "Q" qu'un "q" et la même action sera exécutée.
La plupart des commandes disponibles dans les fichiers menu concernent les options d'affichage et de formattage. Ces options définissent comment un menu sera dessiné sur l'écran de l'utilisateur et peuvent être données à n'importe quel endroit au sein du fichier menu. Les commandes disponibles et les arguments acceptés, (s'il y a lieu), sont donnés plus bas. Les arguments donnés entre <> sont requis, alors que ceux entre [] sont optionnels. Quelques références sont faites au fichier config.h. Ce fichier fait partie de la distribution Xenmenu et peut être édité avant la compilation lors de l'installation de Xenmenu.
Les déclarations de choix définissent comment les menu doivent réagir aux entrées utilisateur. Un choix peut soit exécuter un programme externe, soit afficher un fichier, soit charger et afficher un autre menu ou sortir du système de menu. Chaque choix peut contenir une valeur, un nom, un commentaire ou une combinaison des trois. Les choix sont définis de la manière suivante :
option {
<definitions>
}
La partie <definitions> peut contenir une ou plusieurs commandes listées ci-dessous. La convention pour les arguments est la même que ci-dessus avec les arguments requis entre <>, et ceux, optionnels, entre []. A nouveau, les références au fichier config.h sont données.
Comme signalé plus haut, Xenmenu peut aussi être utilisé comme shell sécurisé. Lors de la compilation de Xenmenu, l'administrateur peut sélectionner de nombreuses options de sécurité. Zéro (par défaut) ou plus de ces options peuvent être indiquées au moment de la compilation. Les options permettent:
Il est important de prendre en compte que Xenmenu ne peut accorder aucune garantie quant à la sécurité de tous les programmes externes qu'il appelle; si vous permettez à l'utilisateur de lancer le mythique programme toto de Xenmenu, et que toto contient un trou de sécurité, alors l'utilisateur peut être capable d'exploiter cette brèche pour contrer votre politique de sécurité. Cependant, en utilisant Xenmenu comme shell utilisateur en conjonction avec les options de sécurité ci-dessus, un administrateur peut limiter ce qu'un utilisateur peut faire sur un système.
Finalement, il y a quelques petites fonctions que Xenmenu offre qui ne sont pas énumérées ci-dessus. Pour commencer, si l'utilisateur entre quelque chose qui n'est pas une option du menu en cours, ce qu'ils entre est envoyé au shell pour analyse/exécution. Cela permet à l'utilisateur d'entrer des commandes shells valides même si ce n'est pas dans les options du menu. Cela ne permet cependant pas de contourner les paramètres de sécurité. Deuxièmement, l'utilisateur peut redimensionner son écran et le prochain menu chargé s'ajustera de lui-même pour s'intégrer dans la nouvelle taille de l'écran.
J'espère que cet article vous apporte une bonne compréhension de Xenmenu et de ce qu'il peut faire. J'espère aussi que Xenmenu fournit une solution à vos besoins en matière de générateur de menu ASCII, (si vous avez un tel besoin). Actuellement, Xenmenu est toujours en développement, cependant il est activement utilisé de façon intensive sur plus d'un système. Le code source de Xenmenu est livré sous la Licence Publique GNU et peut être trouvé à http://www.xenos.net/~xenon/software/xenmenu. L'auteur accueille toute suggestions, commentaires ou réclamations que vous pourriez avoir via Email à mailto://xenon@xenos.net.
Copyright 1999, Karyl F. Stein - Publié dans le numéro 39 de la Linux Gazette, avril 1999
Adaptation française : Frédéric Gacquer (Neuronnexion)