Введение
Этот ответ является редактированием исходного ответа. По мере продвижения в изучении Ubuntu и Linux, я обнаружил множество подходов и углубил свое понимание того, как установка фона работает в Ubuntu. Этот ответ - моя попытка как можно лучше задокументировать то, что я узнал до сих пор, и сделан в надежде, что этот материал может быть полезен для других.
Важной частью является то, что для установки фона для рабочего стола Unity из командной строки, вы можете использовать
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Настройка фона в Unity против голого рабочего стола X
Unity работает так, что внизу есть рабочий стол X, а над ним - окно рабочего стола Unity (которое фактически является особым экземпляром окна Nautilus, файлового менеджера Ubuntu по умолчанию). Таким образом, когда вы звоните
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
Там также GUI альтернатива , что nitrogen
. feh
И nitrogen
подходы могут быть использованы с другими , чем Unity настольных компьютеров, таких как openbox
или blackbox
. gsettings
Подход может быть использован с Unity или другим GNOME на основе рабочего стола.
Отключение команды gsettings
Что именно делает 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 для моего backgroun:'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 имеет API для Gio (который является основной библиотекой gsettings
). Я написал gsettings_get
и gsettings_set
функции, которые были весьма полезны для других проектов , таких как Launcher Список индикаторов . В случае установки фона его также можно использовать, и я использовал его совсем недавно для этого вопроса . Вот упрощенная версия того же подхода:
#!/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 со многими другими скриптами.