wallswitch 0.33.1

randomly sets wallpapers for n Linux desktop monitors (arranged horizontally).
Documentation

wallswitch

#-----------#-----------# ... ... #-----------#
|           |           |         |           |
| Monitor 1 | Monitor 2 |         | Monitor n |
|           |           |         |           |
#-----------#-----------# ... ... #-----------#

Randomly sets wallpapers for n Linux desktop monitors (arranged horizontally).

[Define papéis de parede aleatoriamente para desktop Linux com n monitores (dispostos horizontalmente).]

Description:

wallswitch randomly selects and applies different wallpapers to each of n monitors arranged horizontally.

Features:

  • Random Wallpaper Selection: Dynamically chooses distinct wallpapers from designated directories for each monitor, ensuring no duplicates appear across screens.

  • Configurable Filtering:

    • Dimension Control: Refine your wallpaper choices by setting minimum and maximum dimensions (height and width) to include only images within a specific size range.
    • File Size Management: Specify minimum and maximum file sizes for searching, allowing you to exclude very large or small images.
  • Flexible Configuration: Tailor wallswitch to your needs with options for:

    • Directory Specification: Define custom directories containing your wallpaper images using the dirs option.
    • Image File Types: Select specific image extensions to consider (e.g., JPG, PNG, SVG) through the extensions option.
    • Resolution Matching: Optimize display by matching wallpapers to monitor resolutions defined in the resolutions array.
  • Wallpaper Cycling Interval: Set the time interval between wallpaper changes using the interval option.

  • Image Sorting: Optionally sort selected images based on filename using the sort option.

Usage:

Run the command:

wallswitch

The default number of monitors is set to n = 2.

Wallpapers will be searched recursively within the specified directories ("dirs": [...]) for files with extensions ["avif", "jpg", "jpeg", "png", "svg", "tif", "webp"].

Configuration

The configuration file, located at ~/.config/wallswitch/wallswitch.json, is key to customizing wallswitch behavior:

  • Displaying the Configuration:
    • Direct Display:
      wallswitch -c
      
    • Parsing with jq:
      cat ~/.config/wallswitch/wallswitch.json | jq
      

The default configuration file has the following structure:

{
  "desktop": "gnome-xorg",
  "min_dimension": 600,
  "max_dimension": 128000,
  "min_size": 1024,
  "max_size": 1073741824,
  "dirs": [
    "/home/user_name/Figures",
    "/home/user_name/Images",
    "/home/user_name/Pictures",
    "/home/user_name/Wallpapers",
    "/home/user_name/Imagens",
    "/usr/share/wallpapers",
    "/usr/share/backgrounds",
    "/tmp/teste"
  ],
  "extensions": [
    "avif",
    "jpg",
    "jpeg",
    "png",
    "svg",
    "tif",
    "webp"
  ],
  "interval": 1800,
  "monitor": 2,
  "resolutions": [
    {
      "width": 3840,
      "height": 2160
    },
    {
      "width": 3840,
      "height": 2160
    }
  ],
  "sort": false,
  "verbose": false,
  "wallpaper": "/home/user_name/wallswitch.jpg"
}

Editing the Configuration

To customize wallswitch behavior, edit the configuration file directly:

  • Directory paths: Modify the "dirs" array to include locations containing your desired image files. Remember to adjust the path according to your user name.

  • Dimensions: Choose the minimum and maximum dimensions.

  • Extensions: Modify the “extensions” array to select the image file extensions.

  • Interval: Change the "interval" value (in seconds) to control how often wallpapers are cycled.

Important Note: Ensure that all directories listed in "dirs" have read permissions for the user running wallswitch.

Two wallpapers per monitor (Gnome)

If you have two monitors and want to display two wallpapers on each monitor, modify your ~/.config/wallswitch/wallswitch.json file as follows:

"monitor": 2 --> 4

"width": 3840 --> 1920

{
...
  "monitor": 4,
  "resolutions": [
    {
      "width": 1920,
      "height": 2160
    },
    {
      "width": 1920,
      "height": 2160
    },
    {
      "width": 1920,
      "height": 2160
    },
    {
      "width": 1920,
      "height": 2160
    }
  ],
...
}

Explanation:

  • monitor: 4: Simulate 4 monitors.

  • resolutions Array: Each object within this array defines a resolution for one of your monitors.

    • In this example, we've defined four resolutions with the width set to 1920 and height to 2160.

    This effectively tells wallswitch to assign two different wallpapers per monitor, ensuring that each screen has distinct backgrounds.

Wallpaper suggestions

Dowload wallpapers with:

git clone https://github.com/zebreus/all-gnome-backgrounds.git

Help messages

To get help messages, run the command:

wallswitch -h

The output:

randomly sets wallpapers for n Linux desktop monitors (arranged horizontally).

Usage: wallswitch [OPTIONS]

Options:
  -c, --config
          Read the configuration file and exit the program
  -d, --min_dimension <MIN_DIMENSION>
          Set the minimum dimension that the height and width must satisfy
  -D, --max_dimension <MAX_DIMENSION>
          Set the maximum dimension that the height and width must satisfy
  -b, --min_size <MIN_SIZE>
          Set a minimum file size (in bytes) for searching image files
  -B, --max_size <MAX_SIZE>
          Set a maximum file size (in bytes) for searching image files
  -i, --interval <INTERVAL>
          Set the interval (in seconds) between each wallpaper displayed
  -n, --monitor <MONITOR>
          Set the number of monitors [default: 2]
  -s, --sort
          Sort the images found
  -v, --verbose
          Show intermediate runtime messages
  -h, --help
          Print help (see more with '--help')
  -V, --version
          Print version

min_dimension is the minimum value obtained from the width and height of an image file:

min_dimension = min(width, height).

max_dimension is the maximum value obtained from the width and height of an image file:

max_dimension = max(width, height).

Desktops

Make changes to the source code.

git clone https://github.com/claudiofsr/wallswitch.git

cd wallswitch

Edit the file: 'src/desktops.rs'.

To build and install from source, run the following command:

cargo b -r && cargo install --path=.

gnome

Create a wallpaper file and set it as your desktop background image.

See the function:

fn set_gnome_wallpaper()

xfce

See the function:

fn set_xfce_wallpaper()

Monitor 1: "/backdrop/screen0/monitorDP-0/workspace0/last-image"

Monitor 2: "/backdrop/screen0/monitorDP-2/workspace0/last-image"

Monitor N: ...

openbox

See the function:

fn set_openbox_wallpaper()

Mutually exclusive features

To use the clap (default):

cargo b -r && cargo install --path=. --features args_v1

To reduce binary size, alternatively use my Command Line Argument Parser (args_v2.rs):

cargo b -r && cargo install --path=. --features args_v2

Dependencies

  • imagemagick (image viewing/manipulation program).

  • feh (fast and light image viewer).