Скрипты изменений dconf

Скрипты изменений dconf

Я написал простой скрипт для наших машин Ubuntu в колледже, который устанавливает некоторые переопределения dconf для установки темы, фона и т. д. Однако мне не удаётся заставить его правильно установить фон экрана входа в систему.

Раздел сценария для этой цели:

#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"

Эти же команды работают, если их ввести непосредственно в терминал, в котором выполнен вход как пользователь lightdm, например:

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

Устанавливает обои отлично

Есть идеи, почему команды работают, а скрипт — нет?

Спасибо

решение1

Вот как я решил эту проблему: вместо того, чтобы запускать «sudo bash» или, как в вашем случае, «sudo -c» (что либо останавливает ваш скрипт при смене пользователя, либо просто не работает), я запускаю три небольших скрипта.

(Не забудьте сделать каждый из скриптов исполняемым с помощью «chmod +x script_name.sh»)

Первый скрипт — мой 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

Затем в second_script.sh я добавляю lightdm в xhost и запускаю третий файл скрипта от имени lightdm-user:

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

А вот в third_script и происходит волшебство:

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

У меня это работает! Дайте знать, если есть более простой способ.

Связанный контент