(Xubuntu) Como definir o papel de parede usando a linha de comando?

11

Pesquisei bastante no Google, mas não consegui encontrar uma solução para o meu problema.

Sou professor e estou usando o Xubuntu em alguns computadores dos alunos. Eu tenho tudo bloqueado muito bem, mas não consigo descobrir como impedir que os usuários alterem o papel de parede sem precisar desmontar toda a máquina no modo Quiosque. Não me importo se eles mudarem durante a sessão de trabalho, mas gostaria de criar um crontab que redefina o arquivo .png original na reinicialização.

Espero uma entrada cron simples, mas estou disposto a entrar no mundo dos scripts de shell, se for o caso.

Alguma ideia?

John
fonte

Respostas:

10

Na terra do Xfce, isso é

xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/image-path --set /usr/share/backgrounds/xfce/xfce-blue.jpg

(Substitua o caminho do arquivo desejado, é claro.)

xfconf-query --channel xfce4-desktop --list

lista todas as propriedades relacionadas, caso a tela0 / monitor0 não seja a única.

Sal
fonte
Quando eu executo isso na linha de comando, funciona como um encanto. Porém, quando tento adicioná-lo ao cron, ele não faz nada. Alguma ideia? `
John
Que tal incluir a coisa toda em um script de shell e executar o script de shell usando cron?
Chester
Criou o shell script e o tornou executável. Ele é executado quando clicado duas vezes e eu posso executá-lo na linha de comando. Tentei adicioná-lo ao cron com o @reboot como o horário, mas ele não parece estar funcionando. Preciso adicionar algo ao cron que não seja apenas o caminho para o script?
John
@ John Não funciona no cron porque o cron funciona com privilégios de root e este é um plano de fundo específico do usuário. tente mudar o comando para executar como seu usuário
kamil
1
Para mim, --property /backdrop/screen0/monitorLVDS1/workspace0/last-imagefiz o truque.
Ilmari Karonen
9

Para o xfce4 no Xubuntu 14.04, use property / backdrop / screen0 / monitorDisplayPort-1 / workspace0 / last-image em vez de / backdrop / screen0 / monitor0 / image-path

Você também precisa definir a variável de ambiente DBUS_SESSION_BUS_ADDRESS assim:

PID=$(pgrep xfce4-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

No meu caso, eu queria girar o papel de parede (imagem aleatória de uma pasta selecionada) uma vez por dia, mas como eu ligava meu PC de maneira irregular, resolvi-o executando um script do cron a cada meia hora, mas só entra em vigor uma vez um dia.

entrada no crontab (adicione-o via crontab -ecomando):

0,30 * * * * /home/lucifer/scripts/rotate-wallpaper.sh

rotate-wallpaper.sh:

#!/bin/bash
wallpaperdir="/home/lucifer/Pictures/wallpapers"
datefile="/home/lucifer/.wallsw"
thisday=$( date +%j )
wallfiles=($wallpaperdir/*)
randompic=`printf "%s\n" "${wallfiles[RANDOM % ${#wallfiles[@]}]}"`
PID=$(pgrep xfce4-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

if [ -f "$datefile" ]
then
    lastday=$( cat "$datefile" )
    if [ "$lastday" != "$thisday" ]
    then    
        date +%j > "$datefile"
        xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorDisplayPort-1/workspace0/last-image --set $randompic 
    fi
else
    date +%j > "$datefile"
    xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorDisplayPort-1/workspace0/last-image --set $randompic
fi

Nota: -Se você estiver usando a localidade do sistema que não seja em inglês, a propriedade poderá ter um nome diferente. A melhor maneira de descobrir o nome da propriedade, abrir uma janela do terminal e executar este comando:

xfconf-query -c xfce4-desktop -m

Isso ativará o monitoramento das propriedades do xfce4-desktop. Agora mude seu plano de fundo manualmente. Você deve ver o nome da propriedade que foi afetada por essa alteração na janela do terminal. Use este nome de propriedade se for diferente de / backdrop / screen0 / monitorDisplayPort-1 / workspace0 / last-image

Lucif
fonte
2

A configuração image-pathnão tem efeito no meu sistema (XFCE 4.12, Debian buster / sid).

Eu uso o seguinte para definir a imagem de plano de fundo de todos os espaços de trabalho:

xfconf-query --channel xfce4-desktop --list | grep last-image | while read path; do
    xfconf-query --channel xfce4-desktop --property $path --set <path>
done
scai
fonte
0

Experimentar

gsettings set org.gnome.desktop.background picture-uri file:///your/picture/location.jpg

O file://é obrigatório.

Chester
fonte
Eu tentei sem sorte. Desde que eu estou executando o XFCE, eu tenho gsettings? A sintaxe do comando faz sentido para mim, mas não sei como aplicá-lo ao Xubuntu.
John
0

Não use cron. Em vez disso, use o script de inicialização. Embora você possa usar o cron, mas não o prefiro nesta situação, porque é específico do usuário.

Faça assim:

sudo vi /etc/rc.local

adicione o seguinte no final do arquivo

sudo -u YOURUSERNAME -g $( id -g YOURUSERNAME ) xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/image-path --set /usr/share/backgrounds/xfce/xfce-blue.jpg

e certifique-se de substituir YOURUSERNAME pelo seu usuário atual. E substitua /usr/share/backgrounds/xfce/xfce-blue.jpg pelo caminho real da nova imagem de plano de fundo e verifique se o usuário tem permissão para ler a imagem

kamil
fonte
1
Por que isso foi prejudicado? O OP solicitou uma maneira que afeta na reinicialização. Talvez o OP precisasse aplicá-lo a vários usuários, mas não o declarou explicitamente. Esta resposta parece estar correta (ainda não a testei). Então, por que o voto negativo?
Stéphane Gourichon
0

para definir a cor de fundo do xfce no script bash:

d=0; r=$d; g=$d; b=$d; \
xfconf-query -c xfce4-desktop \
-p /backdrop/screen0/monitor0/workspace0/color1 \
-s $r -s $g -s $b -s 65535

cores:

black: d=0;
white: d=65535;
red:   r=65535; g=0; b=0;

etc.

rgb são componentes RGB decimais de 16 bits.

65535 = 255 * 257. 255 = 0xFF em hex.

para converter de código de cor hexadecimal de 8 bits para componentes RGB decimais de 16 bits:

x='C31717' # dark red
r=$((16#${x:0:2} * 257))
g=$((16#${x:2:2} * 257))
b=$((16#${x:4:2} * 257))

se a cor do plano de fundo não mudar, defina o estilo da imagem como nenhum

xfconf-query -c xfce4-desktop \
-p /backdrop/screen0/monitor0/workspace0/image-style \
-s 0

.... e defina o estilo de preenchimento como sólido

xfconf-query -c xfce4-desktop \
-p /backdrop/screen0/monitor0/workspace0/color-style \
-s 0

para definir uma cor diferente para cada área de trabalho:

xfconf-query -c xfce4-desktop \
-p /backdrop/single-workspace-mode \
-s false

i=1; # workspace id
xfconf-query -c xfce4-desktop \
-p /backdrop/screen0/monitor0/workspace$i/image-style \
-s 0
xfconf-query -c xfce4-desktop \
-p /backdrop/screen0/monitor0/workspace$i/color-style \
-s 0
x=0; r=$x; g=$x; b=$x; \
xfconf-query -c xfce4-desktop \
-p /backdrop/screen0/monitor0/workspace$i/color1 \
-s $r -s $g -s $b -s 65535

nuff disse ^^

Mila Nautikus
fonte