在多个显示器上使用不同的壁纸(Gnome 2 + Compiz)

这似乎是一个简单的问题,但我在谷歌或Ask Ubuntu上找不到令人满意的答案。
所以我有一个三屏设置。基本上我想要的只是在每个三个显示器上有不同的背景。现在我不是在说不同的虚拟桌面(也称为工作区)这里。我在谷歌上搜索到的大部分解决方案都是关于在不同的工作区设置不同的背景。我只有一个工作区,但有三个显示器,就像这样:

enter image description here

监视器1(顶部)是我挂在墙上的大电视,位于我的两个普通显示器上方。

我正在使用带有Compiz的Gnome 2(也称为 gnome-session-fallback ,也称为登录管理器下拉列表中的 Gnome Classic(with effects))在Ubuntu 13.04上。

我尝试了以下方法来为每个监视器设置不同的背景:

  1. ccsm(compiz-config-settings-manager),即通过窗口管理器(Compiz)设置背景。更准确地说,我使用了Compiz的 Wallpaper 插件。
  2. gnome-control-center,即通过Gnome系统设置设置背景。更准确地说,我使用了Gnome系统设置中的 Background 面板。
  3. XDG_CURRENT_DESKTOP=Unity gnome-control-center,即通过Gnome系统设置设置背景,但模仿Unity的行为。更准确地说,我使用了Gnome系统设置中的 Appearance 面板。
然而,这些方法似乎都不能让我为每个显示器选择不同的背景。在每种情况下,我只能设置一个单一的背景(或者可能是几个可以定期循环使用或用于不同工作区的背景),应用于所有三个显示器。然后,我通常有一些选项,比如居中、平铺、裁剪或缩放,来控制这个单一背景在三个显示器上的呈现方式。
到目前为止,我采用的解决办法是使用Gimp创建一个“大”的背景,包含了所有三个显示器的虚拟分辨率。基本上,我创建一个大小为3840x2160的大背景图像,在其中粘贴三个背景图像到正确的位置。然后,我使用上述的第一种或第三种可能性将这个大背景设置为三个显示器的单一背景,并使用“跨越”选项将这个大背景跨越所有三个显示器。这样就实现了在三个显示器上显示不同的背景,前提是将三个较小的背景图像正确地放置在大背景图像上(注意:第二种可能性没有“跨越”选项)。
然而,这似乎是一个可怕的黑客手段,以实现为每个显示器设置不同的背景这样一个简单的事情。它还有几个缺点:
- 当我想要改变显示器的排列方式(顶部的大电视可以向左或向右滑动一些,我喜欢使用xrandr或相关的GUI(如Gnome系统设置中的“显示”面板)来相应地调整监视器的位置,以保持鼠标移动的直观性)时,显然上方的背景不会随着它所应该显示在的监视器一起滑动,这意味着我只能看到上方背景的一部分。 - 大背景在上角有一些灰色区域(死区),当加载大背景时,Compiz或Gnome在登录时无用地加载这些区域。 - 最糟糕的是,当我想要更改三个背景中的任何一个时,我必须对整个大背景进行编辑。考虑到我只是想要更改一个背景,这太麻烦了(是的,我知道Gimp图层,但仍然)- 这应该可以通过几次点击而不需要一个重量级的图像处理程序来实现。
第一点意味着这个解决方法不够稳定。第二点意味着它不够高效。而第三点意味着这真是个麻烦事儿 :)
所以我的问题是:
有没有办法 - 无论是使用Gnome 2还是Compiz - 简单地告诉系统我想要每个显示器都有不同的背景?这对我来说是合乎逻辑的做法,因为这样实际上会告诉系统我的意图。而且这样做也更高效。
实际上,感觉这种情况并不罕见。我认为很多人都有多个显示器;至少其中一些人肯定喜欢在这些显示器上设置不同的背景。那么难道真的没有直接的解决方案吗?用户被期望自己想出可怕的黑科技,比如使用笨重的程序创建自定义背景,才能让这个功能实现吗?

这个够好吗?如果不行,请私信我。 - Rinzwind
壁纸和背景的含义因问题而异,变化极大。我将留下一些更相关的例子,其中包括gnome和compiz。如果我将gnome改为kde,答案的类型将完全改变。 - Braiam
1Braiam,这对我来说没什么意义。如果问题“如何设置桌面背景/壁纸?”不值得加上“背景”或“壁纸”标签,那还有哪个问题值得呢?而且,类似的问题,比如http://askubuntu.com/questions/26529/how-do-i-set-different-wallpapers-for-different-virtual-desktops?rq=1 或者 http://askubuntu.com/questions/365913/how-to-use-custom-background-picture-in-ubuntu-13-10,标签看起来都是合适的。但是,既然你似乎在askubuntu上花了很多空闲时间,如果这让你开心的话...那就没问题了 ;) - Malte Skoruppa
有趣的是,XFCE的默认行为实际上正是OP所需要的,而我正好相反:我希望能够像OP在gnome中那样使用XFCE。至少在大多数情况下有一个简单的解决方法:手动设置所有显示器的背景图片为同一张。 - Stéphane Gourichon
我来这里是为了Kubuntu(KDE), 发现它自带了每个监视器背景设置。右键点击并进行配置。 - ijuneja
7个回答

