DoneThat
07/10/2008
Je suis bon (ou comment réparer le GPS du Nokia N95)
Je suis plus fort que les ateliers SAV de Nokia.
Le GPS de mon N95 marche !
Ce n'était pas un problème du logiciel. Ce n'était pas un problème de sensibilité de l'antenne. Tous les "Attente du GPS" et "Aucune connex." venaient en fait d'un... faux contact.
Un bête faux contact. Et je l'ai découvert grâce à cette page des forums support de Nokia (chercher en anglais "Waiting for GPS" et "No connection" a porté ses fruits). Et plus précisément ce texte :
pottsy : "It's to do with the connectors from the phone to the gps antenna. The antenna runs along the bottom of the phone and is stuck to the plastic surround that has the hole that the usb cable goes through. The connector is two gold spring type contacts that connect the antenna to the main PCB. When the phones are assembled, the contacts sometimes foul on the edge of the PCB rather than making contact with the contacts on the underside of the PCB, when looked at from the front of the phone.
The back of my phone and keypad fell off once and the GPS antenna and PCB could then be seen below the keypad. If you can see the spring contacts, they are not making contact with the gold contacts on the PCB. A Nokia service centre worker could probably push the connectors to where they should have been when the phone was built."
Traduction : "Ça à avoir avec les connecteurs du téléphone à l'antenne GPS. L'antenne court sur le bas du téléphone et est collée au morceau de plastique où est la prise pour le câble USB. Le connecteur (de l'antenne) est composé de deux contacts dorés de type ressort qui relient l'antenne à la carte mère. Quand les téléphones sont assemblés, les contacts se coincent sur le bord de la carte mère au lieu de toucher les contacts sous la carte mère, quand le téléphone est vu de face.
Le dos de mon téléphone et le pavé numérique sont tombés une fois et l'antenne et la carte mère étaient visibles sous le pavé numérique. Si vous pouvez voir les contacts flexibles, ils ne touchent pas les contacts dorés de la carte mère. Un centre de maintenance Nokia pourra probablement replacer les connecteurs là où ils auraient dû être quand le téléphone a été assemblé."
En images, vu de l'envers du téléphone. Dans le cercle jaune, les connecteurs ressort de l'antenne. En rouge, les connecteurs pour l'antenne GPS de la carte mère. Pointé en bleu, l'antenne GPS.

