Différents fonds d'écran sur plusieurs moniteurs

16

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 image d'arrière-plan simple
  • 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 de l' azote . Mais les deux ne m'ont pas aidé.

Éditer:

Après avoir exécuté gnome-tweak-tool, accédez à 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 Ubuntu .

Malheureusement, je ne trouve pas cela dans mon outil Gnome-Tweak: gnome-tweak-tool

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

Résumé: dessiner l'arrière-plan du bureau
Description: Demandez à GNOME de dessiner l'arrière-plan du bureau. DEPRECATED : Cette clé est obsolète et ignorée.

Aussi mon gnome-shell --versionest GNOME Shell 3.10.4.

Dans cet esprit est la sortie de xrandr. Le premier est avec le deuxième moniteur connecté. Le second est sans lui.

byf-ferdy
la source
Lorsque vous utilisez Nitrogen, avez-vous désactivé le gestionnaire de fichiers de remettre le bureau?
Kaz Wolfe
Je ne pouvais plus trouver l'option dans le Gnome-Tweak-Tool. J'ai ajouté des informations supplémentaires à ma question. J'espère que ça aide
byf-ferdy
@Whaaaaaat nitro est uniquement pour 13.10 et inférieur : /
blade19899
Je pense avoir quelque chose, quelles sont les résolutions de vos écrans?
Jacob Vlijm
à la fois 1920x1080 (16: 9). L'ordinateur portable mesure 19 pouces, je pense, le moniteur 27 pouces.
byf-ferdy

Réponses:

10

L'astuce

Il semble impossible de définir séparément des fonds d'écran pour l'écran principal et le deuxième écran. Ce qui peut être fait, cependant, consiste à définir un fond d'écran et à le répartir sur deux écrans. Nous pouvons automatiquement créer une image couvrant 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 le rendre joli, il faut qu'au moins la résolution verticale de l' écran des deux écrans soit identique, ce qui est le cas dans votre situation.

entrez la description de l'image ici

En pratique

Préparation

Dans cette solution, le travail de préparation que vous avez à faire est:

  • Tout d'abord, installez imagemagick pour créer automatiquement l'image de couverture:

    sudo apt-get install imagemagick
    
  • Préparez deux images d'arrière-plan distinctes de votre choix pour les deux écrans:

    • Les dimensions doivent correspondre exactement 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.jpeget screen_2.jpeg(exactement ces noms). Un script créera l'image couvrant.

  • 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 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-0par <your_second_screenname>(exécutez la commande xrandrsi nécessaire pour le savoir)

Exécutez le script (et laissez-le s'exécuter en arrière-plan) par la commande:

python3 /path/to/auto_wall.py

Maintenant, si vous connectez votre deuxième écran, le fond d'écran de votre deuxième écran devrait basculer en quelques secondes pour que screen_2.jpegvous soyez prêt.

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

Le script

#!/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

Dans le cas où vous souhaitez changer de papier peint, remplacez simplement une ou les deux images que vous avez copiées dans le dossier (mais faites attention au nom) et supprimez la span_image.jpeg, créée par le script.

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

Changer manuellement les paramètres du papier peint avec une combinaison de touches

Si, pour une raison quelconque, vous préférez basculer manuellement sur le fond d'écran é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.

Jacob Vlijm
la source
Cela a l'air incroyable. Je vais le vérifier dès que possible et vous le faire savoir! Merci pour le travail de toute façon!
byf-ferdy
@ byf-ferdy oups, j'ai accidentellement laissé mon propre répertoire (testing) dans le script, corrigé maintenant.
Jacob Vlijm
Bon travail! Ça marche parfaitement!
byf-ferdy
1
Merci pour la belle question! Voilà ce que j'aime faire.
Jacob Vlijm
1

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.

onesvat
la source