Einführung
Diese Antwort ist eine Bearbeitung der ursprünglichen Antwort. Als ich in meinen Ubuntu- und Linux-Studien Fortschritte gemacht habe, habe ich eine Vielzahl von Ansätzen entdeckt und mein Verständnis dafür vertieft, wie das Festlegen eines Hintergrunds in Ubuntu funktioniert. Diese Antwort ist mein Versuch, das, was ich bisher gelernt habe, so gut wie möglich zu dokumentieren, und ich hoffe, dass dieses Material für andere nützlich sein kann.
Der wichtige Teil ist, dass Sie den Hintergrund für den Unity-Desktop über die Befehlszeile festlegen können
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Hintergrundeinstellung in Unity vs Bare X Desktop
Die Art und Weise, wie Unity funktioniert, ist so, dass sich darunter ein nackter X-Desktop befindet, und darüber befindet sich das Desktop-Fenster von Unity (das in der Tat eine spezielle Instanz von Nautilus 'Fenster ist, dem Standard-Dateimanager von Ubuntu). Also, wenn du anrufst
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Damit wird der Hintergrund für dieses spezielle Nautilus-Fenster festgelegt. Wenn Sie Desktopsymbole mit deaktivieren
gsettings set org.gnome.desktop.background show-desktop-icons false
Dadurch wird der Nautilus-Desktop beendet und der Bare-Bones-X-Desktop angezeigt. Für den Bare-Bone-X-Desktop können Sie das feh
Programm verwenden. Insbesondere dieser Befehl:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
Es gibt auch eine GUI-Alternative dazu nitrogen
. Die Ansätze feh
und nitrogen
können mit anderen Desktops als Unity verwendet werden, z. B. openbox
oder blackbox
. Der gsettings
Ansatz kann mit Unity oder einem anderen GNOME-basierten Desktop verwendet werden.
Deaktivieren des Befehls gsettings
Was genau macht der gsettings
Befehl? Nun, zuallererst gibt es für jeden Benutzer eine dconf- Datenbank mit Einstellungen, die als Ersatz für veraltete GConf gedacht ist , und auf die über einen dconf
Befehl oder zugegriffen werden kann gsettings
. Insbesondere haben wir es hier mit dem org.gnome.desktop.background
Schema und einem seiner Schlüssel zu tun
picture-uri
.
URI, das file:///home/JohnDoe/Pictures/cool_wallpaper.png
heißt eigentlich Uniform Resource Identifier , der ursprünglich für die Internetnutzung erstellt wurde, aber es gibt ein Datei-URI- Schema, wie wir es hier sehen. Das Coole an URI ist, dass es einen byte-codierten Pfad gibt, wenn Sie ein nicht-englisches Gebietsschema verwenden, z. B. mit meinem chinesischen Desktop. Ich habe folgenden URI für mein Backgroun:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Scripting mit gsettings
Natürlich ist es mühsam, den Befehl jedes Mal aufzuschreiben, und man kann ein bisschen Skriptmagie verwenden. Zum Beispiel ist hier, was ich in meinem eingestellt habe, ~/.bashrc
damit ich Hintergrund nach Belieben ändern kann:
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
}
Diese Funktion kann mit absoluten Pfad wie aufgerufen werden
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
oder mit dem relativen Pfad vom aktuellen Arbeitsverzeichnis
change_background Pictures/cool_wallpaper.jpg
Außerdem wird geprüft, ob eine Datei vorhanden ist, und Symlinks werden aufgelöst. Dies kann in einem Shell-Skript oder als Standalone-Funktion für den täglichen Gebrauch verwendet werden.
Dies ist natürlich nicht der einzige Weg. Python hat eine API für Gio (die die Hauptbibliothek dahinter ist gsettings
). Ich habe ein gsettings_get
und gsettings_set
Funktionen geschrieben, die für andere Projekte wie Launcher List Indicator sehr nützlich waren . Wenn Sie einen Hintergrund festlegen, kann dieser auch verwendet werden, und ich habe ihn erst kürzlich für diese Frage verwendet . Hier ist eine vereinfachte Version desselben Ansatzes:
#!/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()
Natürlich gelten auch hier die gleichen Regeln für Skripte: chmod +x set_wallpaper.py
Stellen Sie sicher, dass sie ausführbar sind, und speichern Sie sie im (vorzugsweise) ~/bin
Ordner. Die Verwendung ist einfach: Der ./set_wallpaper.py Picture/cool_image.py
Quellcode dieses Skripts ist auch in meinem GitHub- Repository mit vielen anderen Skripts verfügbar .