TD de révision sur l'environnement Unix/X11

La correction !

Questions sur Emacs

Non, je les laisse à Olivier Lecarme ! Juste pour le fun, voici les questions que j'avais posées l'an dernier lors de l'examen. Sauriez-vous y répondre ?
  1. S'assurer que votre fichier .emacs est compatible à la fois avec Emacs et avec XEmacs.
  2. Changez la couleur du fond des fenêtres d'édition d'Emacs ou d'XEmacs (là où se trouvent les textes que vous éditez). Faites en sorte que cette modification soit définitive chaque fois que vous relancez Emacs ou XEmacs. Quel fichier devez-vous modifer ?
  3. Vérifiez qu'à chaque fois que vous lancer Emacs les polices de caractères sont en couleurs. Si ce n'est pas le cas, modifiez votre .emacs en conséquence.
  4. Vérifiez qu'à chaque fois que vous lancez XEmacs, les polices de caractères sont en couleurs. Si ce n'est pas le cas, modifiez votre .emacs en conséquence.
  5. Ouvrez votre fichier .emacs, à l'aide d'une macro, décalez toutes les lignes de cinq caractères sur la droite.
  6. Revenez à l'état initial.
  7. Combien d'occurence du mot "setq" figurent dans le fichier .emacs ? Dans un premier temps, comptez-les à la main. Dans un second temps, à l'aide de la documentation en ligne, recherchez la fonction (non étudiée avec moi) qui permet de compter le nombre d'occurences automatiquement et utilisez-là.
  8. Remplacez tous les "setq" par des "SETQ", sauf la 4ème occurence. Ceci sans effectuer deux fois la séquence de remplacement.
  9. Assurez-vous que vous maîtrisez parfaitement les raccourcis clavier pour effectuer les opérations suivantes :

Questions sur le shell

  1. Q : Quels sont les fichiers lus lors de l'invocation d'un shell ? Dans quel ordre ?

  2. R : les fichiers lus sont les fichiers .zlogin, .zshenv, .zshrc.

  3. Q: Que doit figurer dans chacun de ces fichiers ?

  4. R : dans le .zshenv, le positionnement des variables d'environnement. Dans le .zshrc le positionnement des options du shell, les aliases du shell, dans le .zlogin uniquement les commandes devant être effectuées lorsque on ouvre un shell de login sur une machine.

  5. Commencez à taper la commande "ls /usr/local/bin", ne tapez pas RETURN à la fin.
  6. Q : Vous voulez savoir où se trouve la commande "emacs", comment faites-vous sans utiliser "find" ?

  7. R : on peut taper "which emacs" ou  "whence emacs", qui sont des commandes Unix standard. Ou bien, encore mieux, si on veut passer pour un pro du Zsh, on tape "ls =emacs". Le caractère "=" subsistue le chemin complet de la commande obtenu par une recherche au travers des répertoires du PATH.

  8. Q : Où se trouve réellement le fichier binaire de "emacs" ? Où se trouve installée la distribution d'Emacs ? De XEmacs ?

  9. R : "ls -l =emacs" donne un lien, qui indique l'emplacement réel d'Emacs:

    buffa@clio:~>  ls -l =emacs
    lrwxrwxrwx   1 bin      bin            35 Sep 28 18:26 /usr/local/bin/emacs -> /net/softs/gnu/emacs-20.2/bin/emacs

    Donc visiblement, la distribution d'Emacs se trouve dans /net/softs/gnu/emacs-20.2/
    On pourra faire de même pour Xemacs.
     

  10. Q : Faites "cd ~buffa". Que fait la commande :
  11. for i in m*
    > do
    > cp -r m* /tmp/$i.bak
    > done
    R : Cela copie dans /tmp tous les fichiers présents dans ~buffa et commencent par un "m". Les copies possèdent toutes un suffixe ".bak"
     
  12. Q : Modifiez la commande précédente pour qu'elle affiche en plus les opérations qu'elle est en train de faire lorsqu'elle s'exécute (on fera un echo de la commande).

  13. R : il suffit de rajouter un "echo" bien placé :
    for i in m*
    > do
    > echo cp -r m* /tmp/$i.bak
    > cp -r m* /tmp/$i.bak
    > done
  14. Q : A quoi servent les touches d'édition <ESC-h>, <ESC-q>, <ESC-'> ?

  15. R : <ESC-H> permet d'appeler la page de man de la commande courante. Par exemple :
    > grep <ESC-h>
    ... affichera la page de man de la commande grep.

    <ESC-q> permet alors qu'on est en train de taper une commande, d'interrompre la saisie, do'obtenir un nouveau prompt pour pouvoir taper une autre commande, sitôt cette nouvelle commande exécutée, la ligne précédente qu'on était en train d'éditer, est restaurée et la saisie peut reprendre exactement là où on s'était arreté.

    <ESC-'> permet de transformer une chaîne de caractères contenant des caractères spéciaux en protégeant les caractères posant problème par des \ ou des ''. Exemple : je veux dans un script shell afficher la phrase Je m'appelle "Michel" et j'aime taper des caractères comme \, ', " etc...
    Il me suffit de taper ceci dans une fenêtre shell :

    > Je m'appelle "Michel" et j'aime taper des caractères comme \, ', " etc... <ESC-'>
    ... et celà produit le résultat suivant :
    >  'Je m'\''appelle "Michel" et j'\''aime taper des caractères comme \, '\'', " etc...'

    Maintenant je peux faire :

    > echo 'Je m'\''appelle "Michel" et j'\''aime taper des caractères comme \, '\'', " etc...'

    Celà affiche bien la phrase désirée :

    > Je m'appelle "Michel" et j'aime taper des caractères comme \, ', " etc...
     

  16. Q: Y'a-t-il sous Zsh un mécanisme semblable au undo d'Emacs ?
    R : Oui, ctrl-_ (contrôl-underscore). Ou ctrl-x ctrl-u, comme dans Emacs.
  1. Q: A quoi sert l'option "setopt automenu" ?

  2. R : A valider la complétion automatique des noms de répertoire ou des noms de fichier par appui successif sur la touche <TAB> (voir polycopié Zsh).

