NASA APODで毎日デスクトップの背景を更新するスクリプトがあります。 11.10にアップグレードして以来、おそらくgconftool-2
を使用してデスクトップの背景を実際に更新しているため、そのスクリプトは動作しなくなりました。 Unityでこれを行う新しい方法はありますか?
UnityとGnome Shell(Gnome 3)の両方で、GConfの代わりにGSettingsが使用されるようになりました。したがって、UnityおよびGnomeシェルでは、コマンドラインツールgsettings
を使用できます。 gconftool
と同様に、個々のキーを取得または設定できます。
次のように、背景画像の現在のURIを取得できます。
gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'
そして、背景URIを次のように設定します(デスクトップの背景がすぐに更新されます):
gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
これが機能するためには、URIの前に「file://」を追加する必要があることに注意してください(gconftool
とは異なります)。
スクリプトをGnome 2とShell/Unityの両方で動作させるには、最初にGnomeバージョンチェックを実行させることができます。
gnome-session --version
それはGnomeのバージョンを返します。バージョン番号が3で始まる場合、gsettings
を使用できます。 2で始まるバージョンが返される場合は、スクリプトでgconftool
を代わりに使用してください。
このコードは、指定されたディレクトリから壁紙をランダムに変更します。
#!/bin/bash
DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"
このスクリプトを保存し、コマンド「crontab -e」を使用して編集します(ファイルの最後にこの行を配置するエディターを起動します)。
*/1 * * * * /bin/bash /path/to/script.sh
この回答は、元の回答の編集です。 UbuntuとLinuxの研究を進めるにつれて、さまざまなアプローチを発見し、Ubuntuで背景を設定する方法についての理解を深めました。この回答は、これまでに学んだことを可能な限り最高に文書化しようとする私の試みであり、この資料が他の人に役立つことを期待して行われています。
重要な部分は、コマンドラインからUnityデスクトップの背景を設定するために使用できることです
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Unityの動作方法は、下に裸のXデスクトップがあり、その上にUnityのデスクトップウィンドウ(実際にはUbuntuのデフォルトのファイルマネージャーであるNautilusのウィンドウの特別なインスタンス)があります。したがって、あなたが電話するとき
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
その特別なNautilusウィンドウの背景を設定します。でデスクトップアイコンを無効にすると
gsettings set org.gnome.desktop.background show-desktop-icons false
これにより、Nautilusデスクトップが強制終了され、最低限のXデスクトップが表示されます。ベアボーンXデスクトップでは、feh
プログラムを使用できます。特に、このコマンド:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
nitrogen
というGUIの代替もあります。 feh
とnitrogen
のアプローチは、openbox
やblackbox
など、Unity以外のデスクトップで使用できます。 gsettings
アプローチは、Unityまたは他のGNOMEベースのデスクトップで使用できます。
gsettings
コマンドは正確に何をしますか?まあ、まず第一に、 dconf 各ユーザーの設定のデータベースが存在します。これは非推奨の GConf の代替として意図されており、dconf
コマンドまたはgsettings
。特に、ここではorg.gnome.desktop.background
スキーマとそのキーの1つであるpicture-uri
を扱っています。
file:///home/JohnDoe/Pictures/cool_wallpaper.png
というURIは、実際には niform Resource Identifier を表します。これは元々インターネットで使用するために作成されましたが、 file URI schemeがあります。ここに。 URIのすばらしい点は、英語以外のロケールを使用している場合、たとえば中国のデスクトップでバイトエンコードされたパスを提供することです。背景に次のURIがあります:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
もちろん、毎回コマンドを書き出すのは面倒であり、少しのスクリプトマジックを使用できます。たとえば、背景を自由に変更できるように、~/.bashrc
に設定したものを次に示します。
change_background() {
FILE="'file://$(readlink -e "$1" )'"
if [ "$FILE" != "'file://'" ]
then
gsettings set org.gnome.desktop.background picture-uri "$FILE"
else
echo "File doesn't exist"
fi
}
この関数は、次のような絶対パスで呼び出すことができます。
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
または現在の作業ディレクトリからの相対パスで
change_background Pictures/cool_wallpaper.jpg
また、ファイルが存在するかどうかのチェックを実行し、シンボリックリンクを解決します。これは、シェルスクリプトで使用するか、毎日使用するスタンドアロン機能として使用できます。
もちろん、これが唯一の方法ではありません。 PythonにはGioのAPIがあります(これはgsettings
の背後にあるメインライブラリです)。 gsettings_get
およびgsettings_set
関数を作成しました。これらの関数は、 ランチャーリストインジケーター などの他のプロジェクトに非常に役立ちました。背景を設定する場合は、背景も使用できますが、最近使用したのは この質問 です。同じアプローチの簡易バージョンを次に示します。
#!/usr/bin/env python3
"""
Author: Serg Kolo , <[email protected]>
Date: December, 21,2016
Purpose: script for setting wallpaper, the Pythonic way
Written for: https://askubuntu.com/q/66914/295286
"""
from gi.repository import Gio
import os,sys,random
def gsettings_set(schema, path, key, value):
"""Set value of gsettings schema"""
if path is None:
gsettings = Gio.Settings.new(schema)
else:
gsettings = Gio.Settings.new_with_path(schema, path)
if isinstance(value, list):
return gsettings.set_strv(key, value)
if isinstance(value, int):
return gsettings.set_int(key, value)
if isinstance(value,str):
return gsettings.set_string(key,value)
def error_and_exit(message):
sys.stderr.write(message + "\n")
sys.exit(1)
def main():
gschema='org.gnome.desktop.background'
key='picture-uri'
if len(sys.argv) != 2:
error_and_exit('>>> Path to a file is required')
if not os.path.isfile(sys.argv[1]):
error_and_exit('>>> Path "' + sys.argv[1] + \
'" isn\'t a file or file doesn\'t exit')
full_path = os.path.abspath(sys.argv[1])
uri = Gio.File.new_for_path(full_path).get_uri()
gsettings_set(gschema,None,key,uri)
if __== '__main__': main()
もちろん、スクリプトにも同じルールが適用されます。chmod +x set_wallpaper.py
を使用して実行可能にし、(好ましくは)~/bin
フォルダーに保存します。使い方は簡単です:./set_wallpaper.py Picture/cool_image.py
このスクリプトのソースコードは、他の多くのスクリプトと一緒に GitHub リポジトリでも利用できます。
Serranoのすばらしい回答のおかげで、黒の背景を設定するために、新しいマシンセットアップスクリプトの一部として使用するこのスクリプトを作成できました。
#! /bin/bash
SRC_URI="https://i.imgur.com/uomkVIL.png"
FNAME="/home/$USER/Pictures/black.png"
wget "$SRC_URI" -O "$FNAME"
gsettings set org.gnome.desktop.background picture-uri "$FNAME"
また、これを使用することができます:
dconf write "/org/gnome/desktop/background/picture-uri" "'file:///home/YOUR_USER/bg.png'"