Verschiedene Hintergrundbilder auf mehreren Monitoren

16

Ich habe einen Laptop und einen Monitor. Die meiste Zeit ist mein Laptop über HDMI mit dem Monitor verbunden. Ich benutze Ubuntu Gnome 14.04 und hier ist was ich will:

  • Wenn kein Monitor angeschlossen ist, möchte ich ein einfaches Hintergrundbild
  • Wenn der Monitor angeschlossen ist, möchte ich dasselbe Hintergrundbild auf meinem Laptop und ein anderes auf meinem Monitor haben.

Ist das möglich? Ich fand diese Frage ebenso gut wie Stickstoff . Aber beide haben mir nicht geholfen.

Bearbeiten:

Gehen Sie nach dem Ausführen von gnome-tweak-tool auf die Registerkarte "Desktop" im linken Bereich und deaktivieren Sie die Einstellung "Den Desktop vom Dateimanager verwalten lassen".

Quelle: Ubuntu-Foren .

Leider kann ich das in meinem Gnome-Tweak-Tool nicht finden: Gnome-Tweak-Tool

Ich habe versucht, die gleiche Konfiguration dconf-editorunter zu finden, org.gnome.desktop.backgroundaber alles, was gesagt wurde, war:

Zusammenfassung: Desktop-Hintergrund
zeichnen Beschreibung: Lassen Sie GNOME den Desktop-Hintergrund zeichnen. DEPRECATED : Dieser Schlüssel ist veraltet und wird ignoriert.

Auch mein gnome-shell --versionist GNOME Shell 3.10.4.

In diesem Kern ist die Ausgabe von xrandr. Der erste ist mit dem zweiten Monitor verbunden. Der zweite ist ohne.

byf-ferdy
quelle
Haben Sie bei Verwendung von Stickstoff den Dateimanager daran gehindert, den Desktop zu übergeben?
Kaz Wolfe
Ich konnte die Option im Gnome-Tweak-Tool nicht mehr finden. Ich habe meiner Frage zusätzliche Informationen hinzugefügt. Hoffe, es hilft
byf-ferdy
@ Whaaaaaat Nitro ist nur für 13.10 und niedriger : /
Blade19899
Ich glaube, ich habe etwas, was sind die Auflösungen Ihrer Bildschirme?
Jacob Vlijm
beide 1920 x 1080 (16: 9). Laptop ist 19 ", denke ich, Monitor 27".
Byf-Ferdy

Antworten:

10

Der Trick

Es scheint unmöglich, Hintergrundbilder für den Hauptbildschirm und den zweiten Bildschirm getrennt festzulegen. Sie können jedoch ein Hintergrundbild festlegen und es über zwei Bildschirme verteilen. Wir können automatisch ein übergreifendes Bild von zwei Hintergrundbildern Ihrer Wahl erstellen und (auch automatisch) die Hintergrundbild- und Bildoptionen ändern, je nachdem, ob der zweite Bildschirm angeschlossen ist oder nicht.
Damit es gut aussieht, muss mindestens die vertikale Bildschirmauflösung beider Bildschirme identisch sein, was in Ihrer Situation der Fall ist.

Bildbeschreibung hier eingeben

In der Praxis

Vorbereitung

In dieser Lösung müssen Sie folgende Vorbereitungsarbeiten ausführen:

  • Installieren Sie zunächst imagemagick, um das übergreifende Image automatisch zu erstellen:

    sudo apt-get install imagemagick
    
  • Bereiten Sie für beide Bildschirme zwei separate Hintergrundbilder Ihrer Wahl vor:

    • Die Abmessungen sollten genau mit den Abmessungen des Bildschirms übereinstimmen (16: 9 in Ihrem Fall).
    • Die vertikale Auflösung beider Bilder sollte exakt gleich sein.

    Nenne sie screen_1.jpegund screen_2.jpeg(genau diese Namen). Ein Skript erstellt das übergreifende Image.

  • Erstellen Sie einen Ordner in Ihrem Ausgangsverzeichnis und kopieren Sie beide Bilder in den Ordner.

  • Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es auto_wall.pyzusammen mit den beiden vorbereiteten Bildern unter.

  • In der Kopfzeile des Skripts befindet sich eine Zeile:

    screen_check = "HDMI-0 connected"
    

    ggf. ersetzen HDMI-0durch <your_second_screenname>( xrandrggf. den Befehl ausführen , um dies herauszufinden)

Führen Sie das Skript mit dem folgenden Befehl aus (und lassen Sie es im Hintergrund laufen):

python3 /path/to/auto_wall.py

Wenn Sie nun Ihren zweiten Bildschirm anschließen, sollte sich das Hintergrundbild auf Ihrem zweiten Bildschirm innerhalb weniger Sekunden zu screen_2.jpegIhnen ändern.

  • Wenn alles gut funktioniert, fügen Sie es Ihren Startanwendungen hinzu.

Das Drehbuch

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

Bilder ersetzen

Wenn Sie das Hintergrundbild ändern möchten, ersetzen Sie einfach eines oder beide der Bilder, die Sie in den Ordner kopiert haben (achten Sie jedoch auf den Namen), und entfernen Sie das span_image.jpegvom Skript erstellte Bild .

Ich habe es auf Ubuntu 14.04 und 14.10 getestet und es hat perfekt funktioniert. Die Tatsache, dass Sie Gnome verwenden, sollte keinen Unterschied machen.

Manuelles Wechseln der Hintergrundeinstellungen mit einer Tastenkombination

Wenn Sie es aus irgendeinem Grund vorziehen, nach dem Anschließen / Trennen des externen Monitors manuell zum überspannten Hintergrundbild zu wechseln, können Sie die letzten drei Zeilen ersetzen:

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

durch eine einzelne Zeile:

arrange()

und fügen Sie eine Tastenkombination hinzu, um den Wechsel durchzuführen: "Systemeinstellungen"> "Tastatur"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen"

Fügen Sie den Befehl hinzu:

python3 /path/to/auto_wall.py

zu einer Tastenkombination Ihrer Wahl.

Jacob Vlijm
quelle
Das sieht toll aus. Ich werde es so schnell wie möglich überprüfen und dich wissen lassen! Trotzdem danke für die Arbeit!
Byf-Ferdy
@ byf-ferdy Hoppla, habe versehentlich mein eigenes (Test-) Verzeichnis im Skript verlassen und es jetzt behoben.
Jacob Vlijm
Gute Arbeit! Es funktioniert perfekt
Byf-Ferdy
1
Danke für die nette Frage! Das mache ich gerne.
Jacob Vlijm
1

Zusätzlich zu der obigen Antwort können Sie mit diesem Dienst zwei Bilder in exakter Größe verbinden: http://www.photojoiner.net/

Nachdem Sie zwei oder mehr Bilder zusammengefügt haben, sollten Sie auf der Seite mit den Hintergrundeinstellungen die Option "span" auswählen.

onesvat
quelle