改linux桌面背景,如何在Unity中从命令行更改桌面背景?

阅读: 评论:0

改linux桌面背景,如何在Unity中从命令行更改桌面背景?

改linux桌面背景,如何在Unity中从命令行更改桌面背景?

问题描述

我有一个脚本,每天用NASA APOD更新我的桌面背景。自升级到11.10以来,该脚本停止工作,大概是因为我正在使用gconftool-2来实际更新桌面背景。在Unity下有没有新方法可以做到这一点?

最佳解决方法

Unity和Gnome Shell(Gnome 3)现在都使用GSettings而不是GConf。因此,在Unity和Gnome Shell中,您可以使用命令行工具gsettings。与gconftool一样,它可以让您获取或设置单个密钥。

您可以获取背景图像的当前URI,如下所示:

gsettings desktop.background picture-uri

'file:///home/serrano/Pictures/x.jpg'

并设置背景URI如下(这将立即更新您的桌面背景):

gsettings 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 desktop.background picture-uri "file://$PIC"

保存此脚本并使用命令“crontab -e”编辑您的脚本(它会启动一个编辑器,您将此行放在文件的末尾):

*/1 * * * * /bin/bash /path/to/script.sh

第三种解决方法

Introduction

这个答案是对原始答案的编辑。随着我在Ubuntu和Linux研究方面的进步,我发现了各种方法,并加深了我对如何在Ubuntu中设置背景的理解。这个答案是我试图尽可能地记录到目前为止我所学到的东西,并希望这些材料对其他人有用。

重要的是,要从命令行为Unity桌面设置背景,您可以使用

gsettings desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'

在Unity与裸X桌面中设置背景

Unity工作的方式是下面有裸X桌面,上面有Unity的桌面窗口(实际上是Nautilus窗口的一个特殊实例,Ubuntu的默认文件管理器)。因此,当你打电话

gsettings desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'

为特殊的Nautilus窗口设置背景。使用时禁用桌面图标

gsettings desktop.background show-desktop-icons false

这将杀死Nautilus桌面并向您显示bare-bones X桌面。对于bare-bone X桌面,您可以使用feh程序。特别是这个命令:

feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg

还有GUI替代品,nitrogen。 feh和nitrogen方法可用于Unity以外的桌面,例如openbox或blackbox。 gsettings方法可与Unity或其他GNOME-based桌面一起使用。

禁止gsettings命令

gsettings命令究竟有什么作用?首先,每个用户都有dconf设置数据库,用于替换已弃用的GConf,可通过dconf命令或gsettings访问。特别是,我们在这里处理desktop.background架构及其中一个键picture-uri。

URI,即file:///home/JohnDoe/Pictures/cool_wallpaper.png,实际上代表Uniform Resource Identifier,最初是为互联网使用而创建的,但是有file URI方案,这就是我们在这里看到的。关于URI的一个很酷的地方是,如果你使用non-english语言环境它会提供byte-encoded路径,例如我的中文桌面,我的背景有以下URI:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'

用gsettings编写脚本

当然,每次写出命令都很乏味,可以使用一点脚本魔法。例如,这是我在~/.bashrc中设置的内容,以便我可以随意更改背景:

change_background() {

FILE="'file://$(readlink -e "$1" )'"

if [ "$FILE" != "'file://'" ]

then

gsettings 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

它还会检查文件是否存在并解析符号链接。这可以在shell脚本中使用,也可以作为日常使用的独立功能使用。

当然,这不是唯一的方法。 Python有一个Gio API(这是gsettings背后的主要库)。我编写了gsettings_get和gsettings_set函数,这些函数对Launcher List Indicator等其他项目非常有用。在设置背景的情况下,它也可以使用,我最近刚用它用于this question。这是同一方法的简化版本:

#!/usr/bin/env python3

"""

Author: Serg Kolo , <1047481448@qq>

Date: December, 21,2016

Purpose: script for setting wallpaper, the pythonic way

Written for:

"""

pository import Gio

import os,sys,random

def gsettings_set(schema, path, key, value):

"""Set value of gsettings schema"""

if path is None:

gsettings = w(schema)

else:

gsettings = w_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")

def main():

gschema=&#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 = w_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存储库中找到,其中包含许多其他脚本。

参考资料

本文发布于:2024-01-29 17:20:54,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170652005717008.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23