Problèmes d'accents dans l'affichage des pages de man

Xorg, Compiz, KDE / Gnome / Xfce / Fluxbox / e17 / fvwm ... GDM/KDM/XDM...
Avatar de l’utilisateur
Logicien
Daikyu
Messages : 60
Inscription : mer. 16 janv. 2008, 20:23
Localisation : Montréal Québec

Problèmes d'accents dans l'affichage des pages de man

Message par Logicien » mer. 16 janv. 2008, 21:36

Bonjour,
que ce soit dans les terminaux virtuels ou dans un terminal graphique, aucune des pages de man en français affichent correctement les caractères accentués. J'ai essayé différentes locales, fr_FR et fr_CA, en iso88591, iso885915 et utf8, les différents encodages de terminaux correspondants et changer la police de caractères, mais ça ne fonctionne pas. J'ai essayé groff avec -Tlatin1 et -Tutf8 dans /etc/man.conf, mais ça ne marche pas plus. Là, je ne comprend pas. Quelqu'un a-t-il une idée?
Paul

Avatar de l’utilisateur
Logicien
Daikyu
Messages : 60
Inscription : mer. 16 janv. 2008, 20:23
Localisation : Montréal Québec

Message par Logicien » mer. 16 janv. 2008, 21:51

Ok, la variable LESSCHARSET=utf8 dans mon ~/.bashrc est à l'origine du problème. Avec LESSCHARSET=latin1 ou latin9 c'est correct, si j'utilise l'encodage iso8859-15 dans konsole. Par contre, dans les terminaux virtuels, avec ou sans unicode_start, ç'est erratique. Si quelqu'un des améliorations, je suis preneur.
Paul

Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)
Contact :

Message par marc[i1] » mer. 16 janv. 2008, 22:11

Les pages man françaises sont en UTF-8.

Aujourd'hui la totalité des pages man doivent être passé en UTF-8, ce qui signifie que les pages vont apparaître abimées si tu es en ISO.
Ne vous emmerdez plus, emmerdez les autres.

Avatar de l’utilisateur
Logicien
Daikyu
Messages : 60
Inscription : mer. 16 janv. 2008, 20:23
Localisation : Montréal Québec

Message par Logicien » jeu. 17 janv. 2008, 06:48

Merci marc[i1]. Je comprend le principe, mais il y a des pages de man françaises qui sont encodées en utf8 et d'autres en iso présentement. Ça complique le choix global des locales. Dans les terminaux virtuels et graphiques, il faut que l'encodage utilisé par le terminal soit l'utf8, sinon les messages français du système ne s'affichent pas correctement. Outre la police de caractères, l'important est que le terminal utilise un encodage qui puisse afficher n'importe fichier peu importe son encodage. L'utf8 est sûrement le meilleur choix, mais il y a encore quelques problèmes avec les pages de man en utf8. Seules les pages de man en iso s'affichent parfaitement. La solution passe par l'installation de groff pour utf8. J'avais lu ça sur le forum de Gentoo et ça marchait.
Dernière modification par Logicien le jeu. 17 janv. 2008, 09:38, modifié 1 fois.
Paul

Avatar de l’utilisateur
BadPotato
archer
Messages : 127
Inscription : dim. 26 août 2007, 19:57
Localisation : Canada - Québec

Message par BadPotato » jeu. 17 janv. 2008, 08:16

je suis avec les même locales que toi... et de ce fait avec le même problème :lol:

donc groff permettrait de changer les pages ISO en UTF-8 ? ... je vais essayer cela :)


par contre, il me semble aussi qu'une fois je compilais des trucs et il avait certain caractères dans ce style "�" (mais je suis pas sur... c'était peut etre aussi une autre distro)

Avatar de l’utilisateur
Logicien
Daikyu
Messages : 60
Inscription : mer. 16 janv. 2008, 20:23
Localisation : Montréal Québec

Message par Logicien » jeu. 17 janv. 2008, 09:59

Salut,
c'est simple. Pour que les messages français du système s'affichent correctement dans les terminaux virtuels et graphiques, il faut que l'encodage utilisé par le terminal corresponde aux locales utilisées. Si c'est l'utf8, il faut exécuter la commande unicode_start pour mettre le terminal virtuel en utf8. À mettre dans ~/.bash_profile. Pour les terminaux graphiques, il faut aussi choisir l'utf8. Si les locales utilisées sont iso, l'encodage du terminal doit aussi être iso, donc ne pas utiliser unicode_start dans les terminaux virtuels ou unicode_stop pour arrêter l'unicode du terminal au besoin.

Groff-utf8 est valable pour toutes les pages de man encodées en utf8 seulement. Pour les pages de man en iso et ascii c'est groff. L'idéal serait d'avoir un script qui détecterait l'encodage des pages de man, voir de tous les fichiers et qui placerait l'encodage du terminal identique au fichier le temps de l'exécution de la commande et remettrait le terminal dans l'encodage des locales de l'utilisateur à la fin de la commande. Reste à écrire ça. :?:

