# Le manuel de Konsole

Lars Dölle,

    lars.doelle@on-line.de

Version 0.0.1, 06 Jun 1998

Ce document décrit Konsole version 0.8.6. Veuillez noter que ce document est en cours de rédaction.

(Traduction française : Ch. Dioux, février 2000)

## Introduction

Konsole est un émulateur de terminal X pour l'environnement de bureau K.

Dans le contexte d'une interface graphique pour l'utilisateur, le but d'un émulateur de terminal est de fournir un dispositif d'affichage aux applications initialement destinées à fonctionner sur un ordinateur auquel est attaché un terminal en mode caractères.

Pour donner une rapide classification des terminaux X libres, il y en a deux principales sortes : xterm, qui est l'original, écrit un mois ou deux avant X lui-même, et xvt, un clone léger sur lequel sont basés la plupart des autres clones disponibles (notamment eterm). Après une dizaine d'années, Konsole est le premier à être entièrement réécrit. Alors que xterm a été compliqué à l'extrême pendant ce temps (sa documentation (README) commence par les mots "Abandonnez tout espoir, vous qui entrez ici"), Konsole offre un nouveau départ, utilisant les technologies et les conceptions de X les plus modernes.

## Aperçu

Lorsqu'elle est invoquée, Konsole lance l'application cliente (qui, par défaut, est le shell) et affiche ses sorties dans la fenêtre tout en lui transmettant les appuis de touches et les clics de souris.

Ainsi, l'essentiel du comportement de Konsole est véritablement contrôlé par l'application qui fonctionne en son sein. Konsole n'y ajoute que quelques fonctionnalités spéciales. Ces fonctionnalités supplémentaires sont suffisamment habituelles pour que l'essentiel de la description qui va suivre puisse s'appliquer également à tout bon émulateur de terminal.

Tampon d'historique

  Le texte qui sort de l'écran est conservé dans un tampon d'historique afin de pouvoir être consulté plus tard. A l'heure actuelle, au maximum 100 lignes sont conservées. Bien qu'il soit impossible de modifier le texte qui a été stocké dans le tampon, on peut le consulter et le recopier partiellement ou entièrement dans le presse-papier.

Clavier

  Les combinaisons "majuscule-page supérieure", "majuscule-page inférieure", "majuscule-flèche haut" et "majuscule-flèche bas" permettent de faire défiler le contenu du tampon d'historique. Toutes les autres frappes de touches sont transmises à l'application qui fonctionne dans l'émulateur. Notez qu'il peut s'agir de touches mortes.

Souris

  Une souris à trois boutons vous sera nécessaire pour utiliser pleinement le terminal. Les boutons ont différentes fonctions :

  Bouton de gauche

    Un clic sur le bouton de gauche est transmis en tant qu'événement à l'application qui fonctionne dans l'émulateur si elle supporte cette fonction. Si un programme est capable de réagir aux clics de souris, Konsole l'indique en donnant au curseur la forme d'une flèche. Dans le cas contraire, un curseur en forme de barre verticale est affiché.

    Conserver le bouton de gauche enfoncé en déplaçant la souris dans l'écran lorsqu'une application ne gérant pas la souris fonctionne dans le terminal marquera une région du texte. Le texte ainsi marqué sera affiché en vidéo inversée. Dès que le bouton est relâché, le texte marqué est copié dans le presse-papier pour utilisation ultérieure dans Konsole ou dans une autre application.

    Normalement, les caractères "nouvelle ligne" sont insérés à la fin de chaque ligne sélectionnée. C'est habituellement mieux pour copier-coller du code source ou les sorties d'une commande particulière. Pour du texte ordinaire, les sauts de ligne ne sont généralement pas importants. Quelqu'un peut souhaiter que le texte prenne la forme d'une simple suite de caractères qui sera automatiquement reformatée lorsqu'elle sera copiée dans une autre application. Pour sélectionner du texte de cette manière, enfoncez la touche "contrôle" tout en sélectionnant normalement.

    Dès que le bord supérieur ou inférieur de la zone de texte est atteint, Konsole le fait défiler vers le haut ou vers le bas, affichant ainsi le cas échéant le contenu du tampon d'historique. Le défilement cesse dès que vous cessez de déplacer la souris.

    Dès que vous relâchez la souris, Konsole essaye de maintenir la sélection visible en la conservant en vidéo inversée. La zone ainsi marquée revient à un affichage normal dès que le contenu du presse-papier change, que le texte dans la zone marquée est modifié ou que vous cliquez sur le bouton gauche.

    Pour marquer du texte dans une application qui gère les événements de souris, il faut presser la touche "majuscule" pendant qu'on clique.

  Bouton central

    Appuyer sur le bouton du milieu copie le texte présent dans le presse-papier. Ceci fonctionnera exactement comme si le contenu du presse-papier était tapé au clavier, et l'application en cours de fonctionnement dans l'émulateur réagira en conséquence.

  Bouton de droite

    Le bouton de droite fait apparaître le menu de configuration. De plus, les touches "majuscules" et "contrôle" peuvent être utilisées en combinaison avec ce bouton pour accéder à d'autres parties du menu.

