Introdução
Esta resposta é uma edição da resposta original. À medida que progredi nos meus estudos sobre Ubuntu e Linux, descobri uma variedade de abordagens e aprofundou minha compreensão de como funciona um cenário em segundo plano no Ubuntu. Essa resposta é minha tentativa de documentar da melhor maneira possível o que aprendi até agora e é feita na esperança de que esse material possa ser útil para outras pessoas.
A parte importante é que, para definir o plano de fundo da área de trabalho do Unity na 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 x no desktop X vazio
A maneira como o Unity funciona é tal que existe um desktop X vazio abaixo e acima 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ê chama
gsettings set org.gnome.desktop.background picture-uri 'file:///home/JohnDoe/Pictures/cool_wallpaper.jpg'
que define o plano de fundo para a janela especial do Nautilus. Quando você desativa os ícones da área de trabalho com
gsettings set org.gnome.desktop.background show-desktop-icons false
Isso matará a área de trabalho do Nautilus e mostrará a você uma área de trabalho X básica. Para o desktop X básico, você pode usar o feh
programa. Particularmente, este comando:
feh --bg-scale /home/JohnDoe/Pictures/cool_wallpaper.jpg
Também há uma interface gráfica alternativa a isso nitrogen
. As abordagens feh
e nitrogen
podem ser usadas com desktops diferentes do Unity, como openbox
ou blackbox
. A gsettings
abordagem pode ser usada com o Unity ou outro desktop baseado no GNOME.
Desativando o comando gsettings
O que exatamente o gsettings
comando faz? Bem, primeiro de tudo, existe um banco de dados de configurações do dconf para cada usuário, que se destina a substituir o GConf obsoleto , e pode ser acessado via dconf
comando ou gsettings
. Em particular, estamos lidando aqui com o
org.gnome.desktop.background
esquema e uma de suas chaves picture-uri
,.
URI, file:///home/JohnDoe/Pictures/cool_wallpaper.png
na verdade, significa Uniform Resource Identifier , originalmente criado para uso da Internet, mas existe um esquema de URI de arquivo , que é o que vemos aqui. O que é interessante sobre o URI é que ele fornece um caminho codificado por bytes se você usar um código de idioma que não seja o inglês, por exemplo, na 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
Obviamente, escrever o comando toda vez é entediante e pode-se usar um pouco de magia de script. Por exemplo, aqui está o que defini no meu, ~/.bashrc
para que eu possa mudar 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
}
Essa 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
Ele também verifica se o arquivo existe e resolve os links simbólicos. Isso pode ser usado em um script de shell ou como função autônoma para uso diário.
Claro, este não é o único caminho. O Python possui uma API para Gio (que é a principal biblioteca por trás gsettings
). Escrevi as funções gsettings_get
e gsettings_set
, que foram bastante úteis para outros projetos, como o Indicador de lista de iniciantes . No caso de definir um plano de fundo, ele também pode ser usado e eu o usei recentemente para esta pergunta . Aqui está uma versão simplificada dessa mesma abordagem:
#!/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()
Obviamente, as mesmas regras para scripts também se aplicam aqui: verifique se ele é executável chmod +x set_wallpaper.py
e armazene-o na ~/bin
pasta (preferencialmente) . O uso é simples: o ./set_wallpaper.py Picture/cool_image.py
código fonte desse script também está disponível no meu repositório GitHub com muitos outros scripts também.