Je viens de me faire un /etc/man.conf qui utilise groff-utf8 et un /etc/man.conf.latin1, qui lui utilise groff avec ... latin1. Si une page de man est encodée en iso, elle ne s'affiche bien que si je place le terminal en iso et que j'utilise l'alias

Code : Tout sélectionner

alias manlat='LESSCHARSET=latin9 man -C /etc/man.conf.latin1'


par exemple. C'est nécessaire avec

Code : Tout sélectionner

manlat man 
manlat find


qui utilisent respectivement charset=iso-8859-1 et charset=us-ascii. Vérifié grâce à

Code : Tout sélectionner

man -aw man find
file -iz /usr/man/fr/man1/man.1.gz /usr/man/man1/find.1.gz
Cela permet de faire face aux cas moins fréquents des pages de man encodées en iso et ascii. Le défaut de la commande man utilise /etc/man.conf et mon .bashrc fait que less utilise LESSCHARSET=utf-8.
Dernière modification par Logicien le jeu. 17 janv. 2008, 11:49, modifié 2 fois.
Paul

Avatar de l’utilisateur
Archie
yeomen
Messages : 257
Inscription : jeu. 28 juin 2007, 22:18
Localisation : France (33)

Message par Archie » jeu. 17 janv. 2008, 10:38

Logicien a écrit :Salut,
[...] Si c'est l'utf8, il faut exécuter la commande unicode_start pour mettre le terminal virtuel en utf8. À mettre dans ~/.bash_profile. [...]
A super, ça vient de régler un vieux problème. lorsque je lançai la commande alsamixer dans une console virtuel (ALT+CTRL+F?), il apparaissait des caratères bizarres. Aprés un petit unicode_start tous s'affiche correctement :)

Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)
Contact :

Message par marc[i1] » jeu. 17 janv. 2008, 11:20

C'est monstrueusement génial comme astuce :shock:

Si tu pouvais en faire une page de wiki.
http://wiki.archlinux.fr/wiki:ecrire

Je vais faire passer l'info au mainteneur des pages man francophone, j'aimerais avoir son avis éclairé sur ton astuce.
Ne vous emmerdez plus, emmerdez les autres.

Avatar de l’utilisateur
Logicien
Daikyu
Messages : 60
Inscription : mer. 16 janv. 2008, 20:23
Localisation : Montréal Québec

Message par Logicien » jeu. 17 janv. 2008, 11:57

Ça y est, je me suis inscris au wiki. Je vais synthétiser tout ça bientôt à tête reposée.
Paul

Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)
Contact :

Message par wain » jeu. 17 janv. 2008, 13:26

Alors là Logicien, tu viens de faire un trou gros comme ça dans le derrière de marc[i1] (qui est notre spécialiste des manpages) :D

Continues comme ça ! :P

Avatar de l’utilisateur
Logicien
Daikyu
Messages : 60
Inscription : mer. 16 janv. 2008, 20:23
Localisation : Montréal Québec

Message par Logicien » jeu. 17 janv. 2008, 17:59

Un petit détail, l'euro ne s'affiche pas après unicode_start. Cette commande n'est valable que pour les terminaux virtuels en mode caractères. C'est un script Bash qui utilise la police

Code : Tout sélectionner

DEFAULT_UNICODE_FONT=LatArCyrHeb-16
# Also drdos8x16 is a good candidate.
Cette police ne contient pas le signe euro. Je n'ai pas trouvé de police unicode ou latine qui permette d'afficher tous les caractères alphanumériques sans problème quand le terminal est en unicode. On peut toujours charger ponctuellement la police lat9w-16 avec setfont pour afficher l'euro, mais il y a des caractères qui ne s'affichent pas correctement quand on utilise une police latine quand le terminal est en unicode. Rien n'est parfait. :o
Paul

Avatar de l’utilisateur
BadPotato
archer
Messages : 127
Inscription : dim. 26 août 2007, 19:57
Localisation : Canada - Québec

Message par BadPotato » ven. 18 janv. 2008, 08:14

bon, j'ai bisouiller... j'ai du mal a comprendre

d'abord, groff-utf8 semble s'être installer dans le vide et j'ai du mal a comprendre cette note
# Choose a PREFIX directory in such
# a way that $PREFIX/bin is in your
# $PATH.
je fait un echo $PATH pour en savoir plus.... mais hum j'ai du mal a bien comprendre.

deuxieme chose, quelque soit la page de man, si je fait:

Code : Tout sélectionner

man cp

[blabla]

/héllo all
(où "/" sert a rechercher quelques choses dans la page)

le "é" n'affichera pas correctement (un carré)


