web-dev-qa-db-ja.com

複数のモニター上の異なる壁紙

私はラップトップとモニターを持っています。ほとんどの場合、ラップトップはHDMI経由でモニターに接続されます。私はUbuntu Gnome 14.04を使用していますが、ここに私が欲しいものがあります:

  • モニターが接続されていないとき、シンプルな背景画像が欲しい
  • モニターが接続されているとき、ラップトップとモニターに別の背景画像を配置したいと思います。

それは可能ですか? この質問窒素 が見つかりました。しかし、両方とも助けにはなりませんでした。

編集:

Gnome-Tweak-toolを実行した後、左側のパネルの[デスクトップ]タブに移動し、[ファイルマネージャーにデスクトップを処理させる]設定をオフにします。

ソース: buntu Forums

残念ながら、Gnome-Tweak-Toolでこれを見つけることができません。 gnome-Tweak-tool

dconf-editorの下でorg.gnome.desktop.backgroundを使用して同じ構成を見つけようとしましたが、それは次のとおりでした:

概要:デスクトップの背景を描く
説明:GNOMEにデスクトップの背景を描画させます。 非推奨:このキーは非推奨であり、無視されます。

また、私のgnome-Shell --versionGNOME Shell 3.10.4です。

この要点でxrandrの出力です。 1つ目は、2番目のモニターを接続した状態です。 2番目はそれなしです。

16
byf-ferdy

トリック

メイン画面とセカンド画面に別々に壁紙を設定することは不可能のようです。 canでできることは、壁紙を設定して、2つの画面にまたがるようにすることです。選択した2つの壁紙のスパニングイメージを自動的に作成し、2番目の画面が接続されているかどうかに応じて、壁紙と画像オプションを自動的に切り替えることができます。
見た目を良くするには、少なくとも両方の画面のvertical画面解像度が同じであることが必要です。これはあなたの状況に当てはまります。

enter image description here

実際には

準備

このソリューションでは、次の準備作業が必要です。

  • まず、imagemagickをインストールして、自動的にスパニングイメージを作成します。

    Sudo apt-get install imagemagick
    
  • 両方の画面に、選択した2つの個別の背景画像を準備します。

    • 寸法は正確に画面の寸法と一致する必要があります(あなたの場合は16:9)
    • vertical両方の画像の解像度はまったく同じでなければなりません。

    それらをscreen_1.jpegおよびscreen_2.jpeg(正確にそれらの名前)と呼びます。スクリプトがスパニングイメージを作成します。

  • ホームディレクトリにフォルダーを作成し、両方の画像をそのフォルダーにコピーします。

  • 以下のスクリプトを空のファイルにコピーし、準備した2つの画像とともにauto_wall.pyとして保存します。

  • スクリプトのヘッドセクションには、次の行があります。

    screen_check = "HDMI-0 connected"
    

    必要に応じて、HDMI-0<your_second_screenname>に置き換えます(必要な場合は、xrandrコマンドを実行して確認します)

次のコマンドでスクリプトを実行します(バックグラウンドで実行し続けます)。

python3 /path/to/auto_wall.py

セカンドスクリーンを接続すると、セカンドスクリーンの壁紙が数秒以内にscreen_2.jpegに切り替わります。

  • すべてが正常に機能する場合は、スタートアップアプリケーションに追加します。

スクリプト

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

画像の置き換え

壁紙を変更する場合は、フォルダーにコピーした画像の一方または両方を置き換えて(名前に注意して)、スクリプトによって作成されたspan_image.jpegを削除します。

Ubuntu 14.04と14.10でテストしましたが、完全に機能しました。 Gnomeを使用するという事実は、違いを生むべきではありません。

キーの組み合わせで壁紙の設定を手動で切り替える

何らかの理由で、外部モニターの接続/切断後にスパンド壁紙に手動で切り替える場合は、最後の3行を置き換えることができます。

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

一行で:

arrange()

切り替えを行うためのキーボードショートカットを追加します:「システム設定」>「キーボード」>「ショートカット」>「カスタムショートカット」

コマンドを追加します。

python3 /path/to/auto_wall.py

お好みのキーの組み合わせに。

9
Jacob Vlijm

上記の回答に加えて、このサービスを使用して2つの正確なサイズの画像を結合できます。 http://www.photojoiner.net/

複数の画像を結合した後、背景設定ページで「スパン」オプションを選択する必要があります。

1
onesvat