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.
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.jpeg
et 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-0
par <your_second_screenname>
(exécutez la commande xrandr
si 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.jpeg
vous 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.