Introducción
Esta respuesta es una edición de la respuesta original. A medida que progresé en mis estudios de Ubuntu y Linux, descubrí una variedad de enfoques y profundicé mi comprensión de cómo funciona la configuración de un fondo en Ubuntu. Esta respuesta es mi intento de documentar lo mejor posible lo que he aprendido hasta ahora, y lo hago con la esperanza de que este material pueda ser útil para otros.
La parte importante es que para establecer el fondo para el escritorio de Unity desde la línea de comandos, puede usar
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Establecer fondo en Unity vs escritorio X desnudo
La forma en que funciona Unity es tal que hay un escritorio X desnudo debajo, y arriba está la ventana del escritorio de Unity (que de hecho es una instancia especial de la ventana de Nautilus, el administrador de archivos predeterminado de Ubuntu). Por lo tanto, cuando llamas
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
que establece el fondo para esa ventana especial de Nautilus. Cuando deshabilita los iconos del escritorio con
gsettings set org.gnome.desktop.background show-desktop-icons false
eso matará el escritorio de Nautilus y le mostrará el escritorio X básico. Para el escritorio X básico puedes usar el feh
programa. En particular, este comando:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
También hay alternativa a la interfaz gráfica de usuario, nitrogen
. Los enfoques feh
y nitrogen
se pueden usar con equipos de escritorio que no sean Unity, como openbox
o blackbox
. El gsettings
enfoque se puede usar con Unity u otro escritorio basado en GNOME.
Diseccionando el comando gsettings
¿Qué hace exactamente el gsettings
comando? Bueno, en primer lugar, existe una base de datos de configuración de dconf para cada usuario, que está destinada a reemplazar GConf en desuso , y se puede acceder a través de dconf
comando o gsettings
. En particular, estamos tratando aquí con
org.gnome.desktop.background
esquema y una de sus teclas, picture-uri
.
URI, que en file:///home/JohnDoe/Pictures/cool_wallpaper.png
realidad significa Identificador Uniforme de Recursos , que fue creado originalmente para uso de Internet, pero existe un esquema de URI de archivo , que es lo que vemos aquí. Lo bueno de URI es que proporciona una ruta codificada en bytes si usa una configuración regional que no está en inglés, por ejemplo, con mi escritorio chino, tengo el siguiente URI para mi fondo:'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Scripting con gsettings
Por supuesto, escribir el comando cada vez es tedioso y uno puede usar un poco de magia de secuencias de comandos. Por ejemplo, esto es lo que he configurado en mi ~/.bashrc
para que pueda cambiar el fondo a voluntad:
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
}
Esta función se puede llamar con una ruta absoluta como
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
o con ruta relativa desde el directorio de trabajo actual
change_background Pictures/cool_wallpaper.jpg
También realiza una comprobación si el archivo existe y resuelve enlaces simbólicos. Esto se puede usar en un script de shell o como una función independiente para uso diario.
Por supuesto, esta no es la única forma. Python tiene una API para Gio (que es la biblioteca principal detrás gsettings
). He escrito una gsettings_get
y gsettings_set
funciones, que fueron bastante útiles para otros proyectos, como el Indicador de lista de inicio . En caso de establecer un fondo, también se puede usar y lo he usado recientemente para esta pregunta . Aquí hay una versión simplificada de ese mismo enfoque:
#!/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()
Por supuesto, las mismas reglas para los scripts también se aplican aquí: asegúrese de que sea ejecutable chmod +x set_wallpaper.py
y guárdelo en la ~/bin
carpeta (preferiblemente) . El uso es simple: el ./set_wallpaper.py Picture/cool_image.py
código fuente de este script también está disponible en mi repositorio de GitHub con muchos otros scripts, también.