使用dconf(或类似的)为另一个用户设置配置


5

在Ubuntu Desktop 13.10上,我有一个以root身份运行的安装脚本。它本质上是根据需要配置计算机,但我需要设置一些东西 dconf。该脚本在常规用户下的终端窗口中运行 sudo。我需要运行命令 dconf write /com/canonical/unity/launcher/favorites "['unity://expo-icon', <...>']"。 (它运行各种不同的设置。)

我已经将这些命令作为登录用户进行了测试,它们的工作正常。但是,当我以root身份登录时,我无法做到 sudo -u bitc dconf write <...>;我得到的错误就像 error: Could not connect: Connection refused 要么 unable to create directory '/root/.cache/conf'

该脚本必须以root身份运行,因为它执行了一些其他任务,但看起来如此 dconf 必须在特定的登录会话下运行,而不仅仅是用户,才能进行配置。我宁愿没有单独的脚本 dconf,但这是可能的。有没有办法附加到登录会话(或其他一些方式来设置 dconf 该用户的密钥)?

(该脚本使用node.js在javascript中编写)


1
dconf是否需要运行相关用户拥有的X会话?
terdon

Answers:


2

这样做是否足够?

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

我试图做类似的事情。我有一个通过SSH连接并以root身份运行的脚本。我希望它能为用户更改一些设置。这似乎对我有用:

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

我认为这可能很糟糕,因为它在本次会话期间产生了一个新的dbus-daemon,但没有dbus-launch,我得到了dbus错误。也许这些特定于gsettings,但我想提一下它以防万一。


添加HOME定义节省了我的一天,谢谢:)(我正在使用来自puppet的dconf来配置多个用户)
Joril

0

我有一个POST-Install脚本来设置我的gsetting。因为我将脚本作为sudo运行,因此EUID为0,因此我必须找到$ RUID(真实用户ID)。

这是我的方法:

#!/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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.