Sessions

  Konsole permet de lancer plusieurs sessions (programmes) à la fois. De nouvelles sessions peuvent être lancées en utilisant le menu "Fichier". On peut changer de session grâce au menu "Sessions". Ces deux menus sont également disponibles avec le bouton de droite de la souris, avec les touches "majuscules" et "contrôle" comme modificateur.

  Le menu "Sessions" peut être librement configuré en fonction des besoins locaux. (Il manque encore une section à ce sujet dans cette documentation, consultez /opt/kde/share/apps/Konsole pour avoir quelques exemples.)

## Configuration

Le menu "options" permet de contrôler l'essentiel de l'apparence de Konsole. On peut l'atteindre soit en utilisant la barre de menu, soit en cliquant dans la fenêtre de Konsole avec le bouton de droite de la souris.

Barre de menu

  Lorsque cette option est cochée, une barre de menu apparaît au sommet de la fenêtre. A la différence du comportement habituel, la barre de menu ne comporte pas de raccourcis-clavier afin d'éviter de rendre certaines combinaisons de touches inaccessibles à l'application cliente.

Cadre

  Détermine l'affichage ou non d'une bordure.

Ascenseur

  L'ascenseur offre un autre moyen de contrôler le tampon d'historique. Ne confondez pas cette fonctionnalité avec le défilement à l'intérieur de l'application cliente, même si souvent elle peut (et doit) y ressembler.

Police

  Le menu "police" permet deux ajustements complètement différents. D'abord une collection de police de différentes tailles, afin de choisir une police qui convienne à la fois à la résolution et à la taille de la fenêtre. Ensuite, une police "Linux" additionnelle, qui diffère des précédentes par son encodage. Il est nécessaire d'utiliser cette police lorsqu'on lance une émulation de console Linux.

Taille

  Bien que la taille de la fenêtre soit librement ajustable par les moyens habituels, on peut parfois souhaiter fixer la taille de la fenêtre de la console pour se conformer aux exigences des vieux programmes qui ne prenaient pas en compte cette possibilité. Le menu "taille" présente les tailles de consoles les plus courantes. Si aucune d'elles ne convient, redimensionnez l'écran selon vos besoins. Lorsque la taille est modifiée, Konsole l'affiche dans le titre pour vous aider à l'ajuster.

Modèle

  Cette option permet de choisir un modèle de couleurs. (Il manque une section détaillant cela, consultez /opt/kde/share/apps/Konsole pour voir quelques exemples.)

Pour des raisons historiques, la touche d'effacement arrière (backspace) ne va pas renvoyer le code CTRL-H sous Linux. (La seule application que je connaisse qui dépende véritablement de ce comportement spécial est "emacs", dans lequel CTRL-H signifie "aide"). Bien que chaque application soit configurable, et tout un chacun peut configurer emacs afin qu'il accepte F1 comme touche d'aide, cette utilisation inhabituelle des codes du clavier a été entérinée. Ne vous inquiétez pas de cela, vérifiez simplement que l'option

- BS envoie DEL

est cochée.

Dans ce cas, Konsole envoie le caractère DEL (hex 7F) lorsqu'on appuie sur la touche d'effacement arrière à la place du caractère normal BS (hex 08). La touche d'effacement normal (delete) renvoie aussi quelque chose de différent du caractère DEL dans ce cas.

Toutes ces indications prennent effet immédiatement mais seulement pour la session courante. Pour rendre les ajustements permanents, cliquez sur l'option :

- Enregistrer les options

## Installation

Konsole fait actuellement partie du paquetage kdenonbeta et doit être compilé et installé comme indiqué dans le répertoire principal de ce paquetage.

Si vous rencontrez des difficultés en faisant cela, merci de vous référer à la rubrique problèmes d'installation ci-dessous.

## Bogues et FAQ

Avant d'envoyer des rapports de bogue, merci de vérifier dans un autre terminal X s'il s'agit ou pas d'un bogue spécifique à "Konsole".

