27

壁紙を変更する bash スクリプトを作成しました (GNOME3 用)。

#!/bin/bash

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

# 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}"

端末エミュレーター (例: gnome-terminal) で実行されるスクリプトはうまく機能します。cron による実行中、または ttyX 端末でエラーが発生しました。

** (process:26717): WARNING **: Command line `dbus-launch --autolaunch=d64a757758b286540cc0858400000603 --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n

** (process:26717): WARNING **: Command line `dbus-launch --autolaunch=d64a757758b286540cc0858400000603 --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n

** (process:26721): WARNING **: Command line `dbus-launch --autolaunch=d64a757758b286540cc0858400000603 --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n

** (process:26721): WARNING **: Command line `dbus-launch --autolaunch=d64a757758b286540cc0858400000603 --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n
4

7 に答える 7

44

最後に、何度も何度も試みた後、この問題を解決する方法を管理しました。

実際、この問題は、cron が非常に制限された環境変数セットのみを使用するために発生します。そして、これがcronジョブとして設定されているときに質問からのスクリプトを正しい方法で実行する責任がある唯一の環境変数はDBUS_SESSION_BUS_ADDRESSDISPLAYまたはXAUTHORITYまたはGSETTINGS_BACKENDまたは何か他のものではありません。この事実は、この回答でもよく指摘されていました。

しかし、この回答の問題は、ディレクトリのそのファイルの変数が現在のgnomeセッションの現在の値に更新されるという保証がないことです。この問題を解決するには、現在の gnome セッションでプロセスの PID を見つけ、その環境から dbus アドレスを取得する方法があります。これは次のように行うことができます。DBUS_SESSION_BUS_ADDRESS~/.dbus/session-bus/

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-)

つまり、スクリプトは次のようになります。

#!/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}"
于 2013-10-29T18:49:17.203 に答える
7

私はいくつかの解決策を見つけました。ファイル〜/ .dbus / session-bus / *に含まれている変数DBUS_SESSION_BUS_ADDRESSをエクスポートすると、dbus-launchはエラーについて詳しく通知しません。ただし、壁紙の代わりにアーティファクトがあります。

追加されたコード:

sessionfile=`find "${HOME}/.dbus/session-bus/" -type f`
export `grep "DBUS_SESSION_BUS_ADDRESS" "${sessionfile}" | sed '/^#/d'`

これで、スクリプトは次のようになります。

#!/bin/bash

# TODO: At night only dark wallpapers.

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

# Weird, but necessary thing to run with cron.
sessionfile=`find "${HOME}/.dbus/session-bus/" -type f`
export `grep "DBUS_SESSION_BUS_ADDRESS" "${sessionfile}" | sed '/^#/d'`

# Random wallpaper.
wallpaper=`find "${dir}" -type f | shuf -n1`

# Change wallpaper.
# https://superuser.com/questions/298050/periodically-changing-wallpaper-under-gnome-3/298182#298182
gsettings set org.gnome.desktop.background picture-options "spanned"
gsettings set org.gnome.desktop.background picture-uri "file://${wallpaper}"
于 2012-04-30T21:41:00.520 に答える
4

これを試してみましたが、私にとってはうまくいきました:

dbus-launch --exit-with-session gsettings set schema key value

またはルート cron から:

sudo -u user dbus-launch --exit-with-session gsettings set schema key value

クレジット: http://php.mandelson.org/wp2/?p=565

于 2012-12-21T08:53:10.693 に答える
1

add export DISPLAY=:0 && export XAUTHORITY=/home/username/.Xauthority 、ここで username はあなたのubuntuユーザー名です。X11認証エラーを修正する必要があります。

于 2013-01-02T18:12:09.220 に答える
0

cron を介して壁紙を変更するには、crontab で直接これを行うだけです: crontab -e を実行します。

次のような行を追加します。

30 09 * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /usr/bin/gsettings set org.gnome.desktop.background 画像 uri ファイル:////home/elison/Pictures/morning.jpg

00 12 * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /usr/bin/gsettings set org.gnome.desktop.background 画像 uri ファイル:////home/elison/Pictures/noon.jpg

于 2012-09-07T06:26:40.917 に答える