Questions sur l'environnement

  1. Q: Quelles sont les variables les plus importantes ? Affichez leur valeur et vérifiez que vous êtes bien capables de m'expliquer pourquoi tel ou tel directory est bien présent dans le PATH, dans les autres variables...

  2. R : Variables les plus importantes : HOME, PATH, LD_LIBRARY_PATH, MANPATH, XAPPLRESDIR, ...
  3. Q : Etes-vous capable de m'expliquer l'organisation des disques des différentes machines de l'étage ? Quelles sont les machine serveurs ? Pourquoi Samoa ne voit-elle pas les mêmes Home directories que les autres machines ?
    R : Il y a des disques locaux sur chacune des machines et des disques partagés se trouvant sur les machines serveurs de fichiers. Ces disques sont "montés" par les machines des salles étudiants et "plaquées" lors du  montage sur certains répertoires. En particulier, le répertoire /usr/local pointe vers des disques qui ne sont pas locaux ! Pour savoir quels disques sont montés par une machine on utilise la commande "mount". Pour voir les disques exportés par une machine, on peut utiliser la commande "showmount -e nom_machine".  Samoa ne voit pas les mêmes Home dir car il s'agit d'un Dec Alpha dont les binaires ne sont pas compatibles avec les Suns. C'est pourquoi sur ces machines vous avez un Home dir différents et ne disposez pas exactement des mêmes programmes d'application aux memes endroits que sur les Suns qui partagent tous le disque où se trouve votre Home Dir.
  4. Q: Faites "cd ~buffa/cours/minfo/motif/pushbutton". Lancez le programme "push" qui se trouve dans ce directory. Pourquoi ne marche-t-il pas ? Quelles commande permet de voir l'ensemble des librairies utilisées par "push" et lesquelles lui manquent ? Que faut-il modifier dans votre environnement pour que vous puissiez exécuter ce programme sachant que la librairie manquante se trouve dans le repertoire "/usr/dt/lib" ?
    R : Ca ne  marche pas car ce programme a été compilé pour utiliser une librairie partagée, la librairie libXm.so et il ne la trouve pas. En faisant "ldd xpaintbrush", on peut voir quelles sont les librairies partagées utilisées par ce programme et avoir la confirmation que la librairie en question est manquante. Le chelin de recherche des librairies partagées est précisé par la variable LD_LIBRARY_PATH. Il devrait, en théorie, suffir de positionner cette variable en incluant le répertoire où se trouve la librairie manquante pour que le programme fonctionne. En faisant :


  5. > export LD_LIBRARY_PATH=/usr/dt/lib:$LD_LIBRARY_PATH.

  6. Q : Etes vous capable d'expliquer ce qu'est "une ressource d'une application". A quoi sert ce puissant mécanisme ? Quels fichiers jouent un rôle dans ce mécanisme et lesquels êtes-vous susceptibles de modifier pour personnaliser vos applications ?
    R : Les applications X-Windows possèdent presque toutes des fichiers de configuration que l'on appelle aussi "fichiers de ressources". Plusieurs fichiers entrent en jeu. Les ressources "système" par défaut se trouvent dans un fichier portant le nom de l'application, avec la première lettre en majuscule ou les deux premières si la première est un "x" (exemple XTerm), ces fichiers sont dans /usr/lib/X11/app-defaults. On peut également spécifier des ressources dans le fichier .Xdefaults, ou mieux, dans un répertoire utilisateur (en général $HOME/.app-defaults) et positionner la variable XAPPLRESDIR sur ce repertoire. Il est alors possible d'avoir ses propres fichiers de ressources, un par application. Inutile de recopier intégralement les fichiers systèmes, il suffit de rajouter les nouvelles ressources que l'on désire positionner ou encore surcharger des ressources déjà positionnées dans les fichiers système. On peut utiliser le programme editres pour positionner et tester interactivement les ressources d'une application (ça ne marche pas avec tous les programmes, ils doivent avoir été compilés avec le support pour editres).

  7. Q: Allez dans /u/profs/buffa/cours/minfo/motif/TPS_RENDUS_1997/pcleriss/xpaintbrush, exécutez le programme xpaintbrush.  Il manque des librairies. Essayez tout de même de le faire fonctionner !
    R : En fait il manque la librairie libXpm.so.4.5, et ce fichier n'existe nulle part. On trouve juste (avec la commande "locate libXpm") les version 4.8 ou 4.9. En fait il suffit de créer chez soi un répertoire $HOME/lib, d'aller dedans et de faire ln -s /usr/lib/libXpm.so.4.9 ./libXpm.4.5, puis de rajouter $HOME/lib dans le LD_LIBRARY_PATH. En effet, il y a de grandes chances pour que la version 4.9 soit compatible avec la 4.5.

  8. Q : Bon, apparemment il fonctionne maintenant. Mais vous avez dû hacker sec ! Pourquoi, à propos, a-t-on rencontré tous ces problèmes ? Quel serait le remède ?
    R : Un des remèdes serait de mettre les liens vers les versions passées dans /usr/lib, pour que la dernière version soient vue aussi comme des anciennes. Si les mises à jour sont bien faites, il suffit de lancer la commande ldconfig en étant root, après avoir installé les nouvelles versions, pour que ces liens soient crées automatiquement.

  9. Q : C'est vrai, il marche ce programme, mais j'ai une fenêtre de taille quasi nulle dans un coin et je ne comprend pas à quoi ce programme sert... Tiens, dans le directory où se trouve l'exécutable, il y a un fichier Xpaintbrush.ad. A quoi peut-il bien servir ? Peut-etre va-t-il m'aider à faire tourner mon application...
    R : Il s'agit du fichier de ressources de l'application. J'ai le choix : soit je le copie dans mon $HOME/.app-defaults et je le renomme XPaintbrush, soit je fais "xrdb -load XPaintbrush.ad" car c'est plus facile pour tester. La commande xrdb lit un fichier de ressources et le stocke dans la mémoire du serveur X.

  10. Q : A quoi sert la commande "xhost" ?
    R : Cette commande sert à autoriser/interdire les machines qui peuvent ouvrir des fenêtres sur le display d'une machine donnée. Ex : xhost + clio.unice.fr autorise des applications tournant sur clio à ouvrir des fenêtres sur le display courant.

  11. Q : A quoi sert la variable DISPLAY ?
    R : Elle sert à indiquer sur quel display les applications vont ouvrir leurs fenêtres graphiques. Ex : DISPLAY=clio.unice.fr:0; xclock, ouvre un xclock sur la machine clio.unice.fr


  12. Q : Que se passe-t-il exactement lorsqu'on lance la commande "startx" ou la commande "xinit"?
    R : startx est un script qui va vérifier si vous possèdez sous votre $HOME des fichiers de configuration pour le serveur X et le window manager. SI ce n'est pas le cas, il va quand  même ouvrir une session avec les fichiers de configuration par défaut tels que les a choisi l'ingénieur système. startx utilise la commande xinit. Cette dernière est la commande qui permet directement de lancer le serveur X. Plusieurs fichiers sont lus, le plus important est le fichier .xinitrc ou .xsession qui sert à indiquer quelles applications je veux activer sitôt que le serveur X tourne. Au moins une des applications lancées ne doit pas rendre la main sinon xinit termine et ferme la session X.

  13. Q : Voici mon fichier ".xinitrc". Comment dois-je faire pour quitter X-Window lorsque je suis sous le window manager ?
  14. sleep 1
    xhost +>/dev/null &
    xpmroot /u/profs/buffa/bitmaps/concrete.xpm &
    fvwm2& > .fvwm-error
    xterm -sb -sl 1024 -rw  -T sun -geometry 80x24+4+68  &
    xterm -sb -sl 1024 -rw  -T sun -geometry 80x24+4+417 &
    exec xterm  -sb -sl 1024 -T sun -geometry 80x7+3+640 -n "Console" -C
    kbd_mode -a
    clear
    R : Je dois taper exit dans le xterm ouvert en dernier, la console (option -C de la commande xterm), puisque c'est la seule qui ne rend pas la main. Lorsque je sors, les commandes kbd_mode -a et clear sont effectuées. kbd_mode sert à débloquer le clavier au cas où... et clear efface l'écran.

Questions sur le window manager

  1. Qu'est-ce qu'un window manager ? Quel est son rôle ? Modifie-t-il le comportement des applications ?
  2. Ou se trouve-t-il sur les disques ? Est-il en local sur le disque de votre machine, ou bien figure-t-il sur un des disques des machines serveur ?
  3. Regardez votre fichier de configuration du window manager et assurez-vous que vous êtes capable de m'expliquer lla plupart des instructions.
  4. Seriez-vous malheureux de changer de window manager ?
  5. Si demain une nouvelle version sort, comment vous-y-prendriez-vous pour l'installer dans votre environnement, sachant que l'ingénieur système est malade ?