### Problèmes liés à l'installation

Konsole requiert des polices spécifiques qui sont livrées avec sa distribution mais qui ne sont pas installées du fait que les auteurs ont préféré ne pas exiger les privilèges de superutilisateur durant le processus d'installation. Vous devrez donc le faire manuellement. Lisez le fichier README.linux.console pour plus de détails.

### Problèmes liés à l'application

Quelques programmes rencontrent des problèmes lorsqu'ils sont lancés dans une console X.

#### MC (midnight commander 4.1.21)

- Ce n'est que lorsque l'émulateur s'appelle "xterm" que mc réagit aux événements de redimensionnement (avant qu'une touche soit pressée) et aux événements de souris (xterm). Notez que les événements de souris dans xterm ne sont pas du tout spécifiques, c'est à dire que la console Linux les produit aussi.

- Après CTRL-O (qui affiche l'écran secondaire) mc ne propage pas les événements de redimensionnement à son sous-shell. Essayez avec xterm, ou n'importe quel autre émulateur de terminal.

- Il semblerait qu'il fasse des choses plus étranges encore avec son sous-shell. Quand on redimensionne la fenêtre alors que le paneau de mc est affiché, l'écran secondaire en est quelque peu affecté (par des prompts réels ou fictifs). C'est encore pire quand une application tourne pendant qu'on le fait.

- Le moins qu'il fasse est d'envoyer des nouvelles lignes, mais souvent il se passe encore plus de choses lorsqu'on redimensionne alors que le panneau est affiché.

- En cas de trafic important, il arrive que des parties du texte soient perdues. Essayez "ripple" dans le répertoire de test jusqu'à ce que vous remarquiez une chute. Bien que j'aie pu reproduire le bogue avec kvt, rxvt et xterm, et vérifié aussi que les données sont déjà perdues en read(3), il se pourrait que je sois tombé sur quelque chose de différent dans ce cas. Puisque je n'ai réussi à reproduire cet effet qu'en lançant mc, je suis à peu près certain que c'est le sous-shell de mc qui en est la cause.

- Le redimensionnement ne fonctionne pas bien dans l'émulation de console Linux. En particulier, mc ne répercute pas l'information de redimensionnement à son sous-shell. Il n'est plus non plus sensible à la souris.

#### Vim 4.6

- Envoie une nouvelle ligne en se fermant, produisant ainsi une image étrange sur l'écran secondaire lorsqu'il est lancé avec mc comme éditeur par défaut.

#### dselect (frontal du gestionnaire de paquetages Debian) :

- Présume un arrière-plan noir. Il faut donc utiliser le modèle de couleur "Blanc-sur-noir" lorsqu'on l'utilise. Lorsqu'il est lancé dans l'émulateur de console linux, il n'accepte pas bien les événements de redimensionnement (segfault).

### Broken Termcap et Bases de données Terminfo

Veuillez noter que beaucoup d'applications (celles qui utilisent ncurses) basent leur connaissance de la manière dont elles doivent communiquer avec un émulateur de terminal sur l'information contenue dans une base de données. Ceci peut ne pas fonctionner. Ici aussi, vous rencontreriez problablement les mêmes problèmes avec d'autres émulateurs.

Ainsi, par exemple :

- debian 1.3.1 (Bo) oublie l'entrée kdch1, ce qui fait que la touche DELETE semble ne pas fonctionner correctement. D'autres touches pourraient également manquer.

- la distribution mc 4.1.21 contient un xterm.ti avec des entrées hpa, vpa fautives (`[` manque après `ESC`). Plus étrange encore, xterm fonctionne pourtant grâce à une caractéristique qui accepte ces séquences erronées dans certaines circonstances (`ESC Pn C` est considéré comme `ESC [ Pn C`, où `C` n'est pas un chiffre).

- Pour cette raison, j'ai inclus un xterm.ti. (A compiler avec tic).

### Problèmes avec les touches "effacement arrière" (BACKSPACE), "effacement" (DELETE) et similaires.

Il était une fois un terminal qui n'avait pas de touche d'effacement. Ce problème a été perpétué avec Linux et est toujours un éternel cauchemar. Il a été résolu séparément par tous les programmes qui avaient besoin de ces touches et qui ont fini par devenir configurables à volonté, ce qui a pour résultat qu'il sont souvent mal configurés au démarrage. Konsole ne fait pas exception.

Konsole envoie DEL (0x7F) pour la touche BS et ESC[3 pour la touche DEL si l'option "BS envoie DEL" est activée, et ainsi se comporte comme une console Linux typique. Ctrl-H (0x08) est alors laissé à la disposition des applications, par exemple l'aide de emacs dans sa configuration habituelle.

Quand cette option n'est pas validée, la touche BS envoie BS (0x08) et la touche DEL envoie DEL (0x7f), comme dans les normes VT100s and IBM PCs do.

(Comme tout programme peut être configuré de telle sorte que BS=BS et que DEL=DEL, et que le pauvre terminal sans touche d'effacement n'existe plus aujourd'hui que dans la légende, l'auteur se demande bien pourquoi on utilise encore toutes ces complications à propos de BS.)

ctrl-ˆ == ctrl- == ctrl-` == RS == 0x1e ne peut pas être tapé avec une configuration de clavier européenne, puisque ces trois caractères de base sont des préfixes (c'est à dire qu'ils peuvent être suivis d'un autre caractère). X11 est connu pour posséder de telles touches mortes.

### Modèles de couleurs

A la suite d'une montagne de plaintes à propos des couleurs, Konsole offre à présent des modèles de couleurs configurables. Il reste à écrire un document qui expliquera tout cela.

### Polices

(Légèrement dépassé, vérifiez dans README.linux.console)

- Les polices VGA utilisent un codage différent des autres, et, pour cette raison, n'afficheront pas les caractères graphiques ou nationaux lorsqu'elles sont utilisées avec TERM=xterm. Elles sont plus adaptées à dos(1) et fonctionneront aussi avec TERM=linux. Veuillez noter que l'utilisation de ces polices dans Konsole est encore expérimentale.

- Il apparaît que les polices autres que celles que j'ai incluses ne sont pas utilisables pour les applications de terminaux. Ceci n'est pas tant du à leur pitch variable (que j'ai implanté de manière expérimentale) qu'à leur absence de jeu graphique. Essayez xfd(1x) pour étudier ceci de plus près.

- D'une manière générale, il semble qu'il manque une famille de polices pour terminaux. Si vous connaissez une famille de polices proportionnelles pour terminaux, merci de m'envoyer un mot.

### Sécurité

Bien que Konsole puisse être installé suid-root, il n'est pas prévu pour cela. Ne le faites pas. Konsole abandonne les privilèges juste après avoir été lancé. Le clavier sécurisé (X11) n'est pas mis en oeuvre, ce qui signifie que d'autres applications peuvent récupérer les frappes de touches en provenance de Konsole si elles le souhaitent. Attention aux chevaux de Troie.

Konsole n'utilise pas fchown(2) sur le pseudo tty. Cela signifie que, dans un environnement multi-utilisateurs quelqu'un peut espionner votre session root. Avec les noyaux Linux récents (2.1/2.2), Konsole interdira de telles tentatives. Pour vérifier si c'est possible ou non, essayez ceci à l'intérieur de Konsole :

        $ tty
        /dev/ttyp3

Sous l'identité d'un autre utilisateur (non-root), essayez :

`$ echo 'test' > /dev/ttyp3`

Si vous recevez la chaîne dans la session Konsole, cette session n'est pas sûre.

Pour les autres UNIX, le trou de sécurité sera bientôt refermé, mais la solution nécessitera que Konsole soit installé suid/root. Je sais bien que cela ne sera pas possible sur tous les systèmes, mais je n'y peux rien.

### Bogues connus (Konsole-0.8.6)

- Les touches du pavé numérique n'ont aucun effet si numlock n'est pas activé. Ceci reflète exactement ce que je reçois de Qt. Toutes les touches arrivent sous la forme &num;ffff. Pensez que cela vient du filtre d'événements que j'ai du installer pour intercepter les frappes de touches.

- Consultez également TODO pour les bogues dus à des fonctions manquantes.

### Fonctions qui ne seront pas mises en oeuvre.

Entrées utmp.

  Utmp est une base de données qui indique qui est actuellement logué. Elle est utilisée par des programmes comme who, finger, wall, talk, etc. pour lister les utilisateurs présents sur un système et pour les contacter.

  Ca n'aurait aucun sens de l'utiliser avec un terminal X, puisqu'il n'existe personne qui pourrait se nommer _le_; terminal, et à qui on pourrait envoyer des messages.

  La bonne solution serait de modifier l'utmp avec le gestionnaire de session xdm/kdm. Mieux encore, un programme de notification et de discussion pourrait être lancé automatiquement quand la session X démarre (ktalk ?) afin qu'un canal de communication soit ouvert avec la personne qui travaille à la console.