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

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

在 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 refusedunable to create directory '/root/.cache/conf'

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

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

答案1

这样做就足够了吗?

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 守护进程,但如果没有 dbus-launch,我就会收到 dbus 错误。也许这些是 gsettings 特有的,但我想提一下,以防有帮助。

答案2

我有一个 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

相关内容