...
j'ai beau m'amuser a faire unicode_start ou unicode_stop, ça ne ressort rien de bon (en fait unicode_stop c'est pire que tout)

-De plus, j'avoue que je suis très perdu avec cette histoire de manlat, pourrait tu m'expliquer?

information supplémentaire:

Code : Tout sélectionner

$ locale -a
C
fr_CA
fr_CA.iso88591
fr_CA.utf8
POSIX
et voici mon .bash_profile

Code : Tout sélectionner

. $HOME/.bashrc
unicode_start
je vais essayer de m'informer un peu plus a propos de groff, en attendant

Avatar de l’utilisateur
mélodie
Maître du Kyudo
Messages : 2785
Inscription : lun. 30 oct. 2006, 02:06
Localisation : Pyrénées
Contact :

Message par mélodie » ven. 18 janv. 2008, 10:50

Qu'est-ce que j'en ai marre aussi des pages qui s'affichent de travers : certaines sont parfaites, d'autres tout à fait mal encodées, merci pour ce fil et ces infos. :)

Je vais relire ça à tête reposée et essayer tous ces conseils (et sûrement les lire sur le wiki, d'ailleurs).
BadPotato a écrit : d'abord, groff-utf8 semble s'être installer dans le vide et j'ai du mal a comprendre cette note
# Choose a PREFIX directory in such
# a way that $PREFIX/bin is in your
# $PATH.
Au hasard, je dirais qu'il veut que tu lui indiques où l'installer et indiquer le $PATH ? Préfères-tu /opt ou plus classiquement /usr par exemple ?

D'où $PREFIX représente /usr (ou /opt) (suivi donc de /bin)

À moins qu'il ne te demande de lui indiquer carrément quel est le répertoire d'installation (donc tu ne choisis pas, mais il veut savoir où il est installé) pour qu'il puisse s'assurer d'être dans le PATH, auquel cas une vérification avec

Code : Tout sélectionner

locate  groff-utf8
, ou avec quelque chose comme

Code : Tout sélectionner

find / -name 'groff-utf8'
pourra permettre de trouver l'information.

Quels sont les avis des archers sur ce point ?

Dionysos
newbie
Messages : 1
Inscription : ven. 18 janv. 2008, 13:15
Localisation : Montpellier

Message par Dionysos » ven. 18 janv. 2008, 13:23

Bonjour,
Logicien a écrit :Ça y est, je me suis inscris au wiki. Je vais synthétiser tout ça bientôt à tête reposée.
Je suis impatient de te lire.
Une fois que la méthode sera validée par plusieurs utilisateurs ArchLinux, soit j'en ferai une copie sur le site des pages de manuel, soit j'insèrerai un lien.

Cordialement,
Alain
Les pages de manuel Linux en français
http://manpagesfr.free.fr

Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)
Contact :

Message par marc[i1] » ven. 18 janv. 2008, 14:47

Ouha !! Bienvenue à toi oh grand traducteur des pages man francophone.

:applaudit: :prosterne:

;)
Ne vous emmerdez plus, emmerdez les autres.

Avatar de l’utilisateur
Logicien
Daikyu
Messages : 60
Inscription : mer. 16 janv. 2008, 20:23
Localisation : Montréal Québec

Message par Logicien » sam. 19 janv. 2008, 07:24

Bonsoir,
mon article est prêt pour être intégré au wiki. Il se nomme

Méthode pour résoudre les problèmes d'affichage des messages du système, des pages man et autres applications utilisant le français sous GNU/Linux
:D
Je vais avoir besoin d'aide pour l'intégrer au wiki. Je n'ai jamais écrit dans un wiki. Une explication pas-à-pas serait appréciée.
Paul

Avatar de l’utilisateur
mélodie
Maître du Kyudo
Messages : 2785
Inscription : lun. 30 oct. 2006, 02:06
Localisation : Pyrénées
Contact :

Message par mélodie » sam. 19 janv. 2008, 11:56

Logicien a écrit : Je vais avoir besoin d'aide pour l'intégrer au wiki. Je n'ai jamais écrit dans un wiki. Une explication pas-à-pas serait appréciée.
Une méthode que j'ai utilisée : j'ai déposé mon texte dans le bac à sable, où je l'ai mis en forme. D'aperçu en aperçu, je l'ai modifié au fur et à mesure que je voyais comment fonctionnait telle et telle balise, et une fois que ça m'a semblé sans erreur je l'ai copié-collé directement sur sa page définitive.
Tu trouveras tout sur la page wiki:redaction.

Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)
Contact :

Message par marc[i1] » sam. 19 janv. 2008, 14:50

Tu peux l'ajouter la page dédié à mettre Archlinux en Français.
Si tu ne te sent pas à l'aise avec la mise en forme, met ton article tel quel en fin de page, je ferais la mise en forme … :)
Ne vous emmerdez plus, emmerdez les autres.

Avatar de l’utilisateur
Logicien
Daikyu
Messages : 60
Inscription : mer. 16 janv. 2008, 20:23
Localisation : Montréal Québec

Message par Logicien » lun. 21 janv. 2008, 02:42

