wallswitch 0.42.2

randomly sets wallpapers for desktop monitors.
Documentation

wallswitch

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

Randomly sets wallpapers for n monitors.

[Define papéis de parede aleatoriamente para n monitores.]

Description:

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

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",
  "direction": "Horizontal",
  "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,
  "picture": 1,
  "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.

Set number of wallpaper per monitor (Gnome)

If you want to display N wallpapers on each monitor:

wallswitch -p N

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 desktop monitors.

Usage: wallswitch [OPTIONS]

Options:
  -c, --config
          Read the configuration file and exit the program
      --direction <DIRECTION>
	Attach images to monitors in the Horizontal or Vertical direction          
  -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
  -m, --monitor <MONITOR>
          Set the number of monitors [default: 2]
  -p, --picture <PICTURE>
          Set number of picture per monitor [default: 1]
  -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).