多台显示器上显示不同的壁纸

多台显示器上显示不同的壁纸

我有一台笔记本电脑和一台显示器。大多数时候我的笔记本电脑通过 HDMI 连接到显示器。我使用 Ubuntu Gnome 14.04,以下是我想要的:

  • 当没有连接显示器时我想要一个简单的背景图像
  • 当显示器连接时,我希望在我的笔记本电脑上和显示器上显示相同的背景图像。

这可能吗?我发现这个问题. 但两者都对我没帮助。

编辑:

运行 gnome-tweak-tool 后,转到左侧面板中的“桌面”选项卡,然后关闭“让文件管理器处理桌面”设置。

来源:Ubuntu 论坛

不幸的是我无法在 Gnome-Tweak-Tool 中找到它: gnome 调整工具

dconf-editor我尝试使用以下内容找到相同的配置org.gnome.desktop.background,但它只说:

摘要:绘制桌面背景
描述:让 GNOME 绘制桌面背景。已弃用:此键已被弃用并被忽略。

还有我gnome-shell --versionGNOME Shell 3.10.4

在这个要点中是 的输出xrandr。第一个是连接了第二台显示器。第二个是没有连接。

答案1

诀窍

似乎无法分别为主屏幕和第二屏幕设置壁纸。最有效的方法是设置壁纸,并使其跨越两个屏幕。我们可以自动创建您选择的两个壁纸的跨越图像,并(还自动)切换壁纸和图片选项,具体取决于第二个屏幕是否连接。为了使它看起来
不错,至少需要垂直的两个屏幕的屏幕分辨率相同,这与您的情况相同。

在此处输入图片描述

在实践中

准备

在这个解决方案中,您需要做的准备工作是:

  • 首先,安装 imagemagick 以自动创建跨越图像:

    sudo apt-get install imagemagick
    
  • 为两个屏幕准备两张单独的背景图像:

    • 尺寸应该确切地与屏幕尺寸匹配(你的情况是 16:9)
    • 垂直的两幅图像的分辨率应该完全相同。

    screen_1.jpeg调用它们screen_2.jpeg(正是这些名称)。脚本将创建跨度图像。

  • 在您的主目录中创建一个文件夹,并将两个图像复制到该文件夹​​中。

  • 将下面的脚本复制到一个空文件中,并将其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 应该不会有什么不同。

使用组合键手动切换壁纸设置

如果由于某种原因,您希望在连接/断开外接显示器后手动切换到跨度壁纸,则可以替换最后三行:

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

一行代码:

arrange()

并添加键盘快捷键进行切换:“系统设置”>“键盘”>“快捷键”>“自定义快捷键”

添加命令:

python3 /path/to/auto_wall.py

您选择的组合键。

答案2

除了上述答案之外,您还可以使用此服务合并两个完全相同尺寸的图像:http://www.photojoiner.net/

将两个或多个图像合并后,您应该在背景设置页面中选择“跨度”选项。

答案3

有时我会用

eog --fullscreen -s <path to first pic>

在第二台显示器上保持背景不断变化。您可以使用以下方法调整图片更改之间的延迟

gsettings set org.gnome.eog.fullscreen seconds <whatever Val>

相关内容