La version achevée sans être définitive de cet article est disponible au format html. Je vous laisse le soin de la placer dans le wiki et de me faire part du lien. Je dois faire du copier parce-que je n'ai pas d'espace web à ma disposition. Bonne lecture !

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<META content="Paul Lalonde" name=Auteur>
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<TITLE>francais.html</TITLE>
</HEAD>
<BODY bgcolor=white text=blue link=green vlink=red alink=orange>
<center>
<strong>
<h1>
<u>Pour bien afficher les caractères accentués français sous GNU/Linux</u>
</h1>

</center>
</strong>

<p><u><h2><strong>Table des matières</h2><a name="ancre0"></a>
<p><a href="#ancre1"><p>Introduction<br></a>
<a href="#ancre2"><p>Choix d'une localisation par défaut et niveaux de localisation<br></a>
<a href="#ancre3"><p>La langue française et les caractères accentués<br></a>
<a href="#ancre4"><p>Les pages de manuel à encodages multiples et la commande man<br></a>
<a href="#ancre5"><p>Groff et l'UNICODE et l'alternative Groff-utf8<br></a>
<a href="#ancre6"><p>Obtenir des informations sur une page de man<br></a>

<a href="#ancre7"><p>Alternatives pour faire afficher une page de manuel correctement<br></a>
<a href="#ancre8"><p>Conclusion<br></a>
<a href="#ancre9"><p>Références</strong></u></a>

<p><u><strong>Introduction</strong></u> <a name="ancre1"></a>

<p style=" text-indent:3em">Nous partirons du fait que la langue anglaise est souvent la langue par défaut d'installation, de configuration du système et des applications sous GNU/Linux. Elle ne contient pas de caractères accentués et la plupart des polices de caractères aplhanumériques sont capables d'afficher les caractères de la langue anglaise. Des problèmes peuvent survenir lorsqu'on tente d'afficher un texte encodé en ISO* ou en UNICODE alors que l'application utilise l'encodage ASCII, ou encore, un texte encodé en UNICODE lorsque l'application utilise l'encodage ISO*. Ce sont des problèmes de compatibilité ascendante liés à l'évolution des méthodes d'encodages que peuvent rencontrer l'ASCII et l'ISO*. Ces problèmes sont moins fréquents avec l'encodage UNICODE qui est au sommet de cette évolution et possède une compatibilité descendante avec les encodages ISO* et ASCII. Les applications sujettent à ce genre d'erreurs sont celles qui ne supportent pas tous les encodages et/ou qui ne sont pas capables de détecter automatiquement l'encodage d'un fichier et se placer d'elles-mêmes dans l'encodage correspondant. Ceci cause des désagréments à l'utilisateur. Celui-ci peut devoir convertir un fichier de son encodage d'origine vers un des encodages supporté par l'application pour résoudre un problème de compatibilité et/ou placer l'application dans l'encodage du fichier pour une bonne lecture, édition et enregistrement. Les commandes iconv et recode sont utilisées pour convertir et réencoder les caractères. Ces problèmes sont les seuls que rencontre la langue anglaise. Ils sont indépendant des langues. Ils concernent l'encodage des caractères.

<p><a href="#ancre0">Retour à la table des matières</a>

<p><u><strong>Choix d'une localisation par défaut et niveaux de localisation</strong></u><a name="ancre2"></a>

<p style=" text-indent:3em">Le choix de la localisation par défaut du système joue un rôle important. Il précise quelle est la langue et l'encodage de caractères utilisés par le système pour afficher les messages. Il dit aux applications dans quelle langue s'ouvrir et dans quel encodage enregistrer les fichiers. Cela peut se faire au niveau du système par l'administrateur, puis au niveau des utilisateurs et finalement sur la ligne de commandes. La priorité est donnée à la ligne de commandes, suivi du niveau utilisateur et finalement au niveau système. Si le choix de la langue par défaut pour les utilisateurs francophones est évident, il n'en est pas de même pour l'encodage des caractères. Tout dépend du défaut de l'encodage des fichiers par votre distribution et surtout de l'encodage dans lesquels vos fichiers personnels sont enregistrés. Personnellement, mes locales système et utilisateurs non root sont en fr_FR.utf8:

<p>pot 21:28 ~ $ <strong>locale</strong><br>
LANG=fr_FR.utf8<br>
LANGUAGE=fr_FR.utf8<br>
LC_CTYPE="fr_FR.utf8"<br>
LC_NUMERIC="fr_FR.utf8"<br>
LC_TIME="fr_FR.utf8"<br>
LC_COLLATE="fr_FR.utf8"<br>
LC_MONETARY="fr_FR.utf8"<br>

LC_MESSAGES="fr_FR.utf8"<br>
LC_PAPER="fr_FR.utf8"<br>
LC_NAME="fr_FR.utf8"<br>
LC_ADDRESS="fr_FR.utf8"<br>
LC_TELEPHONE="fr_FR.utf8"<br>
LC_MEASUREMENT="fr_FR.utf8"<br>
LC_IDENTIFICATION="fr_FR.utf8"<br>
LC_ALL=fr_FR.utf8<br>
pot 21:28 ~ $


