Articles pour : 2004
- January (13)
- February (4)
- March (2)
- April (10)
- May (8)
- June (8)
- July (7)
- August (22)
- September (10)
- October (6)
- November (12)
- December (18)
27/12/2004
Joyeux Noël, 9Tel ! :)
9Tel m'a fait un beau cadeau pour Noël ! :)
Vous l'avez peut-être remarqué, mon site était mort depuis la nuit de Noël (presque pile à minuit). C'était ma liaison Neuf Télécom (que je raccourcis en "9Tel"
) qui était morte. Cause : le serveur d'authentification PPP ne répondait pas...
Vu que c'est arrivé pile pour Noël, et vu qu'on allait chez les parents de Séverine le lendemain, j'ai laissé couler, je me disais que ça reviendrait en temps voulu, et vu que je ne suis pas là pour l'utiliser, tant pis.
Quand je suis revenu à la maison le 26, le net n'était toujours pas revenu... Je me suis dit que les mecs de 9Tel étaient en congés de Noël, et que je devais patiemment attendre leur retour lundi matin. Mais vu que je suis un net junkie, j'ai pas tenu, et j'ai appelé l'assistance technique de chez 9Tel.
Le mec au tél était sympa (surtout pour un dimanche à 21 h), mais il me prenait quand même pour une bille, et a essayé de "réinitialiser la pile TCP de [mon] ordinateur", malgré que je lui aie dit que j'utilisais un routeur...
En même temps, il a pas l'air mauvais, le mec, vu qu'il soupçonne des problèmes de mon côté (moi je le fais tout le temps
). Mais bon, il ne savait pas à qui il avait affaire (à faire ?).
Je lui ai donc (assez) poliment fait comprendre que le problème était de leur côté, et il a essayé de me fournir plusieurs explications :
- Ma demande de changement de ligne a été prise en compte : c'est le passage de 2 Mbps à 5 Mbps (peut-être plus si j'ai du bol, mais je suis en bordure de Seine, et j'ai l'air d'être assez loin du central). Mais bon, ça ne devrait pas me couper la ligne pour autant.
- Un serveur est tombé, et il faut que l'équipe technique s'en occupe : c'est bien ce que je pense, mais bon, si c'est le serveur d'authtification, ils n'ont n'ont sûrement pas un pour moi tout seul... Et depuis 2 jours ils devraient l'avoir remarqué.
- Une liaison entre 9Tel et France Télécom est rompue : là, non, ça n'explique pas du tout la situation. J'espère pour 9Tel qu'ils ont leurs serveurs d'authentification et DHCP sur leur propre sous-réseau sans passer par l'infrastructure FT...
Finalement le mec me dit qu'il fait remonter ça et qu'il faudra que je rappelle si c'est pas revenu jeudi. Jeudi, c'est un peu dur, je suis en vacances cette semaine, que vais-je faire sans le net ?!
Aujourd'hui à 13 h, je me décide à rappeler pour avoir une explication qui tienne la route. Manque de bol, je me prends une tonalité occupé après 1 minute 25 secondes... Je laisse tomber pour le moment, je vais manger, je joue à la GameCube, et vers 18 h, je reviens m'intéresser à ma liaison ADSL.
Et là, miracle, les loupiotes d'activité de la NeufBox clognotent ! Incrédule, je regarde la page de statut de mon routeur, et il m'indique fièrement Connected !
Le net est revenu !
Je relève donc mon mail, je lis mes news des trois derniers jours (peu nombreux, week-end de fêtes oblige), et je remarque que mon client Grenouille s'active. Je regarde les débits, je ne sais même pas pourquoi, par curiosité, je pense, et là, je vois 467,27 ko/s en download. Je ne tilte pas tout de suite, je lance la calculatrice, et je calcule le débit en kbps : 3738,16 kbps. C'est beaucoup plus que mes 2 Mbps habituels.
Pris d'un soudain doute, je lance le test de débit de 60 millions de Consommateurs. Et voilà ce que ça me donne (deux fois de suite, j'y ai pas cru la première fois) :

Test de téléchargement de 60 millions
9Tel m'a passé au 2 à 5 Mbps, comme promis (c'est ce qu'ils m'ont dit à l'inscription, que j'aurai entre 2 et 5 Mbps) ! Alors que le mec au tél me disait que ça mettrait 3 semaines !
Du coup, j'ai eu une explication valable, ou du moins une compensation satisfaisante pour les 2 jours de coupure. Il y a des gens qui se plaignent de 9Tel, mais moi, j'en suis pas mal content.
25/12/2004
Merry Christmas !
...Ou joyeux Noël en bon french. ;)
J'espère que vous avez tous eu de chouettes cadeaux et tout et tout.
Moi je suis en train de les découvrir... Et non, j'ai pas posté ça le soir de Noël, mais un jour avant, et je l'ai programmé pour le jour J. Bien non ?
19/12/2004
Checkout
Mon crime parfait a marché. :)
Et je me demande s'il y avait vraiment besoin de faire tout ça.
Je suis allé à l'accueil du magasin, j'ai demandé à rendre les chaussures, la fille me demande pourquoi, je lui dis qu'elles sont trop grandes, elle regarde les talons des chaussures (pourquoi ?), et elle me fait un bon d'échange/remboursement.
Je m'empresse de me faire rembourser et hop l'affaire est dans le sac, j'ai l'argent des chaussures.
17/12/2004
Crime parfait
Je suis stupide et ingénieux à la fois. :)
Disclaimer : ça va être une longue histoire, préparez-vous.
Tout a commencé quand un ami m'a proposé une combine pour avoir des chaussures de marque à pas cher. Personnellement, j'avais entendu parler de ces combines, mais je n'y ai jamais pris part, soit parce que ça ne m'intéressait pas, soit parce que je ne connaissais pas les bonnes personnes.
Mais cette fois-ci, j'avais eu du bol.
En fait, le frère de mon ami travaille en intérim dans l'entrepôt d'un grossiste, et ils peuvent acheter certains articles presque à moitié prix. Dont ces chaussures. Ils peut en acheter tant qu'il en veut, mais l'entreprise n'a pas tous les modèles et toutes les pointures en stock (sinon ça serait trop beau).
Je suis donc allé dans un magasin d'articles de sport et j'ai "choisi" les chaussures que je voulais. J'ai "passé commande", mais au bout d'une semaine, mon ami m'annonce que les modèles que je voulais ne sont pas présentes dans le stock.
C'est pas si grave en soi, les chaussures en question étaient déjà en promotion dans le magasin où je suis allé. J'y suis donc retourné les acheter. Mais il y a que je ne suis pas très intéressé dans les vêtements et chaussures, d'habitude. Et ça fait bien 3 ans que j'achète les mêmes chaussures entrée de gamme de la marque du magasin, qui me durent super longtemps (entre 6 mois et 1 an et demi). Du coup, j'ai même oublié comment bien choisir des chaussures.
Je sais que ça a l'air d'une blague, mais c'est vrai.
J'ai donc sommairement essayé les chaussures à ma première visite, et j'ai donc acheté les chaussures en la pointure que j'avais repéré. En plus avec le monde un samedi près des fêtes, ça ne m'encourageait pas à réessayer les pompes.
J'en étais content, elles ressemblaient aux tennis que j'avais d'habitude, en plus jolies.
Mais à la fin de la première journée à les porter, j'ai senti que mon mollet me faisait mal. Je me suis demandé si je ne m'étais pas cogné pendant la nuit, mais non, j'avais pas de trace de coup. C'est seulement au deuxième jour que je me suis rendu compte : les chaussures étaient trop grandes, et du coup je devais plier le mollet plus que de raisonnable pour marcher...
Je me suis dit au début qu'il fallait que je m'habitue, mais au bout de la journée, c'était intenable. Je ne pouvais plus porter ces chaussures... Et ça me posait un problème : j'avais déjà dépensé plus du double de mon budget tennis génériques pour ces chaussures de marque, et il m'en fallait d'autres. Et j'estimais qu'ayant marché deux jours avec dans la rue, elle n'étaient pas retournables... C'est là que je me rappelle les conseils de ma pôvre môman pour choisir des chaussures : regarder où arrive le gros orteil, prendre des chaussures qui serrent un peu, parce qu'elles sont se détendre avec le temps, etc... A force de prendre les mêmes chaussures tout le temps, j'avais oublié tout ça (je suis stupide)...
Mais bon, il m'a fallu voir la réalité en face : je devais acheter des chaussures qui m'aille. Je suis donc retourné au magasin le soir même pour racheter les mêmes en plus petites. C'est là que l'histoire devient amusante : comme c'est des chaussures en promo, il n'y en a plus à ma pointure... Et il n'y en aura plus.
Je dois me décider donc à en acheter d'autres. Et désespoir, elles coûtent toutes plus cher que les trop grandes...
Je suis donc contraint d'exploser mon budget chaussures de 500 %... Pire encore, un vendeur me dit que je peux les essayer quelques jours chez moi, et que je peux les ramener sous 15 jours si elles ne me vont pas, tant que je ne marche pas dehors avec...
Dès que j'ai entendu "ramener", je me suis cru sauvé, mais j'ai effectivement marché dehors avec, je suis allé au boulot avec ! Je suis donc rentré un peu dég, mais Séverine me disait d'essayer quand même de rendre les chaussures trop grandes, vu qu'elles étaient encore très largement neuves (ou du moins semblaient neuves).
J'ai donc observé en détails les chaussures. En effet, elles ont encore un air neuf. Normal, je les ai portées 2 jours, et je suis resté assis la plupart du temps, et elles ont été réellement à l'extérieur une heure de temps.
J'ai donc soigneusement nettoyé les semelles, et elles paraissaient en effet neuves et jamais portées. Mais je me suis rendu compte en regardant mes nouvelles (nouvelles !) chaussures que les trop grandes n'avait plus toutes ces étiquettes de prix, de composition de matériau et tout et tout qui ornent toute paire de chaussures neuves jamais portées.
Et là, je trouve mon idée diabolique : j'ai une paire de chaussures à l'allure neuves mais sans aucune étiquette, et une autre paire neuve avec toutes ses étiquettes. J'ai donc soigneusement détaché les bolducs de la nouvelle paire et j'ai rattaché les étiquettes de l'ancienne avec. J'ai retrouvé les autocollants dans la poubelle et je les ai recollés sur les chaussures. Au final, elles ont l'air fraîchement achetées.
Le seul défaut, c'est que la semelle est un rien abîmée par l'asphalte, mais c'est pas très visible.
Je vais donc aller demain les rendre et me faire rembourser. Si ça marche, mon dépassement de budget chaussures descendra à 300 % seulement.
Je me garde tous les atouts, j'irai le week-end avant Noël, avec le rush et tout, ils ne devraient pas trop tergiverser. En plus, j'ai publié cet article environ 24 heures avant mon "forfait", je leur donne une chance.
Confiture
Je suis admin réseau/système. Je commence à en devenir un rudement bon.
Parce que je commence à être un gros enfoiré au boulot.
Et si me je rappelle bien, on médisait à propos de l'admin à la fac. Et pourtant il faisait du super boulot.
blague à part, je crois que je deviens plus irascible envers mes utilisateurs, parce qu'ils me posent toujours les mêmes questions. Et j'ai le défaut de ne pas aimer les redites et les rediffusions. Je crois que c'est lié au fait que j'ai une bonne mémoire. J'ai l'impression de refaire les mêmes choses à chaque fois.
En même temps, je me dis que si les glorieux élus de mon association me lâchaient un peu avec leurs questions triviales, ça irait un peu mieux. D'ailleurs, la dernière bonne histoire : la semaine dernière une glorieuse élue me dit qu'elle a des trucs bizarres "sur la fenêtre bleue qui s'ouvre au démarrage", et si elle peut les effacer (elle avait atomisé son fichier de données Outlook ainsi que son carnet d'adresses l'avant-veille parce qu'elle a fait le ménage et vu qu'elle n'arrivait pas à lire le contenu de ces fichiers, elle a conclu qu'elle en n'avait pas besoin). Je me suis demandé ce qu'était cette fenêtre bleue. J'ai mis 5 minutes à comprendre (et dieu sait que c'est long, 5 minutes quand on a l'impression de parler à un teckel). Elle parlait du bureau. Sérieusement, du bureau. Du fond d'écran. Et elle voulait dégager un fichier temporaire, avec un gros .TMP à la fin.
Et je dois avouer que d'assurer le support pour des gens qui n'ont même pas les notions de base me gonfle. Il y a des jours, j'ai envie d'embaucher un tas de stagiaires pour répondre au téléphone et réparer les petits bobos informatiques et de juste assurer le support niveau 2.
Le pire, c'est que nos très glorieux élus n'ont aucune idée de la qualité de support dont ils bénéficient. Le proverbe dit : "De la confiture pour les cochons".
10/12/2004
MSN Search dans le vent
Le moteur de Microsoft ratisse le net, mais n'a pas tellement de succès que ça, d'après les stats de mon site.
Microsoft s'est démené pour améliorer son moteur de recherche Internet, MSN Search. Ils voudraient que MSN Search devienne le nouveau Google.
Hé bien, ils ont du chemin à faire !
Car quand je regarde les stats de mon site, je vois que mon plus "gros" visiteur chaque mois n'est nul autre que... MSNBot ! Voici les stats des robots pour le mois de novembre :
Statisques des robots
MSNBot a totalisé presque 1,5 Go de trafic ! Comparez ça au trafic de vraies visites de vraies personnes, de 125 Mo dans le mois ! Je parle bien de 1,5 Go pour MSNBot, et de 125 Mo pour les vraies personnes !
Bon, si encore tout ce trafic était rentable, et que la masse de données cumulée par MSNBot profitait à MSN Search, ça serait bien... Mais voilà les origines des visites de mon site :
Origine des connexions
C'était bien prévisible, Google gagne par KO. Le premier nombre est le nombre de pages, le second le nombre de hits. J'ai près de 30 fois plus de visites par Google que par MSN Search... Et pourtant GoogleBot n'a transféré que 10 Mo dans le mois...
Des fois, je trouve que Microsoft fait vraiment des usines à gaz. Des fois, je sais que Microsoft fait des usines à gaz. Mais ce que je sais tout le temps, c'est que mon site, avec son nombre de visites minuscule, est un monument de l'underground.
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 ?!
)
WTFM
En fait c'est pas facile d'écrire des manuels...
J'ai mis quelques articles en ligne dans Done that sur les trucs que j'ai fait sur FreeBSD. C'est les trucs bateau genre installation et configuration X Window qu'on trouve partout sur le net, et en super mieux (premier exemple, le FreeBSD Handbook (en français).
Je me rends compte que c'est pas facile d'étaler sa confiture... Mais bon, je vais essayer de faire mieux, je vais mettre en ligne un howto pour l'affichage multi-écran sous X, qui n'est pas forcément bien documenté (et qui manque cruellement dans le Handbook.

