我有一个脚本,每天都会用NASA APOD更新我的桌面背景。自从升级到11.10以后,那个脚本就停止工作了,可能是因为我在使用gconftool-2来实际更新桌面背景。在Unity下有没有新的方法来做这个?
gsettings
来进行操作。与gconftool
类似,它允许您获取或设置单个键。gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'
gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
gconftool
不同),您必须在 URI 前加上 "file://"。
Ubuntu 22.04 及更高版本
自 Ubuntu 22.04 起,行为有所改变,具体取决于您的颜色方案偏好。gsettings get org.gnome.desktop.interface color-scheme
color-scheme
是"prefer-dark",请使用picture-uri-dark
代替:gsettings set org.gnome.desktop.background picture-uri-dark file:///home/serrano/Pictures/y.jpg
picture-uri
:gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
#!/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'
gsettings set org.gnome.desktop.background show-desktop-icons false
feh
程序。特别是这个命令:feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
URI,那个file:///home/JohnDoe/Pictures/cool_wallpaper.png
,其实代表的是统一资源标识符,最初是为互联网使用而创建的,但这里有一个文件URI方案,就是我们在这里看到的。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
gsettings
背后的主要库)。我写了gsettings_get
和gsettings_set
函数,对其他项目非常有用,比如Launcher List Indicator。在设置背景时也可以使用它,并且我最近刚刚在this question中使用过它。这是同样方法的简化版本:#!/usr/bin/env python3
"""
Author: Serg Kolo , <1047481448@qq.com>
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 __name__ == '__main__': main()
chmod +x set_wallpaper.py
命令使其可执行,并将其存储在(最好是)~/bin
文件夹中。使用方法很简单:./set_wallpaper.py Picture/cool_image.py
。此脚本的源代码也可以在我的GitHub存储库中找到,其中还有许多其他脚本。gsettings set org.gnome.desktop.background picture-uri-dark file:///home/Pictures/image.jpg
亮色主题(图片链接):
gsettings set org.gnome.desktop.background picture-uri file:///home/Pictures/image.jpg
dconf write "/org/gnome/desktop/background/picture-uri" "'file:///home/YOUR_USER/bg.png'"
#! /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"
gsettings
如何显示图片?比如说是否应该拉伸以适应屏幕或其他方式? - Alexej Magura