<p>mais mes locales root sont en C, parce-que gcc ne supporte pas les locales fr. Pour que les messages français du système s'affichent correctement, il faut que l'encodage utilisé par le terminal corresponde à celui dans lequel le système affiche les messages.

<p><a href="#ancre0">Retour à la table des matières</a>

<p><u><strong>La langue française et les caractères accentués</strong></u><a name="ancre3"></a>

<p style=" text-indent:3em">Comme toutes les langues, la langue française doit faire face aux différents problèmes de compatibilité ascendante et plus rarement descendante entre les différents encodages de caractères ainsi que leurs prises en charge par les applications. On doit plus particulièrement s'assurer que la police de caractères utilisée par les applications soit capable d'afficher les caractères accentués ainsi que le signe Euro, €. Dans les terminaux virtuels dits en 'mode caractères' ou 'mode texte' comme la console Linux /dev/console, les polices lat0-16, lat9u-16 et lat9w-16 font l'affaire. Ce sont des polices latines alphanumériques d'Europe de l'ouest qui utilisent l'encodage ISO-8859-1 ou ISO-8859-15. Les termes latin1 et latin9 leurs sont respectivement des synonymes. Comme dit précédemment, les polices à encodages ISO* nécessitent une application qui est placé dans cette encodage pour un bon affichage des caractères accentués. La console Linux et les autres terminaux virtuels en mode texte sont par défaut placés dans un mode utilisable avec l'encodage ISO*, soit l'ASCII. Cela a trait entre autres à l'état du clavier. Voir le 'man kbd_mode'. Un fichier encodé en ISO* va s'afficher correctement dans ces terminaux si les applications chargées de l'affichage sont elles-mêmes placées dans cet encodage. Par exemple, une page de manuel qui est encodée en ISO* s'affichera correctement sur la console si les outils de formatage groff et nroff et le paginateur less utilisent respectivement latin1, latin1 et latin9. Pour ce faire, il faut demander à groff, nroff et less s'utiliser ces encodages. On peut y arriver de différentes façons, une méthode est d'éditer le fichier /etc/man.conf et d'utiliser l'option -Tlatin1 pour groff et nroff:

<p><strong>TROFF /usr/bin/groff -Tlatin1 -mandoc -c<br>
NROFF /usr/bin/nroff -Tlatin1 -mandoc -c</strong>

<p>Pour le paginateur less, on peut configurer la variable d'environnement LESSCHARSET=latin9 dans le fichier de configuration de Bash ~/.bashrc:

<p><strong>export LESSCHARSET=latin9</strong>

<p style=" text-indent:3em">Le fichier .bashrc placé dans le réportoire $HOME d'un utilisateur est lu par l'interpréteur de commandes Bash, défaut des systèmes Linux, à l'ouverture d'un terminal interactif qui n'affiche pas d'invite de connexion. Ce sont le plus souvent des terminaux graphiques. Ce fichier est à la base de la configuration de Bash et peut être ajouté à d'autres de ses fichiers de configuration de Bash comme ~/.bash_profile. Comme less est le paginateur par défaut des pages de man dans /etc/man.conf,

<p><strong>PAGER /bin/less -is</strong>

<p>toutes les pages de man encodées en ISO* devraient s'afficher correctement. Dans les terminaux virtuels graphiques comme xterm, rxvt, konsole, gnome-terminal, etc, si ces applications utilisent l'encodage ISO-8859-1 ou 15 avec une police de caractères capable d'afficher les caractères accentués, l'affichage devrait être bon. J'utilise la police Bitstream Vera Sans Mono avec bonheur.
<p><a href="#ancre0">Retour à la table des matières</a>

<p><u><strong>Les pages de manuel à encodages multiples et la commande man</strong></u><a name="ancre4"></a>

<p style=" text-indent:3em">La particularité des pages de man présentement est qu'elles n'utilisent pas toutes le même encodage, même si l'UTF-8 est prépondérant. La commande man ne peut pas détecter automatiquement l'encodage de la page à lire se placer d'elle-même dans cet encodage. Ceci oblige l'utilisateur à avoir une configuration pour les pages de man encodées ISO* et une configuration pour UTF-8 s'il aspire à ce que toutes les pages de man francophones s'affichent correctement. La configuration des terminaux virtuels en mode caractères pour l'UTF8 repose essentiellement sur un script Bash inclue dans la plupart des distributions Linux: unicode_start. La première chose que fait cette commande, c'est de vérifier si le terminal sur laquelle elle s'exécute et va s'appliquer est de type console Linux, c'est-à-dire en mode caractères. Si c'est le cas, le clavier, le mappage des caractères et la police de caractères passent en UNICODE. Sinon, la commande affiche le message 'unicode_start skipped on /dev/pts/0' selon le numéro du terminal. La commande se termine avec le status 0 et le mode du terminal reste inchangé. C'est le cas si on exécute unicode_start dans un terminal graphique. Si on veut automatiser cette commande, on peut la placer dans ~/.bash_profile:<p>

