Я пытаюсь изменить менеджера по оформлению по умолчанию на Ubuntu 18.04.1 неинтерактивным способом сделать это в сценарии.
Все работает как ожидалось при использовании
dpkg-reconfigure gdm3
dpkg-reconfigure lightdm
Я пытался установить shared/default-x-display-manager
допустимому менеджеру по оформлению и выполненный dpkg-reconfigure
, но это не добивалось цели.
Сначала проверьте, какой менеджер по оформлению установлен.
root@host:~# cat /etc/X11/default-display-manager
/usr/sbin/gdm3
root@host:~# cat /etc/X11/default-display-manager
/usr/sbin/gdm3
Затем набор shared/default-x-display-manager
кому: lightdm
и проверьте его.
root@host:~# echo set shared/default-x-display-manager lightdm | debconf-communicate
0 value set
root@host:~# echo get shared/default-x-display-manager | debconf-communicate
0 lightdm
Наконец выполненный dpkg-reconfigure --frontend noninteractive lightdm
и проверьте, какой менеджер по оформлению активен. Который, к сожалению, является gdm3
снова.
root@host:~# dpkg-reconfigure --frontend noninteractive lightdm
root@host:~# echo get shared/default-x-display-manager | debconf-communicate
0 gdm3
root@host:~# cat /etc/X11/default-display-manager
/usr/sbin/gdm3
root@host:~# ll /etc/systemd/system/display-manager.service
lrwxrwxrwx 1 root root 32 Jan 31 20:03 /etc/systemd/system/display-manager.service -> /lib/systemd/system/gdm3.service
То же происходит, если я хочу переключиться от lightdm
кому: gdm3
.
Что-нибудь, что я пропускаю здесь или разве это не предназначается для работы вообще?
Я видел в сценариях для gdm3
это, если существует/etc/X11/default-display-manager.debconf-update файл, systemd
единица и/etc/X11/default-display-manager обновляется соответственно.
К сожалению, это не работает на lightdm
как это использование некоторый другой метод (методы), чтобы сделать работу.
Надежда кто-то еще может пролить некоторый свет на это и знает удобный способ настроить менеджера по оформлению нев интерактивном режиме.
После чтения .post*
, '.pre*' и .config
сценарии gdm3
и lightdm
Я нашел способ работать dpkg-reconfigure
в интерактивном режиме измениться между менеджерами по оформлению и сохранить волшебство упомянутого pre
, post
и config
сценарии.
Все, что необходимо сделать, должно обновить/etc/X11/default-display-manager файл с двоичным файлом менеджера по оформлению, на который Вы хотите измениться. Затем выполненный dpkg-reconfigure
нев интерактивном режиме и Вы сделаны. Ну, gdm3
не обновляет debconf
база данных, тогда как lightdm
делает, но это в порядке, чтобы сделать это вручную.
Здесь мы идем...
Изменение от lightdm
кому: gdm3
.
$ echo "/usr/sbin/gdm3" > /etc/X11/default-display-manager
$ DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true dpkg-reconfigure gdm3
$ echo set shared/default-x-display-manager gdm3 | debconf-communicate
Изменение от gdm3
кому: lightdm
.
$ echo "/usr/sbin/lightdm" > /etc/X11/default-display-manager
$ DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true dpkg-reconfigure lightdm
$ echo set shared/default-x-display-manager lightdm | debconf-communicate
Как уже упомянуто последний шаг echo set shared/default-x-display-manager lightdm | debconf-communicate
не действительно необходимо здесь как сценарии lightdm
будет заботиться о нем. Но ради упрощенного сценария не повреждает устанавливать его.
Соединение вещей в сценарий оболочки могло быть следующие. Можно было добавить больше управления в случае необходимости.
$ cat set_dm.sh
#!/bin/bash
set_dm() {
DISPLAY_MANAGER="gdm3"
DISPLAY_MANAGER_SERVICE="/etc/systemd/system/display-manager.service"
DEFAULT_DISPLAY_MANAGER_FILE="/etc/X11/default-display-manager"
if [ -n "${1}" ]
then
DISPLAY_MANAGER="$1"
fi
DISPLAY_MANAGER_BIN="/usr/sbin/${DISPLAY_MANAGER}"
if [ ! -e "${DISPLAY_MANAGER_BIN}" ]
then
echo "${DISPLAY_MANAGER} seems not to be a valid display manager or is not installed."
exit 1
fi
echo "${DISPLAY_MANAGER_BIN}" > "${DEFAULT_DISPLAY_MANAGER_FILE}"
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true dpkg-reconfigure "${DISPLAY_MANAGER}"
echo set shared/default-x-display-manager "${DISPLAY_MANAGER}" | debconf-communicate &> /dev/null
echo -n "systemd service is set to: "
readlink "${DISPLAY_MANAGER_SERVICE}"
echo -n "${DEFAULT_DISPLAY_MANAGER_FILE} is set to: "
cat "${DEFAULT_DISPLAY_MANAGER_FILE}"
echo -n "debconf is set to: "
echo get shared/default-x-display-manager | debconf-communicate
}
set_dm $1
Эти две переменные DEBIAN_FRONTEND=noninteractive
и DEBCONF_NONINTERACTIVE_SEEN=true
необходимы для реального выполнения в интерактивном режиме.
То, что также помогло, было переменной среды DEBCONF_DEBUG
видеть что debconf
делает. Это может быть установлено на
user
developer
db
.*
который является всем вышеупомянутым