Как изменить фон рабочего стола из командной строки в Unity?
63
У меня есть скрипт, который обновляет фон моего рабочего стола каждый день с помощью НАСА APOD. После обновления до 11.10 этот скрипт перестал работать, предположительно потому, что я использую его gconftool-2для обновления фона рабочего стола. Есть ли новый способ сделать это в Unity?
И 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'
И установите фоновый 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вместо этого.
Я использовал эту команду в Ubuntu 12.04, и система
2
@YumYumYum: Очень необычно, что вышеперечисленные команды могут привести к сбою в вашей системе, если в вашей системе не происходит что-то еще.
Серрано
Вы можете добавить Cinnamon в список Desktop Environment, используя gsettings;)
MrVaykadji
Обратите внимание, что вы должны добавить URI к «file: //», чтобы это работало (в отличие от gconftool). <- Это важно! Я не нашел это упомянуто явно где-либо еще.
Том
2
Это хорошо для текущего пользователя, вошедшего в систему. Я хотел бы знать, как программно менять обои другого пользователя! Я попробовал sudo --user = <username> gsettings ... но это не удалось.
Кайван
12
Этот код случайным образом меняет обои из данного каталога.
Каталог обоев должен содержать только файлы обоев, а не каталог.
loxaxs
Однако, gsettings не будет работать с cron. вам нужно установить переменную среды DBUS_SESSION_BUS_ADDRESS, чтобы gsettings работали. Вы можете сделать это, добавив эти две строки перед gsettings (строки разделяются точкой с запятой :) PID = $ (pgrep gnome-session); export DBUS_SESSION_BUS_ADDRESS = $ (grep -z DBUS_SESSION_BUS_ADDRESS / proc / $ PID / environment | cut -d = -f2-);
Уилбрэдли
6
Введение
Этот ответ является редактированием исходного ответа. По мере продвижения в изучении 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программу. В частности, эта команда:
Там также 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 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 importGioimport os,sys,randomdef gsettings_set(schema, path, key, value):"""Set value of gsettings schema"""if path isNone:
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')ifnot 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 со многими другими скриптами.
Благодаря удивительному ответу Серрано, я смог написать этот сценарий, который я использую как часть моих новых сценариев настройки машины для установки черного фона:
Этот код случайным образом меняет обои из данного каталога.
Сохраните этот скрипт и отредактируйте его с помощью команды "crontab -e" (он запускает редактор, в который вы помещаете эту строку в конец файла):
источник
Введение
Этот ответ является редактированием исходного ответа. По мере продвижения в изучении Ubuntu и Linux, я обнаружил множество подходов и углубил свое понимание того, как установка фона работает в Ubuntu. Этот ответ - моя попытка как можно лучше задокументировать то, что я узнал до сих пор, и сделан в надежде, что этот материал может быть полезен для других.
Важной частью является то, что для установки фона для рабочего стола Unity из командной строки, вы можете использовать
Настройка фона в Unity против голого рабочего стола X
Unity работает так, что внизу есть рабочий стол X, а над ним - окно рабочего стола Unity (которое фактически является особым экземпляром окна Nautilus, файлового менеджера Ubuntu по умолчанию). Таким образом, когда вы звоните
это устанавливает фон для этого специального окна Nautilus. Когда вы отключаете значки на рабочем столе с
это убьет рабочий стол Nautilus и покажет вам настольный компьютер X. Для голого рабочего стола X вы можете использовать
feh
программу. В частности, эта команда:Там также 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
чтобы я мог изменить фон по желанию:Эта функция может быть вызвана с абсолютным путем, таким как
или с относительным путем от текущего рабочего каталога
Он также выполняет проверку, если файл существует, и разрешает символические ссылки. Это может быть использовано в сценарии оболочки или как отдельная функция для повседневного использования.
Конечно, это не единственный способ. Python имеет API для Gio (который является основной библиотекой
gsettings
). Я написалgsettings_get
иgsettings_set
функции, которые были весьма полезны для других проектов , таких как Launcher Список индикаторов . В случае установки фона его также можно использовать, и я использовал его совсем недавно для этого вопроса . Вот упрощенная версия того же подхода:Конечно, здесь применяются и те же правила для скриптов: убедитесь, что они сделаны исполняемыми
chmod +x set_wallpaper.py
и сохраните их (предпочтительно) в~/bin
папке. Использование простое:./set_wallpaper.py Picture/cool_image.py
исходный код этого скрипта также доступен в моем репозитории GitHub со многими другими скриптами.источник
Благодаря удивительному ответу Серрано, я смог написать этот сценарий, который я использую как часть моих новых сценариев настройки машины для установки черного фона:
источник
Также вы можете использовать это:
источник