Wie ändere ich den Desktop-Hintergrund über die Befehlszeile in Unity?
63
Ich habe ein Skript, das meinen Desktop-Hintergrund täglich mit dem NASA APOD aktualisiert. Seit dem Upgrade auf 11.10 funktioniert dieses Skript nicht mehr, vermutlich, weil ich gconftool-2den Desktop-Hintergrund tatsächlich aktualisiere. Gibt es einen neuen Weg, dies unter Unity zu tun?
Sowohl Unity als auch Gnome Shell (Gnome 3) verwenden jetzt GSettings anstelle von GConf. In Unity und Gnome Shell können Sie dafür das Befehlszeilentool verwenden gsettings. Auf gconftooldiese Weise können Sie einen einzelnen Schlüssel abrufen oder festlegen.
Sie können die aktuelle URI des Hintergrundbilds wie folgt abrufen:
gsettings get org.gnome.desktop.background picture-uri
'file:///home/serrano/Pictures/x.jpg'
Und stellen Sie den Hintergrund-URI wie folgt ein (wodurch Ihr Desktop-Hintergrund sofort aktualisiert wird):
gsettings set org.gnome.desktop.background picture-uri file:///home/serrano/Pictures/y.jpg
Beachten Sie, dass Sie dem URI "file: //" voranstellen müssen, damit dies funktioniert (im Gegensatz zu gconftool).
Damit Ihr Skript sowohl mit Gnome 2 als auch mit Shell / Unity funktioniert, können Sie zunächst eine Gnome-Versionsprüfung durchführen lassen:
gnome-session --version
Das wird die Version von Gnome zurückgeben. Wenn die Versionsnummer mit 3 beginnt, gsettingskann verwendet werden. Wenn es eine Version zurückgibt, die mit 2 beginnt, verwenden Sie gconftoolstattdessen Ihr Skript .
Ich habe diesen Befehl in Ubuntu 12.04 verwendet und das System ist abgestürzt
YumYumYum
2
@YumYumYum: Es ist sehr ungewöhnlich, dass die obigen Befehle Ihr System zum Absturz bringen, es sei denn, in Ihrem System ist etwas anderes los.
Serrano
Sie können Zimt zur Liste der Desktop-Umgebung mit gsettings hinzufügen;)
MrVaykadji
Beachten Sie, dass Sie dem URI "file: //" voranstellen müssen, damit dies funktioniert (im Gegensatz zu gconftool). <- Das ist wichtig! Ich fand das nirgendwo anders explizit erwähnt.
Tom
2
Dies ist in Ordnung für den aktuell angemeldeten Benutzer. Ich möchte wissen, wie man programmatisch das Hintergrundbild eines anderen Benutzers ändert ! Ich habe versucht, sudo --user = <Benutzername> gsettings ... aber das ist fehlgeschlagen.
Kaiwan
12
Dieser Code ändert zufällig das Hintergrundbild aus einem bestimmten Verzeichnis.
Speichern Sie dieses Skript und bearbeiten Sie es mit dem Befehl "crontab -e" (es startet einen Editor, in dem Sie diese Zeile am Ende der Datei einfügen):
Das Hintergrundbildverzeichnis darf nur Hintergrundbilddateien und kein Verzeichnis enthalten.
Loxax
gsettings funktioniert jedoch nicht mit cron. Sie müssen die Umgebungsvariable DBUS_SESSION_BUS_ADDRESS festlegen, damit gsettings funktioniert. Sie können dies tun, indem Sie diese beiden Zeilen vor gsettings hinzufügen (durch Semikolon getrennte Zeilen :) PID = $ (pgrep gnome-session); export DBUS_SESSION_BUS_ADDRESS = $ (grep -z DBUS_SESSION_BUS_ADDRESS / proc / $ PID / environ | cut -d = -f2-);
Willbradley
6
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 fehProgramm verwenden. Insbesondere dieser Befehl:
Es gibt auch eine GUI-Alternative dazu nitrogen. Die Ansätze fehund nitrogenkönnen mit anderen Desktops als Unity verwendet werden, z. B. openboxoder blackbox. Der gsettingsAnsatz kann mit Unity oder einem anderen GNOME-basierten Desktop verwendet werden.
Deaktivieren des Befehls gsettings
Was genau macht der gsettingsBefehl? 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 dconfBefehl oder zugegriffen werden kann gsettings. Insbesondere haben wir es hier mit dem org.gnome.desktop.backgroundSchema und einem seiner Schlüssel zu tun
picture-uri.
URI, das file:///home/JohnDoe/Pictures/cool_wallpaper.pngheiß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, ~/.bashrcdamit 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
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_getund gsettings_setFunktionen 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 , <[email protected]>
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,random
def 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()
Natürlich gelten auch hier die gleichen Regeln für Skripte: chmod +x set_wallpaper.pyStellen Sie sicher, dass sie ausführbar sind, und speichern Sie sie im (vorzugsweise) ~/binOrdner. 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 .
Dank der großartigen Antwort von Serrano konnte ich dieses Skript schreiben, das ich als Teil meiner neuen Maschinen-Setup-Skripte verwende, um einen schwarzen Hintergrund festzulegen:
Dieser Code ändert zufällig das Hintergrundbild aus einem bestimmten Verzeichnis.
Speichern Sie dieses Skript und bearbeiten Sie es mit dem Befehl "crontab -e" (es startet einen Editor, in dem Sie diese Zeile am Ende der Datei einfügen):
quelle
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
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
Damit wird der Hintergrund für dieses spezielle Nautilus-Fenster festgelegt. Wenn Sie Desktopsymbole mit deaktivieren
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:Es gibt auch eine GUI-Alternative dazu
nitrogen
. Die Ansätzefeh
undnitrogen
können mit anderen Desktops als Unity verwendet werden, z. B.openbox
oderblackbox
. Dergsettings
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 einendconf
Befehl oder zugegriffen werden kanngsettings
. Insbesondere haben wir es hier mit demorg.gnome.desktop.background
Schema und einem seiner Schlüssel zu tunpicture-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:Diese Funktion kann mit absoluten Pfad wie aufgerufen werden
oder mit dem relativen Pfad vom aktuellen Arbeitsverzeichnis
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 eingsettings_get
undgsettings_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: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 .quelle
Dank der großartigen Antwort von Serrano konnte ich dieses Skript schreiben, das ich als Teil meiner neuen Maschinen-Setup-Skripte verwende, um einen schwarzen Hintergrund festzulegen:
quelle
Auch Sie können dies verwenden:
quelle