Use dconf (ou comparável) para definir configurações para outro usuário

5

No Ubuntu Desktop 13.10, eu tenho um script de configuração que é executado como root. Essencialmente, ele configura o computador conforme necessário, mas eu preciso definir algumas coisas com dconf . O script é executado em uma janela do Terminal sob um usuário comum com sudo . Eu preciso executar o comando dconf write /com/canonical/unity/launcher/favorites "['unity://expo-icon', <...>']" . (É executado com uma variedade de configurações diferentes.)

Eu testei os comandos como o usuário de login e eles funcionam muito bem. No entanto, quando eu estou logado como root, não posso fazer sudo -u bitc dconf write <...> ; Recebo erros como error: Could not connect: Connection refused ou unable to create directory '/root/.cache/conf' .

O script deve ser executado como raiz devido a algumas outras tarefas que ele executa, mas parece que dconf deve ser executado sob a sessão de login específica, não apenas o usuário, para configurá-lo. Eu preferiria não ter um script separado para dconf , mas isso é possível. Existe uma maneira de anexar a sessão de login (ou alguma outra maneira de definir as chaves dconf para esse usuário)?

(O script está escrito em javascript com node.js.)

    
por Josh The Geek 09.03.2014 / 04:18

2 respostas

2

É suficiente fazer isso?

sudo -u bitc HOME=/home/bitc dconf write <...>
             ^^^^^^^^^^^^^^^

Eu estava tentando fazer algo parecido. Eu tenho um script que se conecta via SSH e é executado como root. Eu quero mudar algumas configurações para um usuário. Isso parece funcionar para mim:

sudo -u vagrant HOME=/home/vagrant dbus-launch --exit-with-session gsettings set org.freedesktop.ibus.general use-system-keyboard-layout true

Eu acho que é potencialmente ruim porque está gerando um novo dbus-daemon para a duração desta sessão, mas sem o lançamento do dbus eu recebi erros de dbus. Talvez estes sejam específicos para encontros, mas eu quero mencionar isso caso isso ajude.

    
por 22.05.2014 / 17:25
0

Eu tenho um script POST-Install que define meu gsetting. Como executo o script como sudo, o EUID é 0, portanto, preciso encontrar o $ RUID (ID do usuário real).

aqui está minha abordagem:

#!/usr/bin/env bash
# Get the Real Username
RUID=$(who | awk 'FNR == 1 {print $1}')

# Translate Real Username to Real User ID
RUSER_UID=$(id -u ${RUID})

# Set gsettings for the Real User
sudo -u ${RUID} DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${RUSER_UID}/bus" gsettings set org.gnome.desktop.interface clock-show-date false

exit
    
por 05.11.2017 / 22:48