编辑(2019年): Nitrogen不再维护。Nitrogen在较新的Ubuntu发行版上无法完全工作。

您可以使用{{link1:nitrogen}}。

要安装它,请在终端中运行以下命令:

sudo apt-get install nitrogen

因为当安装时,nitrogen默认没有桌面文件,所以您需要从终端运行以下命令来启动它:
nitrogen

如何使用它?

In it's Preferences, add your wallpaper folder, then at the bottom [...] select Screen 1, 2, etc., to set a different wallpaper for each monitor:

nitrogen

To be able to set a different wallpaper for each monitor, you must disable the file manager from handling the desktop. This means you'll no longer have folders on the desktop.

In GNOME / Unity, install GNOME Tweak Tool:

sudo apt-get install gnome-tweak-tool

Then open GNOME Tweak Tool and on the Desktop section, set Icons on Desktop (previously Have file manager handle the desktop) to OFF.

And finally, to have the wallpapers restored each time you log in, add the following command:

nitrogen --restore

to your Startup Applications.

来源:UBUNTU 多显示器调整(全屏 Flash 修复,跨多个显示器设置壁纸等)


我在Ubuntu 13.10上使用Unity测试了这种方法,并且效果非常好!我用了两个显示器。 - Radu Rădeanu
大家,有两件事:首先,我注意到在氮气设置的背景不会在你登录时自动恢复。要实现这一点,我们需要运行 nitrogen --restore。所以为了使更改变为永久,我们需要创建一个可执行脚本,在登录时使用 Autostart 运行此命令。请更新你们的回答,并提供如何执行此操作的说明。 - Malte Skoruppa
1另请参阅https://wiki.archlinux.org/index.php/nitrogen。 - Malte Skoruppa
1@MalteSkoruppa 你没必要创建一个在登录时运行"nitrogen --restore"的可执行脚本。只需要打开"启动应用程序",然后添加这个命令("nitrogen --restore")就可以了。对于"名称"和"注释",随便写都可以。 - Radu Rădeanu
嗨,Radu,谢谢你说得对。执行脚本可能有点过头了。我自己知道该怎么做,而且已经做过了。我只是希望把这些说明加到你或者Rinzwind的回答中,这样其他经验不足的用户就能够实现在不同的监视器上使用不同的壁纸,并在重启后保持不变 :) 这只是为了提高答案的质量。 - Malte Skoruppa
@MalteSkoruppa,我希望现在我已经表达清楚了。如果您考虑添加更多内容,您可以自己编辑答案;Ask Ubuntu 它是由构建和运行的 :). - Radu Rădeanu
10需要注意的是,此选项现在被称为“桌面图标”,而不是“由文件管理器处理桌面”。 - fIwJlxSzApHEZIl
"桌面上的图标"已不再可用,氮气中选择监视器的选项也不再可用。这个答案已经不再相关。 - Roi
我在Ubuntu 18.04的nitrogen中没有找到多显示器选项。我改为按照这些说明进行操作。 - Quitiweb

webupd8.org上看,似乎有两个选项。(从网站复制加上我自己添加的一些额外内容):
默认的Ubuntu外观设置不允许您在两个显示器上跨越一个大的壁纸,也不能为每个显示器使用不同的壁纸,但是有两个应用程序可以实现这一点。
  1. 第一个是SyncWall。在Ubuntu上使用以下命令进行安装:
    sudo add-apt-repository ppa:nilarimogard/webupd8
    sudo apt-get update
    sudo apt-get install syncwall
    

    enter image description here

    使用SyncWall后,我的桌面如下所示:

    enter image description here

    当前功能:

    • 定时功能:可以在启动时、间隔时间或固定时间更改壁纸
    • 能够使用/定义系统热键手动更改壁纸
    • 基本的多显示器支持,可在多个屏幕间共享壁纸
    • 能够为显示的壁纸添加一些特殊效果(浮雕、边缘、模糊等)
    • 能够对图像进行评级,以便更频繁地显示它们(如果选择了随机顺序)
    • 多种调整大小方法和背景填充
    • 通过定义服务器和客户端来实现壁纸变化的网络同步。显示参数在整个网络中共享(所有桌面上的调整大小类型相同)
    • 支持的文件:SyncWall使用Qt插件加载图像,因此默认情况下可以读取基本格式如BMP、PNG、JPG。如果需要,可以通过使用桥接插件到FreeImage或Devil库来添加更多格式。
    • 对于Linux平台,支持常见的窗口管理器(Gnome、Gnome3、KDE3、KDE4、XFCE等)。
  2. 另一个类似的工具是nitrogen Install nitrogen,除了能够将相同的壁纸扩展到多个显示器上,还可以为每个监视器设置不同的壁纸。

    Nitrogen可在官方的Ubuntu存储库中找到,所以要安装它,请在Ubuntu软件中心搜索它或使用以下命令:

     sudo apt-get install nitrogen
    

    Nitrogen没有桌面文件,所以需要从命令行运行它:

    nitrogen
    

    enter image description here

    要能够为每个监视器设置不同的壁纸,您必须禁用文件管理器处理桌面。这意味着您将不再在桌面上看到文件夹。

    在GNOME / Unity中,安装GNOME Tweak Tool:

     sudo apt-get install gnome-tweak-tool
    

    然后打开GNOME Tweak Tool,在"桌面"部分将"Have file manager handle the desktop"设置为OFF。

    最后,要在每次登录时还原壁纸,请将"nitrogen --restore"添加到启动应用程序。

    这是我使用不同壁纸的桌面示例:

    enter image description here

    功能:

    • Multihead和Xinerama支持。
    • 记忆模式通过启动脚本还原壁纸。
    • 使用freedesktop.org标准进行缩略图处理。
    • 可以设置GNOME背景。
    • 命令行设置模式以供脚本使用。
    • 监视浏
      氮似乎是最好的选择。Syncwall似乎正在使用您描述的黑客技巧(将大图像分割成几个监视器)。

