Se você puder definir o arquivo com
gsettings set org.gnome.desktop.background picture-uri file:///path/to/the/file
então você pode pegar o arquivo com
gsettings get org.gnome.desktop.background picture-uri
Isso lhe dará uma string como 'file:///usr/share/images/desktop-base/desktop-background.xml'
, que é legal, mas precisa ser analisada antes de podermos usá-la diretamente como um argumento para outro comando shell. Assim, podemos remover facilmente as cotações e a parte file://
com cut
, como:
gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1
(Nota: o arquivo retornado é na verdade um arquivo XML para mim, mas eu não estou usando o GNOME, então não sei como isso funciona em um sistema ativo. Pode haver outra etapa de processamento que precisa acontecer aqui , antes que você possa começar a comparar arquivos.)
Como você já sabe o nome do arquivo com o qual deseja comparar, use cmp
para comparar esses dois arquivos:
cmp my/file.jpg "$(gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1)"
cmp
definirá um valor de retorno de 0
(true), se os arquivos forem iguais, ou diferente de zero (false) se forem diferentes ou algo der errado. Podemos usar isso para decidir o que fazer a seguir, talvez usando o operador ||
, que executará um comando apenas se o comando anterior retornou diferente de zero (falso). Também podemos suprimir a saída de cmp
com a opção -s
. Isso nos dá esse comando que você poderia, por exemplo, executar como uma tarefa cron normal:
cmp -s my/file.jpg "$(gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1)" || gsettings set org.gnome.desktop.background picture-uri file:///full/path/to/my/file.jpg