Usa dconf (o confrontabile) per impostare le configurazioni per un altro utente


5

Su Ubuntu Desktop 13.10, ho uno script di installazione che funziona come root. In sostanza configura il computer come necessario, ma devo impostare alcune cose dconf. Lo script viene eseguito in una finestra Terminale sotto un utente normale con sudo. Ho bisogno di eseguire il comando dconf write /com/canonical/unity/launcher/favorites "['unity://expo-icon', <...>']". (Viene eseguito con una varietà di impostazioni diverse.)

Ho testato i comandi come utente di accesso e funzionano perfettamente. Tuttavia, quando ho effettuato l'accesso come root, non posso farlo sudo -u bitc dconf write <...>; Ottengo errori come error: Could not connect: Connection refusedo unable to create directory '/root/.cache/conf'.

Lo script deve essere eseguito come root a causa di alcune altre attività che esegue, ma sembra che dconfdebba essere eseguito sotto la sessione di accesso specifica, non solo l'utente, per configurarlo. Preferirei non avere una sceneggiatura separata per dconf, ma è possibile. C'è un modo per collegarsi alla sessione di accesso (o un altro modo per impostare le dconfchiavi per quell'utente)?

(Lo script è scritto in javascript con node.js.)


1
Dconf non ha bisogno di una sessione X di proprietà dell'utente in questione per funzionare?
terdon,

Risposte:


3

È sufficiente farlo?

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

Stavo cercando di fare qualcosa di simile. Ho uno script che si collega tramite SSH e funziona come root. Voglio che cambi alcune impostazioni per un utente. Questo sembra funzionare per me:

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

Penso che sia potenzialmente negativo perché sta generando un nuovo demone dbus per la durata di questa sessione, ma senza il lancio di dbus ho avuto errori dbus. Forse questi sono specifici delle impostazioni, ma voglio menzionarlo nel caso in cui aiuti.


L'aggiunta della definizione di HOME mi ha salvato la giornata, grazie :) (Sto usando dconf da puppet per configurare più utenti)
Joril,

0

Ho uno script POST-Install che imposta il mio gsetting. Poiché eseguo lo script come sudo, l'EUID è 0, quindi devo trovare $ RUID (ID utente reale).

ecco il mio approccio:

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.