pengantar
Jawaban ini adalah hasil edit dari jawaban asli. Ketika saya telah maju dalam studi Ubuntu dan Linux saya, saya telah menemukan berbagai pendekatan dan memperdalam pemahaman saya tentang bagaimana pengaturan latar belakang bekerja di Ubuntu. Jawaban ini adalah upaya saya untuk mendokumentasikan sebaik mungkin apa yang telah saya pelajari sejauh ini, dan dilakukan dengan harapan materi ini dapat bermanfaat bagi orang lain.
Bagian penting adalah bahwa untuk mengatur latar belakang untuk desktop Unity dari baris perintah, Anda dapat menggunakan
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Mengatur latar belakang di Unity vs bare X desktop
Cara Unity bekerja sedemikian rupa sehingga ada desktop X telanjang di bawah ini, dan di atas ada jendela desktop Unity (yang sebenarnya adalah contoh khusus dari jendela Nautilus, manajer file default Ubuntu). Jadi, saat Anda menelepon
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
yang menetapkan latar belakang untuk jendela Nautilus khusus itu. Ketika Anda menonaktifkan ikon desktop dengan
gsettings set org.gnome.desktop.background show-desktop-icons false
yang akan membunuh desktop Nautilus dan menampilkan desktop X tanpa tulang. Untuk desktop X tanpa tulang, Anda dapat menggunakan feh
program. Khususnya, perintah ini:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
Ada juga alternatif GUI untuk itu nitrogen
,. The feh
dan nitrogen
pendekatan dapat digunakan dengan desktop selain Unity, seperti openbox
atau blackbox
. The gsettings
pendekatan dapat digunakan dengan Unity atau desktop berbasis GNOME lainnya.
Diseksi perintah gsettings
Apa sebenarnya yang dilakukan gsettings
perintah? Yah, pertama-tama, ada basis data pengaturan dconf untuk setiap pengguna, yang dimaksudkan sebagai pengganti GConf yang sudah usang , dan dapat diakses melalui dconf
perintah atau gsettings
. Khususnya, kita berurusan dengan
org.gnome.desktop.background
skema dan salah satu kuncinya di sini picture-uri
.
URI, file:///home/JohnDoe/Pictures/cool_wallpaper.png
sebenarnya, singkatan dari Uniform Resource Identifier , yang awalnya dibuat untuk penggunaan internet, tetapi ada skema file URI , yang kami lihat di sini. Apa yang keren tentang URI adalah memberikan jalur byte-encoded jika Anda menggunakan lokal non-Inggris, misalnya dengan desktop Cina saya, saya telah mengikuti URI untuk backgroun saya:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Scripting dengan gsettings
Tentu saja, menuliskan perintah setiap kali itu membosankan dan kita bisa menggunakan sedikit keajaiban penulisan naskah. Misalnya, inilah yang saya atur di saya ~/.bashrc
sehingga saya dapat mengubah latar belakang sesuka hati:
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
}
Fungsi ini dapat dipanggil dengan path absolut seperti
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
atau dengan jalur relatif dari direktori kerja saat ini
change_background Pictures/cool_wallpaper.jpg
Itu juga melakukan pemeriksaan apakah file ada dan menyelesaikan symlink. Ini dapat digunakan dalam skrip shell atau sebagai fungsi mandiri untuk penggunaan sehari-hari.
Tentu saja, ini bukan satu-satunya cara. Python memiliki API untuk Gio (yang merupakan pustaka utama di belakang gsettings
). Saya telah menulis a gsettings_get
dan gsettings_set
fungsi, yang cukup berguna untuk proyek lain seperti Indikator Daftar Peluncur . Dalam hal mengatur latar belakang, itu juga dapat digunakan dan saya baru saja menggunakannya untuk pertanyaan ini . Berikut adalah versi sederhana dari pendekatan yang sama:
#!/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()
Tentu saja, aturan yang sama untuk skrip juga berlaku di sini: memastikan skrip dibuat dapat dieksekusi chmod +x set_wallpaper.py
dan menyimpannya dalam ~/bin
folder (lebih disukai) . Penggunaannya sederhana: ./set_wallpaper.py Picture/cool_image.py
Kode sumber skrip ini juga tersedia di repositori GitHub saya dengan banyak skrip lain juga.