Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/11/2009, à 05:21

Le Galéanthrope

Wallpaper avec Twinview

Bonjour,

Tout ceux qui ont un double écran avec Twinview ont déjà eu le problème d'avoir leurs fond d'écran qui se retrouve étalé sur les deux écrans, c'est très laid. La solution c'est soit de trouver un fond d'écran pour la résolution totale des deux écrans ou soit de se débrouiller avec GIMP. Ici je vous donne une autre solution, c'est un petit logiciel en Bash que j'avais codé pour moi même (donc codé un peu à l'arrache mais marche bien) et que j'utilise depuis maintenant un bout de temps. Ne marche que pour deux écrans cote à cote et uniquement les fonds d'écrans en plein écran et uniquement sous GNOME. Il faudrait que je code un truc un peu mieux qui supporterait un nombre supérieur à 2 d'écran et s'adapterait facilement aux changements de résolutions d'écrans ect... mais je n'ai pas le temps et je ne l'aurais pas avant longtemps, et comme beaucoup de gens sur le forum demande à avoir les fond d'écrans avec Twinview, je file le code que j'utilise pour l'instant et qui marche très bien.

Ici le code :

#!/bin/bash

CONFDIR=~/.wallpapertwins
WALLPAPER="$CONFDIR/wallpaper"
LOGFILE="$CONFDIR/log"
CONFFILE="$CONFDIR/config.conf"

if [[ ! -d "$CONFDIR" ]]
then
    mkdir "$CONFDIR"
fi
if [[ ! -f "$CONFFILE" ]]
then
    echo "SCREEN1    " >> "$CONFFILE"
    echo "SCREEN2    " >> "$CONFFILE"
fi

screen1=($(cat "$CONFFILE" | grep "SCREEN1"))
screen1=${screen1[1]}
screen2=($(cat "$CONFFILE" | grep "SCREEN2"))
screen2=${screen2[1]}

if [[ ($screen1 == "" || $screen2 == "") && $1 != "config" ]]
then
    echo "Avant toute utilisation vous devez lancer :"
    echo "$(basename $0) config"
fi

