Используйте dconf (или аналогичный), чтобы установить конфиги для другого пользователя.

2087
Josh The Geek

На 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.)

5
Разве dconf для запуска не нужен сеанс X, принадлежащий данному пользователю? terdon 10 лет назад 1

2 ответа на вопрос

2
Weeble

Is it sufficient to do this?

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

I was trying to do something similar. I have a script that connects via SSH and runs as root. I want it to change some settings for a user. This seems to work for me:

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

I think that's potentially bad because it's spawning a new dbus-daemon for the duration of the this session, but without the dbus-launch I got dbus errors. Perhaps these are specific to gsettings, but I want to mention it in case it helps.

Добавление определения HOME спасло мой день, спасибо :) (я использую dconf из puppet для настройки нескольких пользователей) Joril 8 лет назад 0
0
caracal

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

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

#!/usr/bin/env bash # Get the Real Username RUID=$(who | awk 'FNR == 1 ')  # Translate Real Username to Real User ID RUSER_UID=$(id -u $)  # Set gsettings for the Real User sudo -u $ DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$/bus" gsettings set org.gnome.desktop.interface clock-show-date false  exit