lundi 30 juillet 2007

Multiconfiguration Xorg

Voilà mon problème: Sur mon lieu de travail j'utilise l'écran de mon portable ainsi qu'un écran plan 19' avec lequel je fait du Dualscreen (sans Xinerama). À la maison, je n'utilise que mon écran de portable et donc problème : Soit je choisi d'être toujours en configuration Dualscreen, au quel cas, chez moi j'ai la possibilité de lancer des application sur un écran inexistant (pas très pratique !). Soit je change constament de configuration à chaque reboot à la main. La solution que j'ai choisie me permet lors du boot de ma machine de choisir entre les modes Dualscreen et Monoscreen. Cette solution consiste à modifier les options de boot du kernel et d'ajouter au démarrage un script permettant, en fonction du paramètre choisi de booter soit avec un environement X configuré en Dualscreen ou Monoscreen. Pour mettre en place cette solution, on procède en trois étapes:
  1. Configuration du fichier /etc/xorg.conf
  2. Tout d'abord sauvez votre configuration actuelle (en Monoscreen je suppose) dans le fichier /etc/xorg-monoscreen.conf. Ensuite créez un fichier de configuration /etc/xorg-dualscreen.conf avec lequel vous allez configurer l'ensemble des options dualscreen (Pour la configuration de Xorg en mode DualScreen) Attention :Ces deux étapes dont primordiales pour la suite ! Pour pouvoir utiliser X convenablement après ces modifications, créez un lien /etc/X11/xorg.conf avec la configuration souhaitée :
    mv /etc/X11/xorg.conf /etc/X11/xorg.conf-old
    ls -s /etc/X11/xorg-monoscreen.conf /etc/xorg.conf
  3. Configuration des options de boot (GRUB)
  4. Chez moi, la configuration de grub a dû être changée comme il suit:
    ...
    title=Gentoo-2.6.20-r8 - [Monoscreen]
    root=(hd0,1)
    kernel=/boot/vmlinuz root=/dev/hda2 vga=791 splash=silent dualscreen=no
    
    title=Gentoo-2.6.20-r8 - [Dualscreen]
    root=(hd0,1)
    kernel=/boot/vmlinuz root=/dev/hda2 vga=791 splash=silent dualscreen=yes
    ...
    On peut donc voir que j'ajoute l'option dualscreen au kernel qui me permet de savoir dès le boot si je suis à la maison ou au travail.
  5. Le script d'autoconfiguration /etc/init.d/dualscreen
  6. C'est la partie la plus importante du mode autoconfiguration. Le script va choisir quelle configuration pour Xorg utiliser en fonction de l'option dualscreen passée au kernel.
    #!/bin/sh
    dualscreen=$(sed -e "s/.*dualscreen=\([^ ]*\).*/\1/" /proc/cmdline)
    
    if [ -h /etc/X11/xorg.conf ] 
    then
      rm /etc/X11/xorg.conf
    else
      echo "Warning: /etc/X11/xorg.conf is not a symbolic link keeping the old one"
      exit 1
    fi
    
    if [ "$dualscreen" = "yes" ]
    then
      ln -s /etc/X11/xorg-dualscreen.conf /etc/X11/xorg.conf
    else
      ln -s /etc/X11/xorg-onescreen.conf /etc/X11/xorg.conf
    fi
    
    Une fois que ce script est en place, il faut le rendre exécutable :
    chmod +x /etc/init.d/dualscreen
    La dernière étape consistera à exécuter ce script au démarrage (avant toute les application lançant X tel que gdm, kdm et xdm :
    Sur Debian/RedHat/Mandriva
    # ln -s /etc/init.d/dualscreen /etc/rc2.d/S40dualscreen
    Sur Gentoo
    # rc-update add dualscreen default
Si toutes ces opérations ont été éfféctuées avec succès, lors du boot, si vous choisissez le kernel en mode dualscreen ou monoscreen, votre configuration Xorg changera correctement.

Edit : 02-10-2007

Il semblerait que la nouvelle version de Xorg détecte directement la présence ou non de deux écrans, ce qui rend inutile cette astuce. Néanmoins, la démarche peut être utile pour d'autres problèmes

Aucun commentaire: