web-dev-qa-db-fra.com

Différents fonds d'écran sur plusieurs moniteurs

J'ai un ordinateur portable et un moniteur. La plupart du temps, mon ordinateur portable est connecté au moniteur via HDMI. J'utilise Ubuntu Gnome 14.04 et voici ce que je veux:

  • Quand aucun moniteur n'est connecté, je veux une simple image de fond
  • Lorsque le moniteur est connecté, j'aimerais avoir la même image d’arrière-plan sur mon ordinateur portable et une autre sur mon moniteur.

Est-ce possible? J'ai trouvé cette question ainsi que azote . Mais les deux ne m'ont pas aidé.

Modifier:

Après avoir exécuté gnome-Tweak-tool, allez à l’onglet "Bureau" dans le panneau de gauche, puis désactivez le paramètre "Demander au gestionnaire de fichiers de gérer le bureau".

Source: Forums Ubunt .

Malheureusement, je ne parviens pas à trouver cela dans mon outil Gnome-Tweak: gnome-Tweak-tool

J'ai essayé de trouver la même configuration en utilisant dconf-editor sous org.gnome.desktop.background mais tout ce qu'il a dit était:

Résumé: dessiner un fond d'écran
Description: Demandez à GNOME de dessiner l’arrière-plan du bureau. OBSOLÈTE: cette clé est obsolète et ignorée.

De plus, mon gnome-Shell --version est GNOME Shell 3.10.4.

In this Gist est la sortie de xrandr. Le premier est avec le second moniteur connecté. La seconde est sans elle.

16
byf-ferdy

L'astuce

Il semble impossible de définir séparément les fonds d'écran pour l'écran principal et le deuxième écran. Ce que peut être fait est toutefois de définir un fond d’écran et de l’étendre sur deux écrans. Nous pouvons créer automatiquement une image panoramique de deux fonds d'écran de votre choix et (également automatiquement) changer le fond d'écran et les options d'image, selon que le deuxième écran est connecté ou non.
Pour que cela ait l’air agréable, il est nécessaire qu’au moins la résolution d’écran verticale des deux écrans soit identique, ce qui est le cas dans votre cas.

enter image description here

En pratique

Préparation

Dans cette solution, le travail de préparation que vous devez effectuer est le suivant:

  • Tout d’abord, installez imagemagick pour créer automatiquement l’image d’extension:

    Sudo apt-get install imagemagick
    
  • Préparez deux images de fond distinctes de votre choix pour les deux écrans:

    • Les dimensions doivent exactement correspondre aux dimensions de l'écran (16: 9 dans votre cas)
    • La résolution verticale des deux images doit être exactement la même.

    appelez-les screen_1.jpeg et screen_2.jpeg (exactement ces noms). Un script va créer l'image étendue.

  • Créez un dossier dans votre répertoire personnel et copiez les deux images dans le dossier.

  • Copiez le script ci-dessous dans un fichier vide et enregistrez-le sous le nom auto_wall.py, avec les deux images que vous avez préparées.

  • Dans la section head du script, il y a une ligne:

    screen_check = "HDMI-0 connected"
    

    si nécessaire, remplacez HDMI-0 par <your_second_screenname> (exécutez la commande xrandr si nécessaire pour le savoir)

Exécutez le script (et maintenez-le en arrière-plan) à l'aide de la commande suivante:

python3 /path/to/auto_wall.py

Maintenant, si vous connectez votre deuxième écran, le papier peint sur votre deuxième écran devrait basculer dans quelques secondes vers screen_2.jpeg que vous avez préparé.

  • Si tout fonctionne bien, ajoutez-le à vos applications de démarrage.

Le scénario

#!/usr/bin/env python3

import subprocess
import os
import time

curr_dir = os.path.dirname(os.path.abspath(__file__))
screen_check = "HDMI-0 connected"

single_picture = "'file://"+curr_dir+"/screen_1.jpeg'"
double_picture = "'file://"+curr_dir+"/span_image.jpeg'"

def execute_set(command):
    subprocess.call(["/bin/bash", "-c", command])

def execute_get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()

def switch_tosingle():
    execute_set("gsettings set org.gnome.desktop.background picture-uri "+single_picture)
    execute_set("gsettings set org.gnome.desktop.background picture-options zoom")

def switch_todouble():
    if not os.path.exists(double_picture):
        create_spanimage()
    execute_set("gsettings set org.gnome.desktop.background picture-uri "+double_picture)
    execute_set("gsettings set org.gnome.desktop.background picture-options spanned")

def create_spanimage():
    image_1 = curr_dir+"/"+"screen_1.jpeg"
    image_2 = curr_dir+"/"+"screen_2.jpeg"
    span_image = curr_dir+"/"+"span_image.jpeg"
    execute_set("convert "+image_1+" "+image_2+" "+"+append "+span_image)

def check_ifconnected():
    command = "xrandr"
    check = execute_get(command)
    if screen_check in check:
        return True

def check_wallpaper():
    check = execute_get("gsettings get org.gnome.desktop.background picture-uri")
    if check == single_picture:
        return "single"
    Elif check == double_picture:
        return "double"

def arrange():
    test = (check_ifconnected(), check_wallpaper())
    if test == (True, "double") or test == (False, "single"):
        pass
    Elif test[0] == True:
        switch_todouble()
    else:
        switch_tosingle()

while True:
    arrange()
    time.sleep(5)

Remplacement d'images

Si vous souhaitez modifier le ou les papiers peints, remplacez simplement une ou les deux images que vous avez copiées dans le dossier (en tenant compte de leur nom) et supprimez le span_image.jpeg créé par le script.

Je l'ai testé sous Ubuntu 14.04 et 14.10, et cela a parfaitement fonctionné. Le fait que vous utilisiez Gnome ne devrait pas faire la différence.

Changement manuel des paramètres de papier peint avec une combinaison de touches

Si, pour une raison quelconque, vous préférez passer manuellement au papier peint étendu après avoir connecté/déconnecté le moniteur externe, vous pouvez remplacer les trois dernières lignes:

while True:
    arrange()
    time.sleep(5)

par une seule ligne:

arrange()

et ajoutez un raccourci clavier pour effectuer le changement: "Paramètres système"> "Clavier"> "Raccourcis"> "Raccourcis personnalisés"

Ajoutez la commande:

python3 /path/to/auto_wall.py

à une combinaison de touches de votre choix.

9
Jacob Vlijm

En plus de la réponse ci-dessus, vous pouvez joindre deux images de taille exacte en utilisant ce service: http://www.photojoiner.net/

Après avoir joint deux images ou plus, vous devez sélectionner l’option "span" dans la page des paramètres d’arrière-plan.

1
onesvat