Antenne GPS du Nokia N95
© Stefan Constantinescu
Mais en fait on peut faire ça tout seul chez soi. J'ai utilisé un tournevis de précision pour soulever le pavé numérique, par le bas (voir photo plus bas). Il se déclipse facilement et s'enlève sans problèmes (c'est juste une pièce mécanique qui pousse les vrais contacts en dessous). Là, dans l'interstice entre la coque et la carte mère, j'ai effectivement vu ces deux contacts métalliques dorés le long du bord de la carte mère. Je les ai doucement poussés vers le fond du téléphone, et ils ont disparu sous la carte mère. J'ai remis le clavier en place, et le téléphone a capté quatre satellites en moins de 30 secondes !

Clavier du Nokia N95
© Stewart Butterfield
Il faut donc attaquer le clavier par les coins pointés par les flèches jaunes, à l'interstice entre la coque et le clavier. Une image du clavier détaché aide aussi à discerner ses bords :

Pavé numérique du Nokia N95
© Blueunplugged.com
Et le GPS marche super bien.
Je recommande vivement Google Maps pour mobiles.
A moi le geotagging !
04/06/2007
Migrer FreeBSD sur un autre disque
Pour des raisons comme le manque de place ou un changement de matériel, on peut être amené à changer le disque de son installation FreeBSD. J'ai survécu à la manœuvre, voici comment.
Tout d'abord, je refais de la pub pour l'excellent FreeBSD Cheat Sheets, et bien sûr le FreeBSD Handbook. Ces deux docs donnent à peu près toutes les bases pour le système.
Pour l'opération qui nous concerne, je me suis servi de Moving to a Larger Hard Drive de FreeBSD Cheat Sheets. Mais je me suis rendu compte que la "recette" n'est pas tout à fait complète. Je la reprends donc ici, traduite en français, et annotée d'après mon expérience (en italiques dans le texte).
Cet article décrit la méthode pour migrer votre système FreeBSD vers un autre disque dur. Cette procédure suppose que vous utilisez des disques ATA ou SATA (le cas des disques SCSI serait similaire toutefois), et que FreeBSD est le seul système sur le disque dur.
Éteignez la machine et installez le nouveau disque dans l'ordinateur. Dans mon cas, j'ai plutôt installé l'ancien disque dans la nouvelle machine, car je changeais la machine, et le nouveau disque étant de connectique SATA, je n'aurais pas pu le connecter sur l'ancienne machine. J'ai donc compilé un noyau
GENERIC(comment compiler un noyau chez FreeBSD Cheat Sheets et dans le Handbook) avant d'installer le disque dans la nouvelle machine. Installer le nouveau disque en maître sur le canal ATA secondaire vous donnera la plus grande bande passante pour le transfert de données, mais vous pouvez installer le nouveau disque en esclave sur le contrôleur ATA primaire. Assurez-vous de paramétrer les cavaliers sur le nouveau disque et le disque existant de façon adéquate. Ces conseils sont inutiles dans le cas des disques SATA, et les nouveaux disques et contrôleurs ne perdent plus tellement de performances lorsqu'ils sont connectés à la même chaîne ATA.Démarrez en mode single user. Si vous utilisez FreeBSD 5.x ou 6.x, choisissez l'option Boot FreeBSD in single user mode dans le menu de démarrage. Sinon, pendant le décompte du bootloader, appuyez sur une touche quelconque autre que la touche Entrée, et à l'invite de démarrage, entrez la commande :
ok boot -s
Acceptez le shell par défaut (
/bin/sh), et à l'invite du shell, entrez les commandes suivantes :# fsck -p # mount -u / # mount -a -t ufs # swapon -a
Lancez
sysinstall:# /usr/sbin/sysinstall (Sur FreeBSD 4.x, c'est/stand/sysinstall)Choisissez Configure, puis Fdisk sur le menu, et sélectionnez votre nouveau disque (pour les disques ATA, le nouveau disque sera
ad1si c'est l'esclave primaire, ouad2si c'est le maître secondaire ; pour un disque SATA sur le canal 4, ça seraad8). Pour la suite de ce document, nous supposerons que le nouveau disque estad2(Dans mon cas, c'était en faitad12).Dans FDISK Partition Editor, appuyez sur A pour utiliser le disque entier (attention au clavier, QWERTY par défaut, A c'est pour utiliser tout le disque, Q c'est pour quitter !). Appuyez sur W pour écrire les modifications sur disque, confirmez votre choix sur l'avertissement qui vous dit que ce que vous faites ne devrait être fait que sur un système déjà installé où vous ajoutez un disque. Appuyez sur Q pour continuer.
À l'invite Install Boot Manager, choisissez le gestionnaire de démarrage approprié. Ce document suppose que FreeBSD est le seul système installé, donc choisissez le gestionnaire Standard.
De retour au menu sysinstall, choisissez Label.
Dans le Disklabel Editor, créez les partitions suivantes :
ad2s1a /mnt 512 Mo en UFS2 ad2s1b swap 4 Go en swap (4x la RAM du système) ad2s1d /mnt/var 8 Go en UFS2 + Softupdates ad2s1e /mnt/tmp 4 Go en UFS2 + Softupdates ad2s1f /mnt/usr le reste en UFS2 + Softupdates
Ce schéma suppose que votre système de fichiers existant est défini comme l'organisation par défaut de FreeBSD. Si votre schéma est différent, reproduisez-le. De plus, je liste ici les tailles de partitions por mon disque de 160 Go, agrandies par rapport aux valeurs par défaut en adéquation avec mes besoins, adaptez à votre situation.
Le plus simple pour partitionner est de laisser faire Disklabel Editor. Appuyez sur A pour peupler le disque avec les partitions standard avec les tailles préconisées. Vous pourrez par la suite supprimer celles dont vous voulez changer la taille et les recréer avec vos paramètres.
Notez que si vous supprimez la première partition (a), la partition que vous créerez aura le nom d au lieu de a (donc
ad2s1ddans notre exemple), à moins que vous ne spécifiez que le point de montage est/. Changez ensuite le point de montage en/mnten utilisant l'option M.Écrivez les changements sur le disque par W (confirmez), vous aurez probablement un message d'erreur sur l'impossibilité d'ajouter
ad2s1ben partition de swap, mais c'est normal, vous en avez déjà une ! Vous pouvez donc ignorer le message. Appuyez sur Q pour continuer.Quittez sysinstall.
Les nouvelles partitions devraient êtres montées sur /mnt. Sinon montez-les :
# mount /dev/ad2s1a /mnt # mount /dev/ad2s1d /mnt/var # mount /dev/ad2s1f /mnt/usr
/mnt/tmp n'est pas indispensable, ce sont des fichiers temporaires.
Copiez les partitions existantes :
# tar cf - --one-file-system -C / --exclude='mnt/*' . | tar xpvf - -C /mnt # tar cf - --one-file-system -C /var . | tar xpvf - -C /mnt/var # tar cf - --one-file-system -C /usr . | tar xpvf - -C /mnt/usr
Éteignez la machine et enlevez l'ancien disque. Déplacez le nouveau disque à l'emplacement logique de l'ancien (même canal ATA, même position maître/esclave). Assurez-vous d'avoir replacé les cavaliers de manière adéquate. Si vous passez d'un disque ATA à un disque SATA, changez les entrées du fichier /boot/fstab pour refléter le changement du nom du disque.
Avant :
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1e /tmp ufs rw 2 2
/dev/ad0s1f /usr ufs rw 2 2
/dev/ad0s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
Après :
# Device Mountpoint FStype Options Dump Pass#
/dev/ad2s1b none swap sw 0 0
/dev/ad2s1a / ufs rw 1 1
/dev/ad2s1e /tmp ufs rw 2 2
/dev/ad2s1f /usr ufs rw 2 2
/dev/ad2s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
Attention à ne pas changer la définition du CD-ROM.
Démarrez en mode single user comme indiqué précedemment.
À l'invite du shell, montez les partitions :
# fsck -p # mount -u / # mount -a -t ufs # swapon -a
Vérifiez que toutes les partitions sont correctement montées :
# mount
Vous devriez obtenir quelque chose comme :
/dev/ad0s1a on / (ufs, local) devfs on /dev (devfs, local) /dev/ad0s1e on /tmp (ufs, local, soft-updates) /dev/ad0s1f on /usr (ufs, local, soft-updates) /dev/ad0s1d on /var (ufs, local, soft-updates)
Dans le cas d'un disque SATA, le nom du disque devrait être différent et conforme à la modification du /etc/fstab.
Redémarrez et lisez les messages du boot pour vous assurer que le système fonctionne correctement.
25/09/2006
Fichier de localisation pour Quills 1.5
Celui proposé dans la distribution de Quills étant une traduction complètement littérale (et comportant des fautes de français assez graves), j'en ai refait un et je le propose ici.
03/07/2006
Postgray avec Postfix
Le graylisting facile.
Cet article (lâchement repompé en partie sur HowtoForge), montre comment on peut implémenter un système de graylisting en moins de 5 min sous FreeBSD, à l'aide de Postgrey (à condition que Postfix soit déjà installé).
Pour ceux qui n'ont pas encore Postfix d'installé, je les renvoie vers Postfix SMTP AUTH (and TLS) HOWTO, c'est le maître Jedi qui m'a tout appris. C'est un tutoriel pour Linux, mais c'est trivial d'adapter à FreeBSD.
Petite explication du graylisting, avant de commencer. Le graylisting, c'est une méthode de filtrage de spams. Mais contrairement aux white et blacklists, qui sont des listes figées et à entretien manuel, la graylist est adaptative. Pour cela, elle utilise une fonction du protocole SMTP qui permet de signaler au serveur de courrier expéditeur qu'on ne peut pas recevoir de courrier pour l'instant. Et comme indiqué dans le protocole, le serveur de courrier reviendra peu après pour réessayer la remise. Notre serveur n'acceptera de courrier de celui-ci que si un certain délai (par défaut 5 minutes) s'est écoulé depuis la première tentative.
Or les spammeurs n'utilisent pas de vrais serveurs de courrier, et ne réessaient pas l'envoi de leurs spams. Du coup, ces derniers n'arrivent jamais dans les boîtes des utilisateurs ! Simple et efficace.
Le problème de ce système est que ça introduit un délai supplémentaire dans la remise du courrier électronique, du temps d'attente avant acceptation du mail. On peu réduire le temps d'attente du graylist, mais cela pourrait réduire l'efficacité du système, si jamais un spammeur bombarde le serveur pendant plusieurs minutes (la probabilité est faible, cependant).
Autre inconvéniant, l'expéditeur du mail peut recevoir un message d'erreur comme quoi le serveur destinataire a refusé le message, alors qu'il a bien été transmis, avec seulement un peu de retard.
Passons à l'installation de Postgray et l'intégration à Postfix :
D'abord, installer Postgray par les ports :
$ portinstall postgray
Si tout se passe bien, Postgray est installé.
Sinon, il faut observer les messages pendant l'installation et résoudre en conséquence.
Maintenant, il faut le configurer pour qu'il démarre avec le système, on va l'activer dans /etc/rc.conf :
$ echo postgray_enable="YES" >> /etc/rc.conf
Lançons Postgray :
$ /usr/local/etc/rc.d/postgray.sh start
S'il n'y a pas d'erreurs rapportées, c'est bon, ça roule.
Sinon faut aller regarder dans les logs pour voir ce qui cloche.
Postgray est maintenant installé et lancé, mais il ne sert à rien pour l'instant, Postfix ne l'utilise pas. Configurons-le. Il faut éditer le fichier /usr/local/etc/postfix/main.cf. Dans ce fichier, il y a une section qui ressemble à ça :
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_invalid_hostname,
reject_rbl_client cbl.abuseat.org,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
C'est la section qui dit à Postfix ce que doit respecter les expéditeurs pour accepter du courrier. Je vais pas expliciter les paramètres ici (ceux de mon serveur), je vous renvoie au document cité plus haut qui concerne l'installation de Postfix.
Modifions la section comme suit :
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_invalid_hostname,
reject_rbl_client cbl.abuseat.org,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10023
On a donc ajouté la ligne check_policy_service inet:127.0.0.1:10023. Le nom du paramètre est assez explicite, on dit à Postfix de vérifier la politique de service, qui est disponible à l'adresse 127.0.0.1 (sur la machine locale), sur le port 10023 (port utilisé par défaut sous FreeBSD - peut-être défaut partout).
N'oubliez pas de mettre une virgule au paramètre d'avant, sinon ça marche pas.
Il reste à relancer Postfix :
$ postfix reload
Et voilà, en regardant les logs du service de courrier, vous devriez trouver des lignes comme celles-ci, maintenant :
Jul 3 11:41:49 annis postfix/smtpd[759]: NOQUEUE: reject: RCPT from mon-relai.mail.com[xxx.xxx.xxx.xxx]: 450 <toto@oo.com>: Recipient address rejected: Greylisted for 300 seconds (see http://isg.ee.ethz.ch/tools/postgrey/help/oo.com.html); from=<bozo@boo.com> to=<toto@oo.com> proto=ESMTP helo=<mon-relai.mail.com>
Le serveur mon-relai.mail.com a été placé en graylist pendant 5 minutes. Au bout de 5 minutes, la remise se fera normalement, et toto@oo.com recevra le mail de bozo@boo.com.
Et voilà, moins de spams en quelques minutes, c'est cool !
24/10/2005
Migration Plone 2.1
Le site officiel manque de docs, et vu que j'y ai été empêtré toute une semaine, je vais relater mon expérience dans la migration de Plone vers la version 2.1. Pour utilisateurs avertis de Zope/Plone.
Plone est un système de gestion de contenus open source et gratuit. C'est la technologie derrière mon site. Dernièrement, les gens de chez Plone ont sorti une nouvelle version, la 2.1, qui apporte quelques nouveautés et améliorations, dont l'adoption d'Archetypes en tant que base des types de contenus, à la place des types CMF (Content Management Framework), utilisés depuis les débuts de Plone.
De fait, la migration de Plone 2.0.5 (ou antérieur) à Plone 2.1 (et supérieur) implique la migration automatique des anciens types de contenus, ce qui peut être à la fois long et laborieux. Dans mon cas, il s'agissait de migrer 4 sites répartis sur deux instances.
Première instance, le site web de ma boîte, plus un petit site perso. Le site web a un contenu majoritairement statique, composés de documents (CMFDocument), avec quelques fichiers PDF stockés en CMFFile. Le site perso est très réduit en taille, avec des documents et quelques photos. Le Data.fs de l'instance pèse dans les 500 Mo.
Deuxième instance, le site intranet de ma boîte, plus un site communautaire sur un artiste vietnamien. Le site intranet est très lourd, et chargé à bloc de fichiers PDF stockés en CMFFile, ainsi que des CMDDocuments. Le site communautaire est composé de documents en CMFDocument, de photos en CMFPhoto et de quelques chansons en MP3 (CMFFile). Le Data.fs fait environ 1 Go.
La procédure normale de migration de Plone (sur FreeBSD, ou d'autres Unix) est de tout d'abord, faire une sauvegarde complète du site, avec tous les produits (on sait jamais), télécharger le tarball de la nouvelle version de Plone sur leur site, placer les produits nouveaux et mis à jour dans le répertoire Products de l'instance, et lancer la mise à jour dans la ZMI par l'outil portal_migration, qui sait détecter la version installée, et qui effectue la migration tout seul comme un grand.
La migration en elle-même effectue la mise à jour des produits de support de Plone, comme Archetypes, et met à jour le site Plone en lui-même (avec les changements de paramètres, nouvelles variables, etc). Mais la migration en version 2.1 effectue une étape importante supplémentaire : elle convertit les éléménts CMFTypes du site en éléments Archetypes. Ça consiste en fait à prendre un objet CMFType, créer un nouvel objet Archetype équivalent, et à répliquer tous les paramètres et données au nouvel objet, et détruire l'objet CMFType. Ainsi on obtient un objet Archetype d'apparence identique à l'ancien objet CMFType.
Le script effectuant cette manœuvre recatalogue le site, trouve les objets CMFTypes à partir du portal_catalog, et les convertit. Or cette opération est longue et consommatrice de mémoire et d'espace disque temporaire.
La première erreur que j'ai eue, c'est No space left on device... En effet, l'interprêteur python qui effectuait la mise à jour a saturé le répertoire /tmp de la machine. En même temps, ce n'était pas très difficile, la taille par défaut de la partition abritant /tmp sur FreeBSD est de 256 Mo. Ce qui est suffisant pour la plupart des cas, mais là, les devs de Plone recommendaient au moins la taille du Data.fs pour la migration. Là, j'en étais loin... Normalement, python utilise tour à tour les répertoires /tmp, /var/tmp, /usr/tmp et le répertoire courant (et peut-être un autre, je sais plus) pour stocker les fichiers temporaires, et ne devrait théoriquement jamais se trouver à court d'espace disque avant la saturation totale de tous les disques. Mais là, il semble qu'il n'y a qu'un seul fichier utilisé pour la migration, et qui grossit pendant toute la durée de l'opération. Donc pas de fallback possible...
Du coup, j'ai monté une machine dédiée à la migration, avec une seule partition couvrant tout le disque. Plus de problème d'espace disque. Mais j'ai été confronté à des erreurs de type Memory Error... Et c'est à peu près les pires erreurs qu'on peut rencontrer dans Zope/Plone, ça veut dire en gros qu'il y a eu une erreur de lecture/écriture sur le Data.fs irrécupérable...
Au bout de deux ou trois échecs de migration directe, je me suis dit que je ne pouvais pas continuer comme ça : il y a tellement de choses qui sont faites dans la migration que je ne sais pas où s'est produit l'erreur, et l'opération met tellement de temps que j'en aurais pour des semaines avant de dépatouiller la chose à ce rythme.
J'ai alors essayé de comprendre la procédure. Et c'est pas bien sorcier. D'abord, essayer de nettoyer et alléger le fichier Data.fs pour faciliter la migration. Rien de compliqué, recataloguer le site (<site>/portal_catalog, onglet Advanced, Update Catalog),recompresser le fichier (Control_Panel/Database/main, onglet Database, Pack).
Ensuite, mettre à jour les produits déjà installés (par portal_quickinstaller. Ensuite, installer les nouveaux produits dont Plone a besoin (toujours par portal_quickinstaller). La version 2.1 apporte les produits suivants :
- ATContentTypes
- ATReferenceBrowserWidget
- Archetypes
- CMFActionIcons
- CMFCalendar
- CMFFormController
- CMFQuickInstallerTool
- GroupUserFolder
- MimetypesRegistry
- PloneErrorReporting
- PloneLanguageTool
- PortalTransforms
- PortalTransport
- ResourceRegistries
- kupu
Tout réinstaller/installer, sauf ATContentTypes. Une fois que les autres produits sont installés sans erreurs, on passe au point crucial, ATContentTypes.
ATContentTypes, c'est le produit qui apporte les types de contenus Archetypes (comme son nom l'indique). Or ça implique de recataloguer le site avant, et de créer un double Archetype de chaque objet CMFTypes du site, et enfin de supprimer les objets CMFTypes. Et c'est long !
A l'installation du produit, il y a un Update Catalog qui se fait, ça prend un moment (surtout si le site est grand). Une fois le produit installé, il faut passer aux choses sérieuses : portal_atct. C'est un outil placé par ATContentTypes à la racine du site. La première fois, si vous aviez déjà installé Archetypes avant, l'outil vous indiquera que l'instance n'est pas à jour. Il faudra passer par Version Migration pour ce faire.
Une fois que l'instance est à jour, il faut passer à la migration des types, dans Type Migration. Comme l'indique l'outil, pour cette étape, il vaut mieux lancer Zope en mode debug, ou consulter régulièrement le log de Zope, pour voir ce qu'il fabrique. Un clic sur Migrate lance la migration des types. Là j'ai connu l'enfer, avec des Memory Error inexplicables (pas de veleur d'erreur...).
Mais j'ai fini par voir qu'il y a au début du log le chemin complet de l'objet en cours quand l'erreur s'est produite. Pour moi, c'était à peu près tous les objets binaires (type octet-stream), comme des fichiers exécutables ou des fichiers Zip stockés en tant que CMFFile. Il est possible que notre utilisation de TextIndexNG2, un produit permettant une indexation plus fine des langues non latines, ait contrinué à cette erreur, car les index sont également regénérés lors de la migration des types. Peut-être que TextIndexNG2 n'a pas trouvé de "lecteur" approprié pour ces types et qu'il s'est emmêlé les pinceaux...
En tous cas, supprimer ces objets a suffi pour que la migration des types se fasse sans erreurs (mais bon, il faut relancer la migration de types autant de fois qu'il y a de fichiers problématiques).
Une fois les types migrés, c'est gagné. Il suffit d'utiliser l'outil portal_migration, et lancer la migration Plone. Il va alors repasser les étapes qu'on a déjà effectué, mais il ne fera rien ou presque, vu que tout est installé et migré côté Archetypes (mais la mise à jour du catalog va quand même se faire, et ça prend du temps...). Il va donc mettre à jour l'instance Plone, et le site sera opérationnel sous la nouvelle version !
Merci d'avoir lu jusqu'ici, c'est brouillon parce que mes tentatives de migration ont été brouillonnes, mais j'espère que ça pourra vous aider si vous rencontrez des problèmes pendant la migration.
10/12/2004
Multi-écrans sous X sur FreeBSD
X Window peut faire du multi-écran, voici comment (youhou mon premier howto réellement intéressant !). - étendu 25 janvier 2005
Oui, X Window peut faire du multi-écran, et oui X.org peut le faire. Mais c'est pas super documenté sur le net (ou je cherche comme un pied, ce qui est aussi une possibilité
).
Le pire, c'est que c'est pas très compliqué. Mais Xorg ne configure pas automatiquement la prise en charge multi-écrans, même s'il détecte plusieurs cartes ! Il détecte bien les cartes et moniteurs, mais en lançant un gestionnaire de fenêtres, on se retrouve avec un seul écran fonctionnel, alors que le test marche bien... Pire encore, si on a une carte multi-affichages, on n'a qu'une seule carte et un seul moniteur !
Lisez mon papier sur xorg.conf si ce n'est déjà fait, j'y explique les bases à connaître sur le fichier de configuration de X.org, et je vais me baser dessus pour l'étendre à la prise en charge multi-écrans.
Les prérequis pour une configuration multi-écrans, c'est déjà plusieurs écrans
, et plusieurs cartes graphiques, ou un carte graphique pouvant gérer plusieurs écrans. De plus en plus de cartes ont cette fonction, il est probable que vous ayez une telle carte sans même le savoir. A fortiori si vous avez un ordinateur portable (assez) récent, la puce graphique intégrée en est capable.
Si vous n'avez pas tout ça, faut se faire une raison, il n'y aura pas de multi-affichage (je le précise, des fois on me pose des questions farfelues comme "peut-on lire une clé USB qui n'est pas reliée à l'ordinateur ?").
Si par bonheur (et abondance de place sur le bureau) vous avez deux écrans ou plus et des puces graphiques pouvant supporter vos écrans, on peut se tenter le coup de frime.
Première étape, avoir une configuration Xorg qui marche, sur un écran (voir là sinon). Si vous avez deux cartes vidéo, Xorg les aura trouvées (sinon voir plus bas pour une tentative de solution), et elles apparaîtront dans des sections Device séparées. Dans mon cas, j'ai une puce Intel Extreme Graphics 2 intégrée sur AGP et une Matrox Millenium PCI :
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option "NoAccel" # [<bool>]
#Option "SWcursor" # [<bool>]
#Option "ColorKey" # <i>
#Option "CacheLines" # <i>
#Option "Dac6Bit" # [<bool>]
#Option "DRI" # [<bool>]
#Option "NoDDC" # [<bool>]
#Option "ShowCache" # [<bool>]
#Option "XvMCSurfaces" # <i>
#Option "PageFlip" # [<bool>]
Identifier "Card0"
Driver "i810"
VendorName "Intel Corp."
BoardName "82865G Integrated Graphics Device"
BusID "PCI:0:2:0"
EndSection
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option "SWcursor" # [<bool>]
#Option "HWcursor" # [<bool>]
#Option "PciRetry" # [<bool>]
#Option "SyncOnGreen" # [<bool>]
#Option "NoAccel" # [<bool>]
#Option "ShowCache" # [<bool>]
#Option "Overlay" # [<str>]
#Option "MGASDRAM" # [<bool>]
#Option "ShadowFB" # [<bool>]
#Option "UseFBDev" # [<bool>]
#Option "ColorKey" # <i>
#Option "SetMclk" # <freq>
#Option "OverclockMem" # [<bool>]
#Option "VideoKey" # <i>
#Option "Rotate" # [<str>]
#Option "TexturedVideo" # [<bool>]
#Option "Crtc2Half" # [<bool>]
#Option "Crtc2Ram" # <i>
#Option "Int10" # [<bool>]
#Option "AGPMode" # <i>
#Option "AGPSize" # <i>
#Option "DigitalScreen1" # [<bool>]
#Option "DigitalScreen2" # [<bool>]
#Option "TV" # [<bool>]
#Option "TVStandard" # [<str>]
#Option "CableType" # [<str>]
#Option "NoHal" # [<bool>]
#Option "SwappedHead" # [<bool>]
#Option "DRI" # [<bool>]
#Option "MergedFB" # [<bool>]
#Option "Monitor2HSync" # [<str>]
#Option "Monitor2VRefresh" # [<str>]
#Option "Monitor2Position" # [<str>]
#Option "MetaModes" # [<str>]
Identifier "Card1"
Driver "mga"
VendorName "Matrox Graphics, Inc."
BoardName "MGA 2064W [Millennium]"
BusID "PCI:1:7:0"
EndSection
Le pilote mga comporte beaucoup d'options, dont des références à un 2ème moniteur ("Monitor2Position"), mais la plupart sont destinées aux Milleniums récentes, dans la série G, pas mon ancêtre.
Les cartes sont correctement identifiées en tant que "Card0" et "Card1". On va pouvoir s'en servir directement.
Si vous avez une carte intégrée, c'est différent, vous n'avez qu'un seul Device, comme ceci :
Section "Device"
Identifier "Card0"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
EndSection
L'astuce, c'est qu'on sait que cette carte peut gérer deux moniteurs. On va donc la dupliquer :
Section "Device"
Identifier "Card0"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "Card1"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
EndSection
On recopie tout pareil, sauf qu'on change le nom de la carte, en "Card1" sur la "deuxième" carte !
Notez que votre XFree86 ou X.org peut ne pas présenter tous ces paramètres. Par exemple, sous Ubuntu, et XFree86 4 (je connais pas la version exacte, désolé), on a ce genre de chose :
Section "Device" Identifier "ATI Technologies, Inc. Radeon Mobility 9000 M9 (R250 Lf)" Driver "ati" BusID "PCI:1:0:0" EndSection
Ils omettent les infos VendorName et BoardName, mais Identifier est très explicite. Ce qui n'est pas forcément pratique pour relire le fichier. Mais en même temps, Ubuntu n'est pas vraiment fait pour les geeks qui éditent les fichiers de conf X à la main.
Enfin, ajouter une option pour indiquer au driver de la carte quels affichages matériels dépendent de cette carte, avec la directive Screen (qui n'est pas la section Screen !) :
Section "Device"
Identifier "Card0"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
Screen 0
EndSection
Section "Device"
Identifier "Card1"
Driver "radeon"
VendorName "ATI"
BoardName "ATI Radeon Mobility M6"
Option "AGPMode" "4"
#VideoRam 32768
# NOTE: Enabling VideoRam produces strange errors,
# no problem, it detects 32MB anyway.
BusID "PCI:1:0:0"
Screen 1
EndSection
Voilà, on a maintenant deux cartes prêtes à l'emploi.
Si vous avez d'autres cartes ou si votre carte gère plus de deux affichages, continuez à copier-coller.
J'ai également deux déclarations Monitor, et deux Screen, dans ce xorg.conf :
Section "Monitor" #DisplaySize 300 230 # mm ### Uncomment if you don't want to default to DDC: # HorizSync 842150464.0 - 0.0 # VertRefresh 809972032.0 - 0.0 Identifier "Monitor0" VendorName "VSC" ModelName "VE510s" Option "DPMS" EndSection Section "Monitor" #DisplaySize 300 230 # mm ### Uncomment if you don't want to default to DDC: # HorizSync 1429222016.0 - 0.0 # HorizSync 30.0 - 70.0 # VertRefresh 1430467328.0 - 0.0 Identifier "Monitor1" VendorName "DEL" ModelName "DELL E771p" Option "DPMS" EndSection
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 1 EndSubSection SubSection "Display" Viewport 0 0 Depth 4 EndSubSection SubSection "Display" Viewport 0 0 Depth 8 EndSubSection SubSection "Display" Viewport 0 0 Depth 15 EndSubSection SubSection "Display" Viewport 0 0 Depth 16 EndSubSection SubSection "Display" Viewport 0 0 Depth 24 EndSubSection EndSection Section "Screen" Identifier "Screen1" Device "Card1" Monitor "Monitor1" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 1 EndSubSection SubSection "Display" Viewport 0 0 Depth 4 EndSubSection SubSection "Display" Viewport 0 0 Depth 8 EndSubSection SubSection "Display" Viewport 0 0 Depth 15 EndSubSection SubSection "Display" Viewport 0 0 Depth 16 EndSubSection SubSection "Display" Viewport 0 0 Depth 24 EndSubSection EndSection
Le "Screen0" utilise la carte "Card0" et le moniteur "Monitor0", de même que "Screen1" utilise les "1". Si vous avez une carte multi-affichages, dupliquez les sections Monitor et Screen que vous avez, et éditez-les.
Pour Monitor, comme Xorg ne le détecte pas tout seul, il faut le fabriquer à la main. Mettez "Monitor1" comme Identifier, à peu près ce que vous voulez en VendorName et ModelName. Pour les taux de rafraîchissement, il faudra vous référer au manuel ou au site du constructeur, ou une autre ressource sur le net pour les trouver. Et faites attention à ne pas mettre n'importe quoi, sinon le moniteur risque de brûler...
Pour Screen, faites juste attention à associer les bonnes cartes et les bon écrans, et à le nommer correctement (si vous gardez cette nomenclature de "0", "1","2", etc, ça ne devrait pas être trop difficile
). Reportez-vous au manuel pour connaître les différents modes d'affichage (profondeur de couleur, résolution) pour les reporter dans les SubSecton "Display". Les profondeurs de couleurs devraient suffire, pour FreeBSD.
J'ai vu qu'il existait des variantes (toujours chez Ubuntu) :
Section "Monitor" Identifier "Ecran générique" HorizSync 30-67 VertRefresh 50-75 Option "DPMS" EndSection Section "Screen" Identifier "Default Screen" Device "ATI Technologies, Inc. Radeon Mobility 9000 M9 (R250 Lf)" Monitor "Ecran générique" DefaultDepth 24 SubSection "Display" Depth 1 Modes "1400x1050" EndSubSection SubSection "Display" Depth 4 Modes "1400x1050" EndSubSection SubSection "Display" Depth 8 Modes "1400x1050" EndSubSection SubSection "Display" Depth 15 Modes "1400x1050" EndSubSection SubSection "Display" Depth 16 Modes "1400x1050" EndSubSection SubSection "Display" Depth 24 Modes "1400x1050" EndSubSection EndSection
La section Monitor a les fréquences de rafraîchissement de l'écran renseignés, alors que sur la même section de X.org de FreeBSD, elles sont auto-détectées par défaut. Donc dans le doute, suivez les préférences de votre serveur X, et pour ajouter une section, renseignez les valeurs qu'il mentionne dans les sections existantes (je sais pas si je suis clair, là
.
De même, les sous-sections Display de la section Screen sont légèrement différentes. X.org de FreeBSD décrit une variable Viewport, alors que XFree86 de Ubuntu décrit une variable Modes. Je ne suis malheureusement pas expert en serveurs X pour dire si c'est une différence entre XFree86 et X.org ou si c'est une différence d'implémentation entre FreeBSD et Ubuntu... Donc c'est ce que je disais, renseignez les infos conformément à ce qui existe dans votre fichier quand vous spécifiez des écrans et cartes supplémentaires.
Enfin, passons au ServerLayout. Il y a juste deux options à vérifier. Mon xorg.conf par défaut me disait ça :
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" RightOf "Screen0" InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
Notez les paramètres de Screen 1. Il donne le nom de l'affichage à utiliser, et une position relative par rapport à l'écran principal, "Screen0". Par défaut, l'écran secondaire est sensé être placé à droite de l'écran principal, donc RightOf. Or mon écran secondaire est place à gauche du principal. Je vais donc remplacer cette option par LeftOf :
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" LeftOf "Screen0" InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
Le test (X -xfconfig /<emplacement>/xorg.conf) me donnera bien la bonne position d'écran, et si je déplace le curseur à gauche, il partira bien sur l'écran secondaire. Mais le bureau du gestionnaire de fenêtres sera toujours confiné à un seul écran !
Le truc, c'est une option jamais définie par défaut dans le xorg.conf : "Xinerama". Elle permet d'utiliser les différents écrans en bureau étendu :
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 Screen 1 "Screen1" LeftOf "Screen0" InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" Option "Xinerama" "true" EndSection
Et voilà, vous avez un affichage multi-écrans fonctionnel sous X !
J'avais promis de dire un mot sur les cartes non reconnues, et je le fais ici. Il peut y avoir plusieurs raisons à la non-détection de la carte vidéo. Première raison, elle n'est pas supportée par la version de X que vous avez. Là, pas de miracles, il faut se récupérer le bon driver, le recompiler au besoin et retenter la détection. Si vous savez qu'elle est supportée et que pour une raison obscure elle n'est pas détectée, regardez dans le dmesg pour voir si elle apparaît dans les périphériques détectés par le noyau. Moi, la Matrox Millenium donne ça :
pci1: <display, VGA> at device 7.0 (no driver attached)
Le noyau sait que c'est une carte vidéo, mais n'a pas de pilote spécifique à y affecter. Notez que la carte est présente sur le bus pci1, périphérique 7.0. C'est ce nombre que vous devrez fournir à xorg.conf pour forcer l'utilisation de cette carte. Rappelez-vous ma section "Device" :
Section "Device" Identifier "Card1" Driver "mga" VendorName "Matrox Graphics, Inc." BoardName "MGA 2064W [Millennium]" BusID "PCI:1:7:0" EndSection
L'option BusID permet de désigner la carte utilisée. Il faut aussi déterminer le driver à utiliser pour la carte. Pour ça, je ne sais pas.
Mais en creusant sur le net, ça doit pouvoir se trouver...
Voilà, j'espère que ça a pu vous aider ! Merci de m'avoir lu.
09/12/2004
Administrer FreeBSD avec Webmin
Je ne suis pas un Dieu des fichiers de conf, donc j'utilise des logiciels qui m'aident. :)
Et Webmin le fait admirablement bien ! Il est disponible par les ports : portinstall webmin.
Une fois installé, il faut le configurer : /usr/local/lib/webmin/setup.sh, et l'activer dans /etc/rc.conf, et enfin lancer Webmin par son script de démarrage : /usr/local/etc/rc.d/webmin.sh start (enfin bon, portinstall vous dit tout ça à la fin de l'installation, hein ?).
Pour la configuration, acceptez tout par défaut, c'est très bien, prenez l'encryption SSL, et mettez un mot de passe non trivial. Ah, s'il vous demande le type et la version de votre système d'exploitation, c'est bien sûr FreeBSD (choix 42 pour Webmin 1.170) et 5.3 (choix 23 pour Webmin 1.170), pour ceux qui suivent mes howtos simplistes.
Et une fois lancé, Webmin est accessible par l'adresse https://localhost:10000, ou https://<nom d'hôte>:10000, ou encore https://<ip de la machine>:10000.
Webmin vous demande de vous identifier, mettez le nom d'utilisateur et le mot de passe créés lors de la configuration. Vous vous retrouvez alors dans l'interface principale de Webmin. Je ne vais pas faire un manuel d'utilisation de Webmin, il y en a déjà de très bien là.
Je vais plutôt présenter les modules que j'utilise souvent et/ou qui sont réellement utiles (et sous leur noms en anglais, je trouve que la traduction française est médiocre).
Upgrade Webmin
Section Webmin, Webmin Configuration, Upgrade Webmin.
C'est là que se trouvent les utilitaires de mise à jour de Webmin. Le développement de Webmin est très actif, et Webmin et les modules sont régulièrement mis à jour. C'est la première chose à faire à l'installation d'un Webmin, vérifier l'existance d'une nouvelle version, et l'installer au besoin. Le cadre Upgrade Webmin permet cela. Sélectionnez Latest version from www.webmin.com, cochez Delete old version's directory after upgrade? et appuyez sur Upgrade Webmin. Effacer le répertoire de l'ancienne version est plus propre, car les préférences et modules de tierce-partie sont copiés vers la nouvelle version. Mais si vous avez un doute sur la compatibilité ou la stabilité d'une nouvelle version, gardez l'ancien répertoire au cas où.
Le cadre Update modules now permet de mettre à jour les modules. Il marche de façon similaire à Upgrade Webmin.
Le cadre Update modules on schedule permet de maintenir les modules de Webmin à jour, en lançant une recherche de mises à jour régulièrement. Par défaut, la mise à jour automatique est désactivée. Activez-la en ochant la case Scheduled updating currently enabled. Par défaut, la mise à jour se lance tous les jours à 3 h, mais vous pouvez la lancer à l'heure que vous voulez, avec l'intervalle de votre choix. Vous avez aussi le choix de recevoir par mail les rapports de mise à jour (normalement seulement si un ou plusieurs modules ont été mis à jour). Ces mails sont utilies, car ils signalent aussi les nouvelles versions de Webmin. Webmin lui-même n'est pas mis à jour automatiquement.
Running Processes
Section System, Running Processes.
C'est à la fois un ps et un top. Ça vous donne la liste des processus actifs, que vous pouvez ordonner par PID, par utilisateur, par occupation mémoire, par utilisation CPU. Vous pouvez également rechercher un processus par propriétaire, par nom, ou par occupation processeur. Il est également possible de lancer une commande.
Scheduled Cron Jobs
Section System, Scheduled Cron Jobs.
Ce module permet d'éditer les tables cron du système. Il y a des formulaires très user friendly pour créer, modifier et supprimer des tâches planifiées.
Software Packages
Section System, Software Packages.
C'est une interface vers les ports. Je ne l'utilise personnellement pas pour installer des ports, mais pour voir les packages installés et les désinstaller au besoin. Il y a un bouton Package Tree qui donne la liste complète des ports installés, avec nom et version. En cliquant sur un port, vous pouvez lister les fichiers du logiciel en appuyant sur le bouton List Files, ou le déinstaller avec le bouton Uninstall. Si vous décidez de désinstaller un port, Webmin vous demandera confirmation, et si le port est une dépendance d'autres logiciels, il vous le signalera et refusera de le désinstaller.
System Logs
Section System, System Logs.
Comme le nom l'indique, c'est là que vous pouvez consulter les journaux du système. Vous pouvez en outre ajouter d'autres fichiers à la liste. C'est pratique pour regarder un journal rapidement, sans ouvrir un shell ou un éditeur.
Section Servers
Cette section comporte de nombreux modules pour administrer les divers serveurs éventuellement installés sur la machine. Je reviendrai sur ces modules dans le document traitant de tel ou tel serveur.
Network Interfaces
Section Networking, Network Configuration, Network Interfaces.
C'est là que vous pouvez configurer les diverses interfaces réseau. Similaire à Sysinstall.
Routing and Gateway
Section Networking, Network Configuration, Routing and Gateway.
Sélection de la passerelle réseau par défaut, activation du mode routeur.
DNS Client
Section Networking, Network Configuration, DNS Client.
Nom d'hôte, paramètres DNS, ordre de recherche, domaine.
Host Addresses
Section Networking, Network Configuration, Host Addresses.
Permet d'éditer le fichier /etc/hosts.
System Time
Section Hardware, System Time.
Permet de régler l'heure et le fuseau horaire de la machine, et de programmer la synchronisation avec un serveur de temps NTP.
Command Shell
Section Others, Command Shell.
C'est une ligne de commande, mais non interactive. On peut lancer des commandes et voir le résultat, mais on ne peut répondre aux questions posées par les scripts et programmes. Ça peut dépanner si on n'a pas de serveur SSH, ou s'il n'est pas joignable. Le module se rappelle des dernière commandes, et peut les relancer ou permet d'éditer d'anciennes commandes avant de les lancer.
Custom Commands
Section Others, Custom Commands.
Cette section permet de créer des boutons qui lancent une commande, avec des options (utilisateur, répertoire d'exécution, variables d'environnement) personnalisées. Utile si on a besoin de lancer une commande souvent, sans pour autant lancer un SSH.
File Manager
Section Other, File Manager.
C'est un vrai gestionnaire de fichiers en Java. Il tourne sur la machine cliente (dans le navigateur). Il est possible d'effectuer toutes les opérations standard (copier, coller, couper, renommer, supprimer, etc...), à l'exception de la gestion de permissions. Il est possible en outre de télécharger et d'envoyer des fichiers sur la machine. Il est assez lent au démarrage, mais a des performances honnêtes (pour un programme en Java) une fois lancé.
SSH/Telnet Login
Section Others, SSH/Telnet Login.
Un client SSH/Telnet en Java. Ce module est uniquement un client, pour un accès SSH ou Telnet, il faut un vrai serveur lancé sur la machine. Et suivant l'implémentation de la machine virtuelle Java, l'autocomplétion par la touche Tab peut ou peut ne pas marcher. Je vous conseille d'utiliser le Separate window mode dans Module Config, ça ouvrira une fenêtre à part pour le client SSH.
System and Server Status
Section Others, System and Server Status
Ce module surveille l'état du système et des services qui tournent dessus. Le bouton Scheduled Monitoring permet d'activer le suivi des services, le planning du suivi, quand envoyer une alerte en mail, à qui envoyer le mail, etc.
Upload and Download
Section Others, Upload and Download
Ce module permet d'envoyer des fichiers sur la machine soit à partir d'une URL, soit à partir d'un fichier sur la machine locale. Il est possible de spécifier la destination, le propriétaire du fichier à l'arrivée, s'il faut extraire les archives. Le téléchargement d'une URL peut être programmé à une heure déterminée, par exemple la nuit, pour ne pas réduire la bande passante le jour.
Le fichier xorg.conf sur FreeBSD
Suite de la configuration X sous FreeBSD, on va expliciter le fichier de configuration.
Maintenant qu'on a un X qui marche (sinon voir ici), on va essayer de comprendre sa configuration, et ça nous servira de base pour gérer plusieurs écrans.
Il faut dire en aparté qu'à part Webmin (j'en parle ici), je n'utilise presque aucun utilitaire de configuration système, je me tape les fichiers de config à la main sous vi (c'est un vim, je crois, sous FreeBSD). C'est un peu comme pour le HTML, j'ai l'impression que j'ai une plus grande maîtrise sur le code (c'est sûrement qu'une impression). Donc dans ce papier, on va faire les choses à la dure, au vi. Utilisez ee ou un éditeur similaire, pas un outil de forcené comme vi, dans la vie réelle. Moi l'habitude du vi me vient de mes cours à la fac, où on me disait que seul vi était un outil de base de tout Unix et assimilés. Mais bon, je crois que c'est plus vraiment le cas de nos jours... Puis il y a un utilitaire bien fait pour X (par X.org), en mode graphique, tout en menus (assez) joli qui modifie le xorg.conf tout seul comme un grand, xorgcfg. Mais ça fait pas de mal de comprendre, pour pouvoir bidouiller le fichier si jamais X se plante...
On va partir d'un fichier auto-configuré. Le fichier xorg.conf est séparé en sections :
ServerLayout
Cette section décrit la configuration de l'affichage. C'est un agrégat des autres sections décrites dans le fichier. Il indique quels périphériques utiliser pour l'affichage (carte(s), écran(s)), et quels dispositifs de pointage utiliser (souris, clavier(s)). Voici ce que me donne l'auto-configuration :
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
Identifierest juste le nom que vous donnez à cette configuration. Là,Xorgme l'a rempli tout seul, mais j'aurais tout aussi bien pu mettre un truc du genre"Mon écran de bombe de balle". Aucune incidence sur le fichier de configuration (à part si vous mettez des guillemets dans la chaîne, ce qui ferait des erreurs). Il doit être unique.Screenpermet d'indiquer les écrans en service. Un écran est défini dans une sectionScreen, qui décrit un ensemble carte et écran (physique). Voir plus bas. L'écran décrit ici est le numéro0, donc le premier écran, il reprend la définition de"Screen0", et il affiche le bureau à partir des coordonnées0 0, en abscisses et ordonnées. En résumé, c'est le premier (et seul) affichage, et il affiche le bureau à partir du haut gauche (les abscisses sont inversées, elles croissent vers le bas de l'affichage).- Les
InputDevicedécrivent le clavier et la souris à utiliser, en indiquant leur définition. La mention"CorePointer"et"CoreKeyboard"indiquent que ces périphériques sont les périphériques principaux, si jamais il y avait plus d'un seul clavier ou plus d'une seule souris sur le système (pensez aux tablettes graphiques, par exemple).
Files, Modules
Ces sections décrivent les extensions à charger et les chemins d'accès aux bibliothèques. Ne changez pas ces déclarations si vous ne savez pas ce qu'elles signifient, ou sur quoi elles ont effet. Les réglages par défaut sont adéquats pour la plupart des usages.
InputDevice
C'est là qu'on définit les périphériques de saisie, souris, claviers, tablettes graphiques, tablette à numériser, etc. Voyons un exemple de souris et un exemple de clavier :
Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/sysmouse" Option "Buttons" "5" Option "ZAxisMapping" "4 5" EndSection
Identifierest un nom pour cette définition de périphérique. On peut y mettre n'importe quoi, mais nommer les périphériques en rapport avec leur nature aide à la relecture du fichier.
Driverindique quel pilote utiliser pour ce périphérique. Généralement,"mouse"est le mieux indiqué pour une souris, à part si vous avez un driver particulier fourni par le fabricant (mais il y a des chances que ce ne soit pas une souris
.- Nous avons ensuite des déclarations
Option, qui permettent de préciser le comportement du périphérique."Protocol"indique le "driver" à utiliser."auto"est le choix le plus judicieux de nos jours, à moins que vous n'ayez une souris série (et qui a une souris série sur une machine récente de nos jours ?). Pour une souris USB,"auto"est une obligation."Device"indique le nom du périphérique dans/dev./dev/sysmouseest un périphérique virtuel vers le périphérique réel,/dev/ums0, pour une souris USB, par exemple.- Les options
"buttons"etZAxisMappingne sont pas créés par défaut parXorg. Ils permettent d'indiquer le nombre de "boutons" de la souris, et de définir le défilement de la roulette. Chacune des directions de la souris est considéré comme un bouton, donc sur une souris deux boutons et une roulette cliquable, on a 5 "boutons" en tout.ZAxisMappingindique quels boutons seront utilisés pour le défilement, ici la roulette haut et bas,"4 5". Si on met"1 2", les boutons gauche et droits feront défiler le texte dans les fenêtres ! Tout est possible.
Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" Option "XkbRules" "xorg" Option "XkbModel" "pc105" Option "XkbLayout" "fr" EndSection
Le clavier ne diffère pas beaucoup de la souris. Identifier est toujours un nom (presque) quelconque, et son Driver est "keyboard". Les options sont un peu différentes, toutefois.
"XkbRules"indique le comportement du clavier."xorg"est le comportement "standard" du clavier. Paraît qu'on peut le mettre "à la Emacs", mais vu que j'aime pas Emacs, je ne sais pas comment.
Bon, en 30 s de recherche manuelle (même pas par Google, la honte), je ne trouve pas de docs là-dessus. Je verrai si j'ai le temps.
"XkbModel"indique le type de clavier que vous avez. C'est plus important qu'on ne croit, car il y a de subtiles différences entre claviers du monde, en nombre de touches. Mais bon, les claviers modernes européens (français ?) comportent 105 touches, donc j'utilise"pc105". Et"XkbLayout"indique ce qu'on a comme sérigraphie dessus, pour que ça corresponde.
Se reporter à xorgcfgpour les layouts.
Monitor
Une des sections essentielles de xorg.xonf, car elle décrit l'écran physique.
Section "Monitor" #DisplaySize 300 230 # mm ### Uncomment if you don't want to default to DDC: # HorizSync 842150464.0 - 0.0 # VertRefresh 809972032.0 - 0.0 Identifier "Monitor0" VendorName "VSC" ModelName "VE510s" HorizSync 30.0 - 62.0 VertRefresh 50.0 - 75.0 Option "DPMS" EndSection
Si votre écran est compatible DCC, la carte graphique obtiendra automatiquement les fréquences optimales d'affichage. Mais comme on peut le voir, des fois, ça donne des résultats curieux...
DisplaySize, paramètre complètement optionnel, précise la taille physique de l'écran, en millimètres. Je ne sais pas bien à quoi ça peut servir ?HorizSync, spécifie les fréquences de balayage horizontaux de l'écran. La détection DCC donne des chiffres fantaisistes, et sur cet écran LCD, la carte envoyait une fréquence non supportée... J'ai donc dû trouver les spécifications sur le net, et j'ai mis la valeur moi-même :30.0 - 62.0, fréquence en Hz.VertRefresh, pareil queHorizSync, la détection donne n'importe quoi, j'ai mis les valeurs constructeur à la place :50.0 - 75.0, toujours en Hz. Attention, X prend pour argent comptant les fréquences manuelles spécifiées, si l'écran ne les supporte pas, il peut être abîmé par la manœuvre !VendorNameetModelNamesont obtenus par DCC, et sont optionnels. Ce sont la marque et le modèle de l'écran. Là, j'ai un Viewsonic VE510s.- Enfin,
"DPMS"indique que l'écran supporte les modes d'économie d'énergie, qu'il peut passer en veille et tout.
Device
Ici on décrit la carte graphique, ses capacités, son emplacement, tout ça.
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
### [arg]: arg optional
#Option "NoAccel" # [<bool>]
#Option "SWcursor" # [<bool>]
#Option "ColorKey" # <i>
#Option "CacheLines" # <i>
#Option "Dac6Bit" # [<bool>]
#Option "DRI" # [<bool>]
#Option "NoDDC" # [<bool>]
#Option "ShowCache" # [<bool>]
#Option "XvMCSurfaces" # <i>
#Option "PageFlip" # [<bool>]
Identifier "Card0"
Driver "i810"
VendorName "Intel Corp."
BoardName "82865G Integrated Graphics Device"
BusID "PCI:0:2:0"
EndSection
La détection marche plutôt bien, sur les X récents, et Xorg donne une liste exhaustive des options du driver de la carte. Les Intel Extreme Graphics sont pauvres en options...
Identifier, un nom.
Driver, le pilote le plus adapté pour la carte. Là, j'ai un Intel Extreme Graphics 2 sur un chipset Intel 865G, qui est pris en charge par le driver"i810".VendorNameetBoardName, c'est comme lesVendorNameetModelNamede la sectionMonitor, c'est pour la frime.
BusIDprécise l'emplacement de la carte. C'est un triplet de nombres. Ici"0:2:0", c'est le bus AGP (0), 3e emplacement (2), premier périphérique (0) (je suis pas complètement certain de cette explication, mais ça me semble avoir du sens). C'est le paramètre le plus important deDevice.
Screen
Ici on décrit l'affichage, en tant que couple Monitor/Device, et on spécifie les modes d'affichage disponibles.
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Viewport 0 0 Depth 1 EndSubSection SubSection "Display" Viewport 0 0 Depth 4 EndSubSection SubSection "Display" Viewport 0 0 Depth 8 EndSubSection SubSection "Display" Viewport 0 0 Depth 15 EndSubSection SubSection "Display" Viewport 0 0 Depth 16 EndSubSection SubSection "Display" Viewport 0 0 Depth 24 Modes "800x600" "1024x768" EndSubSection EndSection
Identifier, pareil, un nom.DeviceetMonitor, la carte et l'écran à utiliser pour cet affichage. Une seule carte et un seul écran par affichage. Pour un double affichage à partir de la même carte, il y a une autre astuce (voir Multi-écrans).- Chaque
SubSection "Display"contient la définition d'un mode d'affichage.Viewportindique à partir d'où afficher le bureau par défaut.0 0commence en haut à gauche. En mettant d'autres coordonnées, on peut afficher seulement une portion de l'écran (ou afficher le milieu du bureau par défaut ? A vrai dire j'ai jamais essayé).Depthindique la profondeur de couleurs à utiliser pour l'affichage. Il va de 1 à 32, d'habitude (peut-être plus pour des cartes de graphistes professionnels). Il y a uneSubSection "Display"par profondeur de couleur.Modespermet de définir les résolutions supportées par l'affichage dans cette profondeur de couleurs. En l'absence de cette valeur, les modes sont déduits du DCC. On peut forcer une certaine résolution en ne précisant que celle-ci. Par exemple, si je veux forcer l'affichage en 1024x768 en couleurs 24 bits, alors que le DCC préconise 1152x864, je mettraiSubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" EndSubSection
Voilà, j'espère que ça vous a plu et que ça vous a appris, parce que ça m'a pris un près de 2 heures à rédiger tout ça.
(quoi, autant de temps pour ÇA ?!
)
08/12/2004
Utiliser les Ports dans FreeBSD
Avoir un FreeBSD qui marche, c'est bien, avoir des logiciels qui tournent dessus, c'est mieux !
Les ports, c'est une collection de logiciels adaptés pour tourner sous FreeBSD. Il y a de tout, et on y trouve la quasi-totalité des logiciels libres jamais développés, ainsi que quelques logiciels commerciaux.
Regardez dans le Handbook (français), c'est plus complet.
FreeBSD propose des commandes pour gérer les packages des ports, pkg_add, pkg_delete, etc. Mais je trouve pas ça très pratique.
On va donc utiliser portupgrade, qui est plus agréable. Tapez la commande suivante : cd /usr/ports/sysutils/portupgrade && make install clean. Si tout va bien, portupgrade est installé. Sinon, reportez-vous aux messages d'erreur pour déterminer ce qui ne va pas.
Maintenant, on peut installer les logiciels des ports par la commande portinstall, et les mettre à jour par la commande portupgrade. Elles se lancent suivies du nom du port à installer/mettre à jour, et hop c'est fait.
Elles admettent aussi des options, voici celles dont je me sers couramment :
-f: force la réinstallation d'un port. En effet,portupgradene lance la mise à jour d'un port seulement si une nouvelle version est disponible.-M <argument de make>: passe les arguments<arguments de make>aumakepour la compilation du port.-a: réinstalle TOUS les ports installés. utilisé avec-f, reconstruit tous les logiciels installés par les ports. Utile lors des mises à jour.
Configurer X sous FreeBSD
Deuxième étape de l'installation de FreeBSD, la configuration de l'interface graphique.
Après l'installation du système en soi, passons à la configuration de X Window.
La vraie doc sérieuse et bien faite se trouve dans le Handbook (en french), comme toujours.
Petite note : je parle ici de FreeBSD 5.3 et supérieurs, donc comprenant X.Org par défaut, à la place de XFree86. Une sombre affaire de licence a fait détourner de XFree86 la plupart des projets et entreprises utilisateurs de X Window...
Si vous avez suivi mon howto, vous devriez avoir la base de X. Sinon, lancez Sysinstall (sysinstall ou /stand/sysinstall), choisissez Configure, Distributions, et X.Org (XFree86 pour FreeBSD 5.2.1 et inférieurs). Ne chipotons pas, prenons tout dans les sous-catégories (entrez dans la sous-catégorie et sélectionnez All). Sysinstall vous demande alors d'où copier les binaires, remettez votre CD FreeBSD dans le lecteur, et sélectionnez CD/DVD.
FreeBSD 5.3 ne propose plus le configuration X Window. Il va falloir se débrouiller à la main, dans la console.
Je suppose que si vous avez suivi jusqu'ici, vous savez vous connecter sur un système Unix. Sinon, voici commen faire (du moins pour ce howto) : à l'invite login:, tapez root, appuyez sur la touche entrée, tapez le mot de passe du compte, et appuyez sur entrée. Voilà, vous êtes connecté en tant que root. Si vous préférez utiliser un autre utilisateur, faites comme bon vous semble. Mais il faut que cet utilisateur soit membre du groupe wheel, pour pouvoir utiliser la commande su, pour passer en super utilisateur et configurer le système.
En tant que root, tapez Xorg -configure. Cela lance une routine d'auto-configuration de X qui essaie (plutôt bien) de détecter votre carte graphique, votre écran et vos dispositifs de saisie. Vous pouvez tester le résultat avec la commande Xorg -config xorg.conf.new. Si vous avez un écran gris avec une croix en guise de curseur, c'est bon, votre X est configuré correctement. Sortez de l'écran de test en appuyant sur Ctrl-Alt-Backspace. Cette combinaison de touches arrête immédiatement le serveur X et vous fait sortir du mode graphique.
Copiez maintenant le fichier xorg.conf.new en /etc/X11/xorg.conf : cp xorg.conf.new /etx/X11/xorg.conf (créez le répertoire /etc/X11 au besoin).
Installons maintenant le gestionnaire de fenêtres. On va utiliser portupgrade, expliqué ce document. Choisissez un gestionnaire, et installez-le par portinstall. Ici, je choisis Xfce, mais vous êtes libre de prendre Gnome ou KDE. Je lance donc la commande portinstall xfce, qui me propose xfce ou xfce4, je choisis le plus récent, xfce4. Pour Gnome, vous utiliserez portinstall gnome2, et portinstall kde pour KDE, ou autre chose pour autre chose.
Laissez décanter, et passons à la fin de l'installation. Il faut maintenant indiquer à X ce qu'il faut qu'il lance comme gestionnaire de fenêtres. Créez un fichier .xinitrc à la racine de votre répertoire personnel (/usr/home/ ou /root pour root). Mettez-y le nom du programme de lancement de votre gestionnaire de fenêtres. Pour Xfce, c'est /usr/X11R6/bin/xfce4-session. Pour Gnome, c'est /usr/X11R6/bin/gnome-session, et pour KDE, c'est exec startkde.
Tapez startx, et hop vous avez un environnement graphique prêt à l'emploi.

