51

This seems like a simple question, yet I could not find any satisfying answer using Google or Ask Ubuntu.

So I have a triple-monitor setup. Basically what I want is simply to have a different background on each of the three monitors. Now I am not speaking about different virtual desktops (aka workspaces) here. Most of the solutions I googled were about different backgrounds on different workspaces. I have only the one workspace, but three monitors, like so:

enter image description here

Monitor 1 (on top) is my big TV that's attached to the wall above my two normal monitors.

I am using Gnome 2 with Compiz (aka gnome-session-fallback aka Gnome Classic (with effects) in the login manager dropdown list) on Ubuntu 13.04.

I tried the following methods trying to set a different background for each monitor:

  1. ccsm (compiz-config-settings-manager), that is, setting a background via the window manager (Compiz). More precisely, I used the Wallpaper plugin of Compiz.
  2. gnome-control-center, that is, setting a background via the Gnome System Settings. More precisely, I used the Background panel in the Gnome System Settings.
  3. XDG_CURRENT_DESKTOP=Unity gnome-control-center, that is, settting a background via the Gnome System Settings, but mimicking Unity behavior. More precisely, I used the Appearance panel in the Gnome System Settings.

However, none of these methods seem to enable me to select a different background for each monitor. In each case, I can only set a single background (or possibly several that can then be cycled periodically, or used for different workspaces) for all three monitors. Then, I typically have options like center, tile, crop or scale that control how this single background is rendered across the three monitors.

The workaround I have gone with so far is to use Gimp to create one "big" background that encompasses the entire virtual resolution of all three monitors together. Basically, I create one big background image of size 3840x2160, in which I paste three backgrounds at the right places. Then I set this big background as the single background for the three monitors using possibility (1) or (3) above, and use the span option to span this big background across all three monitors. This results in three different backgrounds on the three monitors, provided the three smaller backgrounds were placed correctly on the big background image (Note: possibility (2) does not offer a span option).

However, this seems like an awful hack to achieve such a simple thing as setting a different background for each of my monitors. It also has several disadvantages:

  • When I want to change the arrangement of the monitors (the big TV on top can be slided some way to the left or to the right, and I like to adjust the monitor positions accordingly using xrandr or an associated GUI such as the Displays panel in the Gnome System Settings, so as to keep mouse movement intuitive), clearly the upper background does not slide along with the monitor it's supposed to be displayed on, which means I only see part of the upper background.
  • The big background has some gray areas (dead space) in the upper corners that are uselessly loaded at login time by Compiz or Gnome when the big background is loaded.
  • Worst of all, when I want to change a single one of the three backgrounds, then I have to gimp-edit the whole big background. This is too much work considering I simply want to change a single background (yep, I know about Gimp layers, but still) - this ought to be possible with a few clicks and without a heavy-weight image manipulation program.

The first point means this workaround is not robust. The second means it is not efficient. And the third means it's a pain in the butt :)

So my question is this:

Is there some way - using either Gnome 2 or Compiz - to simply tell the system that I want a different background for each monitor? This would be the logical approach to me, as it would actually tell the system what my intention is. It would also be more efficient.

Really, it feels like this cannot be such an uncommon scenario. I would think many people have multiple monitors; and at least some of those must prefer to have different backgrounds on these monitors. So can it be true that there is no straightforward solution, and users are expected to come up with awful hacks such as creating their own custom backgrounds with heavy-weight programs in order to get this to work?

Malte Skoruppa
  • 13,846
  • 5
  • 58
  • 65

7 Answers7

62

Edit (2019): Nitrogen is no longer maintained. Nitrogen doesn't fully work on newer Ubuntu distros.

You can use nitrogen

To install it, run the following command in terminal:

sudo apt-get install nitrogen

Because nitrogen doesn't have a desktop file by default when is installed, you need to run the following command from terminal to start it:

nitrogen

How to use it?

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.

Source: UBUNTU MULTI-MONITOR TWEAKS (FULL SCREEN FLASH FIXES, SPAN WALLPAPER ACROSS MONITORS, MORE)

Radu Rădeanu
  • 174,089
  • 51
  • 332
  • 407
8

From webupd8.org it seems there are 2 options. (copy from the website plus some extra things added by me):

