Gsettings with cron

前端 未结 7 1818
北恋
北恋 2020-12-05 13:48

I wrote a bash script that changes the wallpaper (for GNOME3).

#!/bin/bash

# Wallpaper\'s directory.
dir=\"${HOME}/images/wallpapers/\"

# Random wallpaper.         


        
相关标签:
7条回答
  • 2020-12-05 14:38

    Finally I managed how to solve this issue after many, many attempts.

    Indeed, the problem occur because cron uses only a very restricted set of environment variables. And the only one environment variable that is responsible for running in the right way the script from the question when this is set as a cron job is DBUS_SESSION_BUS_ADDRESS, not DISPLAY or XAUTHORITY or GSETTINGS_BACKEND or something else. This fact was also pointed well in this answer.

    But the problem in this answer is that there's no guarantee that the DBUS_SESSION_BUS_ADDRESS variable from that file from ~/.dbus/session-bus/ directory is updated to the current value from the current gnome session. To go over this problem a method would be to find the PID of a process in the current gnome session, and obtain the dbus address from its environment. We can do this as follow:

    PID=$(pgrep gnome-session)  # instead of 'gnome-session' it can be also used 'noutilus' or 'compiz' or the name of a process of a graphical program about that you are sure that is running after you log in the X session
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
    

    That being said, the script should look like:

    #!/bin/bash
    
    # TODO: At night only dark wallpapers.
    
    # Wallpaper's directory.
    dir="${HOME}/images/wallpapers/"
    
    # export DBUS_SESSION_BUS_ADDRESS environment variable
    PID=$(pgrep gnome-session)
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
    
    # Random wallpaper.
    wallpaper=`find "${dir}" -type f | shuf -n1`
    
    # Change wallpaper.
    # http://bit.ly/HYEU9H
    gsettings set org.gnome.desktop.background picture-options "spanned"
    gsettings set org.gnome.desktop.background picture-uri "file://${wallpaper}"
    
    0 讨论(0)
提交回复
热议问题