Como root, um simples sudo -u <username> <command>
serve.
Eu escrevi um script para alterar meu plano de fundo da área de trabalho. Eu quero que este script seja executado em anacron porque eu frequentemente ligo meu computador à noite. Eu testei partes do script e acho que o problema é com essa linha:
DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"'
( $wallPath
é o caminho do papel de parede)
Ele muda meu papel de parede, mas não muda quando o anacron é executado. Eu percebi que isso era porque o anacron é executado como root (eu também verifico o dconf para root e meu usuário para verificar isso). Então eu criei uma maneira de executar o anacron como um usuário específico. Mas isso não funcionou.
Alguém pode me ajudar a descobrir uma maneira de executar as configurações como usuário? Eu tentei su (nome de usuário) -c 'sh run / this / script' sem sucesso. Eu encontrei algumas coisas sobre a exportação de algumas variáveis env dbus, mas estou tendo dificuldade em segui-lo.
Como root, um simples sudo -u <username> <command>
serve.
Você pode configurar uma instância anacron separada para ser executada no modo de usuário. Para isso, crie uma pasta .anacron
em seu diretório pessoal e nela duas subpastas, etc
e spool
.
Em seguida, continue a criar um novo anacrontab
na sua pasta ~/.anacron/etc
recém-criada com o seguinte conteúdo:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1 10 wallpaperchanger script.sh
onde script.sh é o caminho para o seu script (ou um one-liner, a sua escolha). Configure o intervall e o delay para seu prazer e salve o arquivo como anacrontab
.
Em seguida, adicione a seguinte linha ao seu arquivo ~/.profile
:
/usr/sbin/anacron -s -t ${HOME}/.anacron/etc/anacrontab -S ${HOME}/.anacron/spool
O Anacron deve estar ativo e funcionando no próximo login.
Observação : certifique-se de que $wallPath
seja um caminho de arquivo sã, pois você não contabilizou espaços e caracteres especiais no seu script.
Em vez de usar:
DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"
tente usar:
PID=$(pgrep gnome-session) # instead of 'gnome-session' it can be also used 'noutilus' or 'compiz' or the name of a process of a graphical program about that you are sure that is running after you log in the X session
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"
Veja a explicação na minha resposta aqui .