Skripting von Dconf-Änderungen

Skripting von Dconf-Änderungen

Ich habe für unsere Ubuntu-Rechner am College ein einfaches Skript geschrieben, das einige Dconf-Overrides festlegt, um Design, Hintergrund usw. festzulegen. Allerdings schaffe ich es nicht, den Hintergrund des Anmeldebildschirms richtig einzustellen.

Ausschnitt aus dem Script hierzu:

#Set login background and remove dots
echo "Setting lightdm dconf settings"
xhost +SI:localuser:lightdm
su lightdm -c "gsettings set com.canonical.unity-greeter background '/background.png'"
su lightdm -c "gsettings set com.canonical.unity-greeter draw-grid false"

Dieselben Befehle funktionieren auch, wenn sie direkt in ein Terminal eingegeben werden, bei dem Sie als Benutzer lightdm angemeldet sind, zum Beispiel:

sudo su lightdm -s /bin/bash
gsettings set com.canonical.unity-greeter background '/background.png'
gsettings set com.canonical.unity-greeter draw-grid false

Stellt das Hintergrundbild fein ein

Irgendwelche Ideen, warum die Befehle funktionieren, aber nicht das Skript?

Danke

Antwort1

So habe ich es gelöst: Anstatt „sudo bash“ oder in Ihrem Fall „sudo -c“ auszuführen (was Ihr Skript beim Benutzerwechsel entweder anhält oder einfach nicht funktioniert), führe ich drei kleine Skripte aus.

(Vergessen Sie nicht, jedes der Skripte mit „chmod +x script_name.sh“ ausführbar zu machen.)

Das erste Skript ist meine install.sh:

sudo cp third_script.sh /tmp         # Copy third_script to tmp for easier access
sudo chmod 0755 /tmp/third_script.sh # This needs to be executable by lightdm
sudo bash second_script.sh           # Runs next file
sudo rm /tmp/third_script.sh         # Now we can remove the third script

Dann füge ich in second_script.sh lightdm zu xhost hinzu und führe die dritte Skriptdatei als Lightdm-Benutzer aus:

#!/bin/bash
echo "$USER"                         # To see if root is running the script
xhost +SI:localuser:lightdm
su lightdm -s /tmp/third_script.sh

Und im third_script geschieht die Magie:

#!/bin/bash
echo "$USER"                         # To see if lightdm is running the script
gsettings set com.canonical.unity-greeter background '/background.png'
gsettings set com.canonical.unity-greeter draw-grid false

Bei mir funktioniert es! Sagen Sie mir Bescheid, wenn es einen einfacheren Weg gibt.

verwandte Informationen