Verwenden Sie dconf (oder vergleichbar), um Konfigurationen für einen anderen Benutzer festzulegen

2143
Josh The Geek

Auf Ubuntu Desktop 13.10 habe ich ein Setup-Skript, das als root ausgeführt wird. Es konfiguriert im Wesentlichen den Computer als notwendig, aber ich muss einige Dinge mit einstellen dconf. Das Skript läuft in einem Terminalfenster unter einem normalen Benutzer mit sudo. Ich muss den Befehl ausführen dconf write /com/canonical/unity/launcher/favorites "['unity://expo-icon', <...>']". (Es wird mit verschiedenen Einstellungen ausgeführt.)

Ich habe die Befehle als Login-Benutzer getestet und sie funktionieren einwandfrei. Wenn ich jedoch als root angemeldet bin, kann ich dies nicht tun sudo -u bitc dconf write <...>. Ich bekomme Fehler wie error: Could not connect: Connection refusedoder unable to create directory '/root/.cache/conf'.

Das Skript muss aufgrund einiger anderer Aufgaben, die es ausführt, als root ausgeführt werden. Es scheint jedoch, dass dconfes unter der bestimmten Anmeldesitzung ausgeführt werden muss, nicht nur unter dem Benutzer, um es zu konfigurieren. Ich hätte lieber kein eigenes Skript dconf, aber das ist möglich. Gibt es eine Möglichkeit, sich an die Anmeldesitzung anzuschließen (oder eine andere Möglichkeit, die dconfSchlüssel für diesen Benutzer festzulegen)?

(Das Skript ist in Javascript mit node.js geschrieben.)

5
Benötigt dconf nicht eine X-Sitzung, die dem betreffenden Benutzer gehört, um ausgeführt zu werden? terdon vor 10 Jahren 1

2 Antworten auf die Frage

2
Weeble

Ist das ausreichend?

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

Ich habe versucht, etwas Ähnliches zu tun. Ich habe ein Skript, das sich über SSH verbindet und als root ausgeführt wird. Ich möchte einige Einstellungen für einen Benutzer ändern. Das scheint für mich zu funktionieren:

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

Ich denke, das ist potentiell schlecht, weil für die Dauer dieser Sitzung ein neuer dbus-Daemon erzeugt wird. Aber ohne den Dbus-Start habe ich Dbus-Fehler bekommen. Vielleicht sind diese spezifisch für gsettings, aber ich möchte es erwähnen, falls es hilft.

Das Hinzufügen der HOME-Definition hat meinen Tag gerettet, danke :) (Ich verwende dconf von puppet, um mehrere Benutzer zu konfigurieren) Joril vor 7 Jahren 0
0
caracal

Ich habe ein POST-Install-Skript, das meine Einstellung setzt. Da ich das Skript als Sudo ausführe, ist die EUID 0, daher muss ich die $ RUID (Real User ID) finden.

hier ist mein Ansatz:

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