<strong>/usr/bin/unicode_start</strong>

<p style=" text-indent:3em">Le fichier .bash_profile est lu par Bash à chaque fois qu'on se connecte au système avec nom d'utilisateur et mot-de-passe. La console Linux et les terminaux en mode caractères tty1, tty2, tty3, tty4, tty5 et tty6 sont justement, par défaut eux aussi, des terminaux de connexions aux système. Il seront donc placés en mode UNICODE lorsque l'utilisateur s'en servira pour se connecter au système. On accède à ces terminaux avec les raccourcis clavier Ctrl+Alt+fn ou n=1, 2, 3, 4, 5 ou 6, Ctrl+Alt+F7 pour accéder au serveur graphique X. On peut remettre le terminal en mode ASCII à tout moment grâce à la commande<p>

<p><strong>/usr/bin/unicode_stop</strong>

<p>Toutefois, la police de caractères reste celle utilisée par la commande unicode_start et cette police n'est bien adaptée qu'à l'UNICODE. Il faudra utiliser la commande setfont pour recharger la police par défaut de ce type de terminal ou modifier le script /usr/bin/unicode_stop pour automatiser cette tâche lors de son exécution. Par défaut, les commandes unicode_start et unicode_stop nécessitent les prévilèges root pour s'exécuter. Quand le terminal de type console est en UNICODE (unicode_start), il ne reste plus qu'à dire aux outils de formatage et d'affichage des pages de man de se placer en UTF-8 pour que les pages de manuels francophones encodées en UTF-8 s'affichent correctement.

<p><a href="#ancre0">Retour à la table des matières</a>

<p><u><strong>Groff et l'UNICODE et l'alternative Groff-utf8</strong></u><a name="ancre5"></a>
<a name="ancre1"></a>
<p style=" text-indent:3em">Un problème que présente l'outil de formatage des pages de man groff est qu'il ne formate pas correctement les pages encodées en UTF8, même avec le paramètre -Tutf8. Il existe une application, groff-utf8, qui résoud ce problème. Elle est disponible à <a href=http://www.haible.de/bruno/packages-groff-utf8.html>GNU groff wrapper taking UTF-8 encoded manual pages</a>. Téléchargez les sources. Pour installer groff-utf8 et qu'il soit accessible à tous, en super-utilisateur root, décompressez les sources dans /usr/local/src, entrez dans le nouveau répertoire /usr/local/src/groff-utf8 et faites make et make install. Les commandes su et sudo permettent à l'utilisateur d'acquérir les droits root et sont à prévilégier par le super utilisateur root, plutôt que d'ouvrir directement d'une session root, ceci du point de vue de la sécurité :

<p>pot 21:28 ~ $ <strong>su -</strong><br>

root 21:28 ~ # <strong>tar fvxz /chemin vers/groff-utf8.tar.gz -C /usr/local/src</strong><br>
root 21:28 ~ # <strong>cd /usr/local/src/groff-utf8</strong><br>
root 21:28 ~ # <strong>make</strong><br>
root 21:28 ~ # <strong>make install</strong><br>
root 21:28 ~ # <strong>exit</strong>

<p>Groff-utf8 est installé dans /usr/local/bin/groff-utf8. Ensuite, il s'agit de se créer un fichier de configuration /etc/man.conf qui utilise groff-utf8. Comme nous venons de configurer /etc/man.conf pour l'encodage ISO-8859-1 ou latin1, nous le copierons simplement en /etc/man.conf.latin1 et utiliserons ce dernier comme fichier de configuration pour les pages de man encodées en ISO*. Avec la commande sudo:


<p>pot 21:28 ~ $ <strong>sudo cp /etc/man.conf /etc/man.conf.latin1</strong>

<p>Maintenant nous pouvons éditer le fichier /etc/man.conf, modifier ses variables TROFF et NROFF et l'utiliser comme fichier de configuration par défaut pour la commande man. Ceci est logique puisque les pages de man sont principalement encodées en UTF8:<p>

<strong>
TROFF /usr/local/bin/groff-utf8 -Tutf8 -mandoc -c<br>
NROFF /usr/local/bin/groff-utf8 -Tutf8 -mandoc -c
</strong>

<p>Il ne reste plus qu'à dire au paginateur less d'utiliser lui aussi l'encodage UTF8 pour l'affichage. Ceci peut être fait sur la ligne de commande avant l'exécution de la commande man. Par exemple:<p>

pot 21:28 ~ $ <strong>LESSCHARSET=utf-8 man mount</strong>