2你那里真的有多个显示器吗?看起来像是工作区域... - Seth
1我刚刚安装了syncwall,但它没有设置每个显示器不同壁纸的选项... - Radu Rădeanu
氮溶液,正如Radu所描述的那样,效果非常好!你们俩都应该得到奖励 :) 为了决定哪个答案更好,我正在尝试评估Syncwall解决方案的可用性。然而,我一直无法让它正常工作。在“首选项 -> 显示参数”中,我看到了“扩展图像然后裁剪(每个监视器一个文件)”的选项,但我不知道如何实际添加多个文件。即使设置了这个选项,Syncwall仍然只使用一个文件。它的行为与“扩展图像然后裁剪(所有监视器一个文件)”相同。你能详细说明如何在Syncwall中添加多个文件吗? - Malte Skoruppa
1@Rinzwind有一件事我不明白:如果syncwall似乎使用了问题中描述的技巧,为什么还要将其作为答案添加呢?问题很明确:多个显示器上的不同壁纸。还有一件事:如果你在两个显示器上测试过氮气,你就不会说最后一张图片是经过Photoshop处理的;你可以自己试试,在使用两个显示器时进行桌面截图,你就会明白我的意思。 - Radu Rădeanu
Syncwall似乎可以工作,但无法复制原始问题中的屏幕布局...它不允许我将屏幕堆叠在另一个屏幕上,只能左右排列:/ - bksunday

XFCE桌面管理器插件(包含在xubuntu-desktop软件包中)允许您单独编辑每个显示器,同时保留桌面上的文件夹。
以下是我打开管理器时的两个桌面的屏幕截图:http://i.stack.imgur.com/Bzg7G.jpg 在黄色框中,它说:“将此对话框移动到要编辑设置的显示器上。”
很抱歉我无法提供有关如何安装它的指示,也不知道实际插件的名称(我试图找到它,但决定重新安装整个软件包)。但希望这能引导您或其他人走上正确的轨道,并且通过编辑可以改进这个答案。

HydraPaper 自 2020 年以来一直是最佳选择。

我很高兴看到有一个Gnome/Unity的解决方案。
话虽如此,我仍然觉得转换到KDE可能会提供更一致的体验。
KDE的本地设置管理器不仅允许在多个监视器上设置多个壁纸,还可以为每个虚拟桌面和活动设置不同的壁纸。(活动类似于包含虚拟桌面的虚拟桌面,并且可以配置为具有不同的设置,例如在一个活动中静止5分钟后启用屏幕保护程序,但在切换到另一个活动时没有超时,比如演示或电影。)
此外,它可以在运行时通过插拔HDMI来添加和删除监视器而不会出现问题!

sudo apt-get install feh

feh --bg-center <path_to_big_image> --no-xinerama

不需要将您的图标从桌面上隐藏

1欢迎来到Ask Ubuntu!我建议对这个答案进行[编辑],增加具体细节以说明该命令的作用。单纯的命令或命令序列很少被视为一个答案。(参见如何撰写好答案?以获得关于在Ask Ubuntu上哪种答案被认为最有价值的一般性建议。) - David Foerster

我正在寻找一种命令行方法来完成这个任务。Hyrdapaper还可以,但我不想启动图形界面来选择我的图片。我已经有一个脚本来处理所有这些,设置图片的时间间隔是预先确定的。我只需要知道如何分别设置每个监视器和/或跨越一张图片。feh看起来可能是一个解决方案,但它实际上并没有设置壁纸。或者说它显示了,但直到我正在输入命令的终端失去焦点(我开启了指针焦点)。然后背景会在一秒钟内更改一次,然后回到我当前的背景。

请注意,我使用的是带有Compiz的Mate桌面环境。