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 для этого пользователя)?

(Сценарий написан в javascript с помощью node.js.)

2 ответа2

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 на время этого сеанса, но без запуска dbus я получил ошибки dbus. Возможно, они относятся к gsettings, но я хочу упомянуть об этом, если это поможет.

0

У меня есть скрипт POST-Install, который устанавливает мои настройки. Поскольку я запускаю скрипт как sudo, EUID равен 0, поэтому мне нужно найти $ RUID (реальный идентификатор пользователя).

вот мой подход:

#!/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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .