Introdução
Esta resposta é uma edição da resposta original. Conforme progredi em meus estudos do Ubuntu e do Linux, descobri uma variedade de abordagens e aprofundei meu entendimento de como configurar um plano de fundo funciona no Ubuntu. Esta resposta é a minha tentativa de documentar da melhor forma possível o que aprendi até agora, e é feito na esperança de que este material possa ser útil para os outros.
A parte importante é que para definir o plano de fundo para a área de trabalho do Unity a partir da linha de comando, você pode usar
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
Definindo o plano de fundo no Unity vs no desktop X puro
A forma como o Unity funciona é tal que existe um X desktop abaixo, e acima está a janela do Unity (que na verdade é uma instância especial da janela do Nautilus, o gerenciador de arquivos padrão do Ubuntu). Assim, quando você liga
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
que define o plano de fundo para essa janela especial do Nautilus. Quando você desativa os ícones da área de trabalho com
gsettings set org.gnome.desktop.background show-desktop-icons false
que matará a área de trabalho do Nautilus e mostrará a área de trabalho básica do X. Para a área de trabalho X bare-bone, você pode usar o programa feh
. Particularmente, este comando:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
Há também uma alternativa de GUI, nitrogen
. As abordagens feh
e nitrogen
podem ser usadas com áreas de trabalho diferentes de Unity, como openbox
ou blackbox
. A abordagem gsettings
pode ser usada com o Unity ou outro desktop baseado no GNOME.
Disecting the gsettings command
O que exatamente o comando gsettings
faz? Bem, em primeiro lugar, existe um dconf banco de dados de configurações para cada usuário, que se destina a substituir GConf , e é acessível através do comando dconf
ou gsettings
. Em particular, estamos lidando aqui com
org.gnome.desktop.background
schema e uma de suas chaves, picture-uri
.
URI, que file:///home/JohnDoe/Pictures/cool_wallpaper.png
significa, na verdade, Uniform Resource Identifier , originalmente criado para uso da Internet, mas existe o esquema URI , que é o que vemos aqui. O que é legal sobre o URI é que ele fornece um caminho codificado por byte se você usar uma localidade que não seja em inglês, por exemplo, com minha área de trabalho chinesa, tenho o seguinte URI para o meu background: 'file:///home/xieerqi/%E5%9B%BE%E7%89%87/Wallpapers/moon_moon.jpg'
Script com gsettings
É claro que escrever o comando a cada vez é tedioso e é possível usar um pouco de mágica de script. Por exemplo, aqui está o que eu configurei no meu ~/.bashrc
para que eu possa alterar o plano de fundo à vontade:
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 função pode ser chamada com caminho absoluto, como
change_background /home/JohnDoe/Pictures/cool_wallpaper.jpg
ou com caminho relativo do diretório de trabalho atual
change_background Pictures/cool_wallpaper.jpg
Também executa uma verificação se o arquivo existe e resolve links simbólicos. Isso pode ser usado em um script de shell ou como uma função independente para uso diário.
Claro que este não é o único caminho. O Python tem uma API para o Gio (que é a principal biblioteca por trás do gsettings
). Escrevi as funções gsettings_get
e gsettings_set
, que foram bastante úteis para outros projetos, como o Indicador de lista de inicialização . No caso de definir um plano de fundo, ele também pode ser usado e eu usei recentemente para esta pergunta . Aqui está uma versão simplificada da mesma abordagem:
#!/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 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()
Naturalmente, as mesmas regras para os scripts se aplicam aqui também: certifique-se de que ela se torne executável com chmod +x set_wallpaper.py
e armazene-a na pasta (preferrably) ~/bin
. O uso é simples: ./set_wallpaper.py Picture/cool_image.py
O código-fonte deste script também está disponível no meu repositório GitHub com muitos outros scripts também.