Відповіді:
І 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
замість цього використовується ваш сценарій .
Цей код випадковим чином змінює шпалери з заданого каталогу.
#!/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 (що насправді є спеціальним екземпляром вікна 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
команда? Ну, по-перше, існує база даних налаштувань dconf для кожного користувача, яка призначена як заміна застарілого GConf , і вона доступна через будь-яку dconf
команду або gsettings
. Зокрема, тут ми маємо справу з
org.gnome.desktop.background
схемою і одним з його ключів picture-uri
.
URI це file:///home/JohnDoe/Pictures/cool_wallpaper.png
насправді розшифровується як Уніфікований ідентифікатор ресурсу , який був створений для використання в Інтернеті, але є файлова схема 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
Він також перевіряє, чи існує файл, і вирішує символьні посилання. Це може використовуватися в сценарії оболонки або як окрема функція для щоденного використання.
Звичайно, це не єдиний спосіб. У Python є API для Gio (який є основною бібліотекою позаду gsettings
). Я написав «а» gsettings_get
та gsettings_set
функції, які були дуже корисними для інших проектів, таких як Launcher List Indicator . Якщо встановити фон, його також можна використовувати, і я нещодавно використовував його для цього питання . Ось спрощена версія того ж підходу:
#!/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 з багатьма іншими сценаріями.
Завдяки дивовижній відповіді Серрано, мені вдалося написати цей сценарій, який я використовую як частину моїх нових сценаріїв налаштування машини, щоб встановити чорний фон:
#! /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"