Sha*_*ddi 76 command-line customization unity background
我有一个脚本,可以每天使用 NASA APOD 更新我的桌面背景。升级到 11.10 后,该脚本停止工作,大概是因为我正在使用gconftool-2实际更新桌面背景。在 Unity 下有没有新方法可以做到这一点?
Ser*_*ira 97
Unity 和 Gnome Shell (Gnome 3) 现在都使用 GSettings 而不是 GConf。因此,在 Unity 和 Gnome Shell 中,您可以使用命令行工具gsettings。就像gconftool,它可以让您获取或设置单个密钥。
您可以按如下方式获取背景图片的当前 URI:
gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'
Run Code Online (Sandbox Code Playgroud)
并按如下方式设置背景 URI(这将立即更新您的桌面背景):
gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
Run Code Online (Sandbox Code Playgroud)
请注意,您必须在 URI 前面加上“file://”才能使其工作(与 不同gconftool)。
为了让您的脚本同时适用于 Gnome 2 和 Shell/Unity,您可以先让它进行 Gnome 版本检查:
gnome-session --version
Run Code Online (Sandbox Code Playgroud)
这将返回 Gnome 的版本。如果版本号以3开头,则gsettings可以使用。如果它返回以 2 开头的版本,请使用您的脚本gconftool。
Ind*_*dra 14
此代码随机更改给定目录中的墙纸。
#!/bin/bash
DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"
Run Code Online (Sandbox Code Playgroud)
保存此脚本并使用命令“crontab -e”进行编辑(它会启动一个编辑器,您将这一行放在文件末尾):
*/1 * * * * /bin/bash /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)
这个答案是对原始答案的编辑。随着我在 Ubuntu 和 Linux 研究中的进步,我发现了多种方法,并加深了我对在 Ubuntu 中设置背景如何工作的理解。这个答案是我尝试尽可能最好地记录迄今为止我所学到的知识,并且希望这些材料对其他人有用。
重要的部分是从命令行为 Unity 桌面设置背景,您可以使用
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Run Code Online (Sandbox Code Playgroud)
Unity 的工作方式是,下方是裸 X 桌面,上方是 Unity 的桌面窗口(实际上是 Nautilus 窗口的一个特殊实例,Ubuntu 的默认文件管理器)。因此,当你打电话
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Run Code Online (Sandbox Code Playgroud)
为那个特殊的 Nautilus 窗口设置背景。当您禁用桌面图标时
gsettings set org.gnome.desktop.background show-desktop-icons false
Run Code Online (Sandbox Code Playgroud)
这将杀死 Nautilus 桌面并向您展示基本的 X 桌面。对于裸机 X 桌面,您可以使用feh程序。特别是,这个命令:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
Run Code Online (Sandbox Code Playgroud)
还有一个 GUI 替代方案,nitrogen. 的feh和nitrogen方法可以用比其他统一台式机,例如可以使用openbox或blackbox。该gsettings方法可用于 Unity 或其他基于 GNOME 的桌面。
gsettings命令究竟是做什么的?好吧,首先,每个用户都有一个dconf设置数据库,它旨在替代已弃用的GConf,并且可以通过dconf命令或gsettings. 特别是,我们在这里处理
org.gnome.desktop.background架构及其键之一picture-uri.
URI,即file:///home/JohnDoe/Pictures/cool_wallpaper.png,实际上代表Uniform Resource Identifier,它最初是为互联网使用而创建的,但有文件 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
}
Run Code Online (Sandbox Code Playgroud)
可以使用绝对路径调用此函数,例如
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
Run Code Online (Sandbox Code Playgroud)
或使用当前工作目录的相对路径
change_background Pictures/cool_wallpaper.jpg
Run Code Online (Sandbox Code Playgroud)
它还执行检查文件是否存在并解析符号链接。这可以在 shell 脚本中使用,也可以作为日常使用的独立函数使用。
当然,这不是唯一的方法。Python 有一个用于 Gio 的 API(它是 背后的主要库gsettings)。我写了一个gsettings_get和gsettings_set函数,它们对其他项目非常有用,比如Launcher List Indicator。在设置背景的情况下,它也可以使用,我最近刚刚用它来解决这个问题。这是相同方法的简化版本:
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Run Code Online (Sandbox Code Playgroud)
当然,脚本的相同规则也适用于这里:确保它可以执行chmod +x set_wallpaper.py并将其存储在(最好) ~/bin文件夹中。用法很简单:./set_wallpaper.py Picture/cool_image.py 这个脚本的源代码也可以在我的GitHub存储库中找到,还有许多其他脚本。