The default Ubuntu Appearance settings doesn't let you span a single large wallpaper across both monitors or use a different wallpaper for each monitor, but there are two applications that you can use to do this.

  1. The first one is SyncWall. Install it in Ubuntu using the following commands:

    sudo add-apt-repository ppa:nilarimogard/webupd8
    sudo apt-get update
    sudo apt-get install syncwall
    

    enter image description here

    Here's how my desktops looks like after using SyncWall:

    enter image description here

    Current Features

    • Scheduling : you can change wallpaper at start-up, by interval or at fixed time
    • Ability to use/define system hot-keys to change wallpaper manually.
    • Basic multi-monitor support in order to share the wallpaper across screens
    • Ability to add some special effects (emboss, edge, blur, ...) to the displayed wallpaper.
    • Ability to rate images in order to display them more often (if random order is selected)
    • Several resizing methods and background filling
    • Network synchronization of wallpaper change by defining a server and clients. Display parameters are shared across the network (same resizing type on all the desktops)
    • Supported files :SyncWall uses Qt plugins to load image, so by default it can read basic formats as BMP, PNG, JPG. You can add more formats if needed by using bridge plugins to the FreeImage or the Devil libraries.
    • For linux platform, the common windows managers are supported (Gnome, Gnome3, KDE3, KDE4, XFCE, ...).
  2. Another such tool is nitrogen Install nitrogen, which besides being able to set the same wallpaper to extend across displays, it can also be used to set a different wallpaper to each monitor.

    Nitrogen is available in the official Ubuntu repositories so to install it, search for it in Ubuntu Software Center or use the following command:

     sudo apt-get install nitrogen
    

    Nitrogen doesn't have a desktop file, so run it from the command line:

    nitrogen
    

    enter image description here

    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 "Have file manager handle the desktop" to OFF.

    And finally, to have the wallpapers restored each time you log in, add "nitrogen --restore" to your startup applications.

    Here's how my desktop looks like with different wallpapers for each monitor:

    enter image description here

    Features :

    • Multihead and Xinerama support.
    • Recall mode to restore wallpapers via startup script.
    • Uses freedesktop.org standard for thumbnails.
    • Can set GNOME background.
    • Command line set modes for script usage.
    • Inotify monitoring of browsed directories.
    • Lazy loading of thumbnails - conserves memory (new in 1.3).
    • "Automatic" set mode - determines best mode to set an image based on its size. (new in 1.4).
    • Display preview images in a tiled icon layout (new in 1.5).

    Install via the software center


Nitrogen seems to be the best option. Syncwall seems to be using the hack you described (large image to split across several monitors.

Rinzwind
  • 309,379
6

the XFCE Desktop Manager Plugin (that comes in the xubuntu-desktop package) allows you to edit each display individually while still retaining the folders on your desktops.

A screenshot of my 2 desktops with the manager open : https://i.sstatic.net/Bzg7G.jpg

in the yellow box it says "Move this dialog to the display you want to edit the settings for."

I'm sorry i cant be more help as to giving instruction on to how to install it, nor what the actual plug in is called ( I tried to find it but decided to re-install the whole package instead ) - But hopefully this leads you or somebody on the right track, and this answer can be improved through edits.

Ulad Kasach
  • 1,866
4

HydraPaper is the best option since 2020.

2

I was glad to see there actual was a Gnome/Unity answer.

That said, I still feel switching to KDE might offer a more consistent experence.

KDE's native settings manager not only allows for multiple wallpapers across multiple monitors, it allows them to be set differently for each virtual desktop AND Activity. (Activity's a like virtual desktops that contain virtual desktops and can be configured to have different settings, such as a screen-saver after 5 minutes of stillness in one activity, but no timeout when switched to another, say for presentations or movies.)

Moreover, it handles the addition and subtraction of monitors on the fly (via plugging and unplugging HDMI) without issue!!

virtualxtc
  • 3,324
1
sudo apt-get install feh

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

No need to hide your icons from desktop

0

I'm looking for a command line method of doing this. Hyrdapaper's OK but I don't want to have to start a GUI to pick my images. I have a script that already handles all of that, setting images are predetermined intervals. I just need to know how to set each monitor separately and/or span an image. feh looked like it might be a solution however it doesn't actually set the wallpaper. Or rather it says it but doesn't show it until the terminal I'm typing the command in loses focus (I have pointer focus on). Then the background changes for a second then goes back to my current background.

Note I'm using Mate with Compiz if that matters.