<p>Toujours partant du fait que les pages de man sont principalement encodées en UTF8, il est, en dernière analyse, plus pratique que less utilise lui aussi l'UTF-8 par défaut. Pour ce faire, nous allons modifier la variable d'environnement LESSCHARSET=latin9 précédente dans ~/.bashrc:<p>

<strong>export LESSCHARSET=utf-8</strong>

<p>et utiliserons la ligne de commande pour les pages de man encodées en ISO* ou latin* qui sont moins nombreuses. Par exemple:

<p>pot 21:28 ~ $ <strong>LESSCHARSET=latin9 man -C /etc/man.conf.latin1 man</strong>

<p>Cette ligne dit à less d'utiliser le latin9 et à la commande man d'utiliser comme fichier de configuration /etc/man.conf.latin1 pour cette ligne de commandes seulement et d'afficher le manuel de la commande man. Plutôt que d'avoir à écrire cette ligne à toutes les fois qu'on veut s'en servir pour afficher une page de man encodée en ISO*, nous allons déclarer un alias pour cette ligne, alias que j'ai nommé 'manlat' par rapport avec ce qu'il doit faire et que nous pourrons utiliser au besoin à cette fin. J'ajoute à ~/.bashrc la ligne

<p><strong>alias manlat='LESSCHARSET=latin9 man -C /etc/man.conf.latin1'</strong>

<p><a href="#ancre0">Retour à la table des matières</a>

<p><u><strong>Obtenir des informations sur une page de man</strong></u><a name="ancre6"></a>

<p>Maintenant, jetons un coup d'oeil aux informations que la commande man nous donne concernant la commande mount. Je demande à man de me donner le chemin des différentes pages de man sur mount:

<p>pot 21:28 ~ $ <strong>man -aw mount</strong><br>
/usr/man/fr/man8/mount.8.gz<br>
/usr/man/man8/mount.8.gz<br>
/usr/man/fr/man2/mount.2.gz<br>
/usr/man/man2/mount.2.gz<br>
pot 21:28 ~ $


<p>Man utilisera, sauf indication autre, /usr/man/fr/man8/mount.8.gz, en tête de liste . On peut connaître son encodage et autres détails grâce à la commande file:

<p>pot 21:28 ~ $ <strong>file -iz /usr/man/fr/man8/mount.8.gz</strong><br>
/usr/man/fr/man8/mount.8.gz: text/troff <strong>charset=utf-8</strong> compressed-encoding=application/x-gzip<br>
pot 21:28 ~ $

<p>Si je fais

<p>pot 21:28 ~ $ <strong>man mount</strong>

<p>la sortie à l'écran sera bonne parce-que toutes les applications concernées par l'affichage des pages de man sont UTF8, tout comme le fichier /usr/man/fr/man8/mount.8.gz. Regardons maintenant les informations que la commande man nous donne sur elle-même:

<p>pot 22:05 ~ $ <strong>man -aw man</strong><br>

/usr/man/fr/man1/man.1.gz<br>
/usr/man/man1/man.1.gz<br>
/usr/man/man1p/man.1p.gz<br>
/usr/man/fr/man7/man.7.gz<br>
/usr/man/man7/man.7.gz<br>
pot 22:05 ~ $

<p>Man utilisera usr/man/fr/man1/man.1.gz et quel encodage utilise cette page de man?

<p>pot 22:08 ~ $ <strong>file -iz /usr/man/fr/man1/man.1.gz</strong><br>
/usr/man/fr/man1/man.1.gz: text/troff <strong>charset=iso-8859-1</strong> compressed-encoding=application/x-gzip<br>

pot 22:08 ~ $

<p>Si je fais

<p>pot 22:08 ~ $ <strong>man man</strong>

<p>il y aura des erreurs d'affichage:

<p>...<br>
man formate et affiche les pages du manuel en ligne. Si section est sp�cifi�e, man ne recherchera que dans cette section du manuel. nom est le nom de la page qui est g�n�ralement le nom d’une commande, d’une fonction ou d’un fichier. Toutefois, si nom contient une barre oblique � / �, il sera d’abord consid�r� en tant que nom de fichier, vous pouvez donc faire : man ./toto.5 ou m�me man /truc/machin/bidule.1.gz.<br>
...

<p>Ceci parce-que tout est configuré pour l'UTF8, le terminal, man et less et qu'il n'y a pas ici de compatibilité descendante. Des problèmes de ce genre devraient être assez rares, mais peuvent se produire.

<p><a href="#ancre0">Retour à la table des matières</a>

<p><u><strong>Alternatives pour faire afficher une page de manuel correctement</strong></u><a name="ancre7"></a>

<p>Une première alternative est de vérifier avec la commande file s'il n'y a pas une page de manuel française qui utilise l'encodage par défaut de man pour la page de manuel à afficher et l'utiliser. Dans notre cas on cherche la page man en UTF8. Dans celles listées plus haut, c'est peut-être le cas avec /usr/man/fr/man7/man.7.gz. Vérifions:

<p>pot 22:08 ~ $ <strong>file -iz /usr/man/fr/man7/man.7.gz</strong><br>
/usr/man/fr/man7/man.7.gz: text/troff <strong>charset=utf-8</strong> compressed-encoding=application/x-gzip<br>
pot 22:08 ~ $

<p>Je peux donc l'afficher correctement comme ceci:

<p>pot 22:08 ~ $ <strong>man /usr/man/fr/man7/man.7.gz</strong>

<p>Quand il n'y a pas de pages de manuel utilisant encodage recherché, on peut réencoder la page. Je décompresse la source et envoie le résultat dans le fichier ~/man.1 puis converti ce fichier de l'ISO-8859-1 vers l'UTF8 pour finalement la faire afficher:


<p>pot 22:08 ~ $ <strong>gzip -dc /usr/man/fr/man1/man.1.gz > man.1</strong><br>
pot 22:08 ~ $ <strong>iconv -f LATIN1 -t UTF8 man.1 > man.1.utf8</strong><br>
pot 22:08 ~ $ <strong>man ./man.1.utf8</strong>


<p>Si on ne veut pas passer par cette étape, on est forcé d'utiliser l'encodage des pages de man disponibles. Ici, il faut faire passer le terminal en mode caractères de l'UNICODE à l'ASCII et charger de nouveau la police de caractères par défaut:

<p>pot 22:08 ~ $ <strong>sudo unicode_stop</strong><br>
pot 22:08 ~ $ <strong>setfont lat9w-16</strong>

<p>Après quoi on devra utiliser notre alias manlat:

<p>pot 22:08 ~ $ <strong>manlat la_page_de_man_ISO*_ou_ASCII</strong>

<p>Comme tout est redevenu en ISO* le temps de cette commande, le terminal, man et less, la page de manuel non UNICODE pourra elle aussi s'afficher correctement. Dans les terminaux graphiques, il suffit de mettre l'encodage du terminal en ISO* et d'exécuter la commande 'manlat la_page_de_man_ISO*_ou_ASCII' et c'est bon.

<p><a href="#ancre0">Retour à la table des matières</a>

<p><u><strong>Conclusion</strong</u><a name="ancre8"></a>

<p>Beaucoup de choses prêtent à confusion entre les langues et les langages en général, quelles soient orales, écrites ou informatiques. L'anarchie de l'encodage des caractères en est l'expression numérique. L'anarchie a ses bons côtés. Elle demande un effort d'éclaircissement. Ainsi, quand tout mon système est configuré pour que les applications utilisent l'UNICODE et qu'une page de manuel Linux ne s'affiche pas correctement, c'est parce-que la page de man n'est pas encodée en UTF-8. Cela me dit que je dois utiliser une méthode alternative pour arriver à mes fins. Ceci est essentiel dans la langue de Proudhon, parce-que les caractères accentués ne semblent pas permettre de compatibilité entre les encodages de caractères. L'UNICODE se généralise comme défaut des distributions GNU/Linux. Les utilisateurs francophones peuvent à la demande de l'installateur, configurer leurs locales en français, mais avec encodage par défaut en UTF8. Cela exige, en plus des applications, que les terminaux textes et graphiques soient placés eux aussi dans cet encodage pour un bon affichage des caractères accentués. Je n'ai pas trouvé de police de caractères UNICODE qui puisse afficher le signe Euro sur le console Linux. Si vous en trouver une, vous pouvez me la communiquer à ludicien@yahoo.fr. Pour terminer je vous invite à visiter <a href=http://www.traduc.org/>PageDeGarde - Projet de traduction Traduc.org</a>. Vous y trouverez les plus récentes conceptions et traductions de pages de manuel Linux à télécharger, incluant des méthodes de conversion des pages de man du Latin vers l'UNICODE et vice-versa.

<p><a href="#ancre0">Retour à la table des matières</a>

<p><strong><u>Références</strong></u><br><a name="ancre9"></a>

<p>Toutes les pages de manuels Linux concernant les commandes citées dans cet article et ultimement l'étude des scripts unicode_start et unicode_stop:

<p>pot 22:16 ~ $ <strong>less /usr/bin/unicode_start</strong><br>
pot 22:16 ~ $ <strong>less /usr/bin/unicode_stop</strong>

<p>Paul Lalonde

<p>dimanche le 20 janvier 2008

<p><a href="#ancre0">Retour à la table des matières</a>

</BODY>
</HTML>
Dernière modification par Logicien le lun. 21 janv. 2008, 16:47, modifié 1 fois.
Paul

Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)
Contact :

Message par marc[i1] » lun. 21 janv. 2008, 08:27

Impecc ... reste plus qu'a le mettre sur le wiki :D

par contre, une info qui à son importance :
Pacman 3.1 place les pages man dans /usr/share/man, conformément à la FHS 2.3.

Donc je met en forme ton article et tu feras les adaptations par la suite :)
Ne vous emmerdez plus, emmerdez les autres.

Répondre