if [[ $1 == "set" ]]
then
    if [[ $2 == "swap" ]]
    then
        if [[ $screen1 != $screen2 ]]
        then
            convert "$WALLPAPER-1" -resize $screen2\! "$WALLPAPER-tmp"
            convert "$WALLPAPER-2" -resize $screen1\! "$WALLPAPER-1"
        else
            mv "$WALLPAPER-1" "$WALLPAPER-tmp"
            mv "$WALLPAPER-2" "$WALLPAPER-1"
        fi
        mv "$WALLPAPER-tmp" "$WALLPAPER-2"
        montage "$WALLPAPER-1" "$WALLPAPER-2" -mode Concatenate -tile 2x "$WALLPAPER.jpg"
    elif [[ $2 == "add" ]]
    then
        if (( $# == 3 ))
        then
            if [[ -f "$3" ]]
            then
                if [[ $screen1 != $screen2 ]]
                then
                    convert "$WALLPAPER-2" -resize $screen1\! "$WALLPAPER-1"
                else
                    mv "$WALLPAPER-2" "$WALLPAPER-1"
                fi
                convert "$3" -resize $screen2\! "$WALLPAPER-2"
                montage "$WALLPAPER-1" "$WALLPAPER-2" -mode Concatenate -tile 2x "$WALLPAPER.jpg"
            else
                echo "$(basename $0): $3 n'existe pas ou n'est pas un fichier." >> $LOGFILE
                exit 1
            fi
         else
            echo "Utilisation : $(basename $0) add wallpaper.jpg"
            exit 1  
         fi
    elif (( $# < 2 ))
    then
        echo "Utilisation : $(basename $0) set wallpaper1.jpg [wallpaper2.jpg]"
        exit 1    
    elif [[ -f "$2" ]]
    then
        convert "$2" -resize $screen1\! "$WALLPAPER-1"
        if (( $# >= 3 ))
        then
            if [[ -f "$3" ]]
            then
                convert "$3" -resize $screen2\! "$WALLPAPER-2"
            else
                echo "$(basename $0): $3 n'existe pas ou n'est pas un fichier." >> $LOGFILE
                exit 1
            fi
            montage "$WALLPAPER-1" "$WALLPAPER-2" -mode Concatenate -tile 2x "$WALLPAPER.jpg"
        else
            if [[ $screen1 != $screen2 ]]
            then
                convert "$2" -resize $screen2\! "$WALLPAPER-2"
                montage "$WALLPAPER-1" "$WALLPAPER-2" -mode Concatenate -tile 2x "$WALLPAPER.jpg"
            else
                mv "$WALLPAPER-1" "$WALLPAPER.jpg"
            fi
        fi
    else
        echo "$(basename $0): $2 n'exite pas ou n'est pas un fichier." >> $LOGFILE
        exit 1
    fi
    if [[ $(gconftool -g /desktop/gnome/background/picture_filename) != "$WALLPAPER.jpg" ]]
    then
        gconftool -t str -s /desktop/gnome/background/picture_filename "$WALLPAPER.jpg"
        gconftool -t str -s /desktop/gnome/background/picture_options wallpaper
    fi
elif [[ $1 == "config" ]]
then
    if (( $# >= 2 ))
    then
        if (( $# == 3 ))
        then
            screen1="$2"
            screen2="$3"
        else
            echo "Utilisation : $(basename $0) config AxB CxD"
            echo "ou : $(basename $0) config //Pour lancer l'utilitaire graphique"
            exit 1
        fi
    else
        resolutions=($(zenity --entry \
              --title="Configuration Résolutions" \
              --text="WallpaperTwins à besoin de connaître vos résolutions d'écrans.
Veuillez indiquer la resolution de vos écrans sous la forme 'AxB(espace)CxD' (sans les guillemets) :" \
              --entry-text "1024x768 1024x768"))
        screen1=${resolutions[0]}
        screen2=${resolutions[1]}
    fi
    ex -s -c "%s/\(^SCREEN1 *\).*/\1    $screen1/|x" $CONFFILE
    ex -s -c "%s/\(^SCREEN2 *\).*/\1    $screen2/|x" $CONFFILE
elif [[ $1 == "info" ]]
then
    cat $CONFFILE
elif [[ $1 == "log" ]]
then
    cat $LOGFILE
else
    echo "Utilisation : $(basename $0) option [arguments]"
    echo "Options :"
    echo "set : mettre en place un wallpaper sur les deux écrans"
    echo "ou deux wallpaper, un pour chaque écran"
    echo "$(basename $0) set wallpaper1.jpg [wallpaper2.jpg]"
    echo "set swap : permuter les deux fonds d'écrans"
    echo "set add wallpaper1.jpg : envoyer le fond d'écran de droite sur la gauche"
    echo "et définir le nouveau fond d'écran de droite"
    echo "config : redefinir la resolution des écrans"
    echo "$(basename $0) config //Lance l'utilitaire graphique"
    echo "$(basename $0) config AxB CxD //Configure directement"
    echo "info : Pour voir la configuration"
    echo "log : Pour voir le fichier de log"
fi

Pour l'utiliser :
$ sudo apt-get install vim zenity imagemagick
Pour installer les dépendances, puis :
$ sudo gedit /usr/bin/wallpapertwins
Et vous y copiez le code et vous enregistrer.
Puis,
$ sudo chmod +x /usr/bin/wallpapertwins
Pour avoir le droit d'execution.

Pour commencer à utiliser le programme vous devez ouvrir une console et taper :
$ wallpapertwins config
Pour définir les résolutions de vos deux écrans. Puis vous pouvez taper :
$ wallpapertwins set wallpaper.jpg
Pour avoir wallpaper.jpg sur les deux écrans ou vous pouvez tapez :
$ wallpapertwins set wallpaper1.jpg wallpaper2.jpg
Pour avoir wallpaper1.jpg sur l'écran de gauche et wallpaper2.jpg sur l'écran de droite.

Il y a d'autre fonctions comme :
- "wallpapertwins set swap" pour intervertir les deux fonds d'écrans.
- "wallpapertwins set add wallpaper.jpg" qui va envoyer le fond d'écran de droite à gauche et définir wallpaper.jpg comme fond d'écran de droite.
- "wallpapertwins config" pour faire la config des écrans (si vous changer de config, il faudra redéfinir les fonds d'écrans)
- "wallpapertwins info" et "wallpapertwins log" pour lire la config actuelle et le fichier de log.

Le programme travaille les fonds d'écrans et enregistre les fichiers de config et de log dans ~/.wallpapertwins.

Et là, vous vous dîtes "super encore un logiciel en ligne de commande, quelle galère" mais je vous rassure, vous n'avez pas tout vu. Pour ceux qui ne connaissent pas il existe un très bon outil qui s'appelle nautilus-actions et qui permet de définir des actions pour nautilus. Ce que vous avez à faire est de copier le code qui suit dans un fichier "config.schemas" puis l'importer dans nautilus-actions (regarder la doc) :

<?xml version="1.0" encoding="UTF-8"?>
<gconfschemafile>
  <schemalist>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/label</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/label</applyto>
      <owner>nautilus-actions</owner>
      <type>string</type>
      <locale name="C">
        <default>Mettre en fond(s) d'écran(s)</default>
        <short>Étiquette de l'élément de menu</short>
        <long>L'étiquette de l'élément apparaissant dans le menu contextuel de Nautilus quand la sélection correspond aux conditions d'affichage</long>
      </locale>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/tooltip</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/tooltip</applyto>
      <owner>nautilus-actions</owner>
      <type>string</type>
      <locale name="C">
        <default>Mettre l'image ou les images séléctionnée(s) en fond(s) d'écran(s) avec wallpapertwins</default>
        <short>L'infobulle de l'élément de menu</short>
        <long>L'infobulle de l'élément apparaissant dans la barre d'état de Nautilus quand l'utilisateur pointe sa souris sur l'élément du menu contextuel de Nautilus</long>
      </locale>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/icon</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/icon</applyto>
      <owner>nautilus-actions</owner>
      <type>string</type>
      <locale name="C">
        <short>L'icône de l'élément de menu</short>
        <long>L'icône de l'élément apparaissant à coté du libellé dans le menu contextuel de Nautilus quand la sélection correspond aux conditions d'affichage</long>
      </locale>
      <default></default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/desc-name</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/desc-name</applyto>
      <owner>nautilus-actions</owner>
      <type>string</type>
      <locale name="C">
        <short>Un nom descriptif du profil</short>
        <long>Ce champ a pour objet de donner à l'utilisateur, un nom humain et lisible pour le profil de l'interface Nact. Si il n'est pas défini, une chaîne auto-générée sera utilisée pour le nom.</long>
      </locale>
      <default>Main</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/path</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/path</applyto>
      <owner>nautilus-actions</owner>
      <type>string</type>
      <locale name="C">
        <short>Le chemin de la commande</short>
        <long>Le chemin de la commande à lancer lorsque l'utilisateur sélectionne l'élément dans le menu contextuel de Nautilus</long>
      </locale>
      <default>/usr/bin/wallpapertwins</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/parameters</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/parameters</applyto>
      <owner>nautilus-actions</owner>
      <type>string</type>
      <locale name="C">
        <short>Les paramètres de la commande</short>
        <long>Les paramètres de la commande à lancer quand l'utilisateur sélectionne l'élément dans le menu contextuel de Nautilus.

Les paramètres peuvent contenir des options spéciales qui seront remplacées par des informations de Nautilus au lancement de la commande :

%d : le dossier de base des fichiers sélectionnés
%f : le nom du fichier sélectionné ou le nom du premier fichier si plusieurs fichiers sont sélectionnés
%m : la liste des noms des fichiers sélectionnés sans leurs chemins, séparés par des espaces
%M : la liste des fichiers/dossiers avec leurs chemins complets, séparés par des espaces
%u : l'URI GnomeVFS
%s : le protocole dans l'URI GnomeVFS
%h : le nom d'hôte de la machine dans l'URI GnomeVFS
%U : le nom d'utilisateur dans l'URI GnomeVFS
%% : le signe pourcentage</long>
      </locale>
      <default>set %M</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/basenames</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/basenames</applyto>
      <owner>nautilus-actions</owner>
      <type>list</type>
      <list_type>string</list_type>
      <locale name="C">
        <short>La liste des motifs de correspondance des fichiers/dossiers sélectionnés</short>
        <long>Une liste de chaînes texte avec les jokers « * » ou « ? » pour faire correspondre le(s) fichier(s)/dossier(s). Tous les éléments sélectionnés doivent correspondre avec au moins un des motifs pour que l'action apparaisse</long>
      </locale>
      <default>[*.png,*.jpg,*.svg]</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/matchcase</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/matchcase</applyto>
      <owner>nautilus-actions</owner>
      <type>bool</type>
      <locale name="C">
        <short>« vrai » si le motif de correspondance du nom de fichier respecte la casse, « faux » sinon</short>
        <long>Si vous avez besoin que le fichier corresponde à un motif en respectant la casse, positionnez cette clé à « vrai ». Si vous voulez que « *.jpg » puisse aussi correspondre à « photo.JPG », positionnez la à « faux »</long>
      </locale>
      <default>true</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/mimetypes</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/mimetypes</applyto>
      <owner>nautilus-actions</owner>
      <type>list</type>
      <list_type>string</list_type>
      <locale name="C">
        <short>La liste des motifs de correspondance des types MIME des fichiers/dossiers sélectionnés</short>
        <long>Une liste de chaînes texte avec les jokers « * » ou « ? » pour faire correspondre le(s) type(s) MIME des fichiers/dossiers sélectionnés. Tous les types MIME des éléments sélectionnés doivent correspondre avec au moins un des motifs pour que l'action apparaisse</long>
      </locale>
      <default>[*/*]</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/isfile</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/isfile</applyto>
      <owner>nautilus-actions</owner>
      <type>bool</type>
      <locale name="C">
        <short>« vrai » si la sélection peut contenir des fichiers, « faux » sinon</short>
        <long>This setting is tied in with the 'isdir' setting. The valid combinations are:

isfile=TRUE and isdir=FALSE: the selection may hold only files
isfile=FALSE and isdir=TRUE: the selection may hold only folders
isfile=TRUE and isdir=TRUE: the selection may hold both files and folders
isfile=FALSE and isdir=FALSE: this is an invalid combination (your configuration will never appear)</long>
      </locale>
      <default>true</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/isdir</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/isdir</applyto>
      <owner>nautilus-actions</owner>
      <type>bool</type>
      <locale name="C">
        <short>« vrai » si la sélection peut contenir des dossiers, « faux » sinon</short>
        <long>This setting is tied in with the 'isfile' setting. The valid combinations are:

isfile=TRUE and isdir=FALSE: the selection may hold only files
isfile=FALSE and isdir=TRUE: the selection may hold only folders
isfile=TRUE and isdir=TRUE: the selection may hold both files and folders
isfile=FALSE and isdir=FALSE: this is an invalid combination (your configuration will never appear)</long>
      </locale>
      <default>false</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/accept-multiple-files</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/accept-multiple-files</applyto>
      <owner>nautilus-actions</owner>
      <type>bool</type>
      <locale name="C">
        <short>« vrai » si la sélection contient plusieurs éléments, « faux » sinon</short>
        <long>Si vous avez besoin de sélectionner un ou plusieurs fichiers/dossiers, positionnez cette clé à « vrai ». Si vous désirez uniquement un fichier ou dossier, positionnez la à « faux »</long>
      </locale>
      <default>true</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/schemes</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/profile-main/schemes</applyto>
      <owner>nautilus-actions</owner>
      <type>list</type>
      <list_type>string</list_type>
      <locale name="C">
        <short>La liste des protocoles GnomeVFS où les fichiers sélectionnés devraient être situés</short>
        <long>Définit la liste des protocoles GnomeVFS valides à faire correspondre aux éléments sélectionnés. Le protocole GnomeVFS est le protocole utilisé pour accéder aux fichiers. Le mot-clé à utiliser est celui utilisé dans l'URI GnomeVFS.

Exemples d'URI GnomeVFS :
file:///tmp/foo.txt
sftp:///root@test.example.net/tmp/foo.txt

Les protocoles les plus courants sont :

« file » pour les fichiers locaux ;
« sftp » pour les fichiers accédés via SSH ;
« ftp » pour les fichiers accédés via FTP ;
« smb » pour les fichiers accédés via Samba (partage Windows) ;
« dav » pour les fichiers accédés via WeDav.

Tous les protocoles GnomeVFS utilisés par Nautilus peuvent être utilisés ici.</long>
      </locale>
      <default>[file]</default>
    </schema>
    <schema>
      <key>/schemas/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/version</key>
      <applyto>/apps/nautilus-actions/configurations/e9fa07b1-86e1-4ea5-93c9-4111f44575e1/version</applyto>
      <owner>nautilus-actions</owner>
      <type>string</type>
      <locale name="C">
        <short>La version du format de configuration</short>
        <long>La version du format de configuration qui sera utilisé pour gérer la compatibilité avec les versions antérieures</long>
      </locale>
      <default>2.0</default>
    </schema>
  </schemalist>
</gconfschemafile>

Et vous pourrez facilement définir vos fonds d'écrans à partir de nautilus en selectionnant un ou deux wallpaper et en sélectionnant "Mettre en fond(s) d'écran(s)".

Et voilà, merci à ceux qui ont lu et qui n'ont pas pris peur en voyant les blocs de code. Pour les programmeurs, toutes les améliorations/corrections sur le code sont les bienvenues.

Dernière modification par Le Galéanthrope (Le 20/11/2009, à 19:57)


Miaou ! ー Nyamiou Le Galéanthrope

Hors ligne

#2 Le 20/11/2009, à 16:55

4rocky4

Re : Wallpaper avec Twinview

Bonjour,

Merci pour cette solution mais j'ai un souci lorsque j'essaye de lancer ce programme.

$ wallpapertwins config

J'ai un Permission non accordée.

Que dois-je faire ?

Cordialement,

4rocky4

Hors ligne

#3 Le 20/11/2009, à 18:17

nisnis

Re : Wallpaper avec Twinview

Tu fais un clic droit sur le fichier tu vas dans propriétés en bas et ensuite dans l'onglet Permissions   tu coches Exécution au niveau de la ligne Propriétaire.

Dernière modification par nisnis (Le 20/11/2009, à 18:20)


"Un Windows meurt...Des Linux apparaissent !.."

Hors ligne

#4 Le 20/11/2009, à 20:00

Le Galéanthrope

Re : Wallpaper avec Twinview

Tu peut faire :

sudo chmod +x /usr/bin/wallpapertwins

Si tu as pas envie de te compliquer la vie avec nautilus.

Je sais que toutes ces lignes de commandes sont un peu compliqué mais j'essayerais de faire un logiciel en C avec un paquet deb et un applet quand j'aurais du temps (ce qui n'est pas pour tout de suite malheuresement).


Miaou ! ー Nyamiou Le Galéanthrope

Hors ligne

#5 Le 22/11/2009, à 02:28

4rocky4

Re : Wallpaper avec Twinview

Ok c'est tout bon. Joli travail et merci d'en faire profiter les autres smile

Hors ligne

#6 Le 25/11/2009, à 10:57

ftarkin

Re : Wallpaper avec Twinview

Ola
Moi j'ai un
'$ wallpapertwins config
Cette option n'est pas disponible. Veuillez consulter --help pour toutes les utilisations possibles.'

...

Et je suis bien en executable, etc...

Help...


Ordi perso monté en Core i3, 4 Go RAM Voyager 12.04 64
Dell Latitude E6210 (Core i3, 6 Go DDR3) Voyager 12.04 64
HP Z800 (biproc Xeon QuadCore 18 Go DDR3) Voyager 12.04 64

Hors ligne