Реконфигурируйте менеджера по оформлению нев интерактивном режиме

Я пытаюсь изменить менеджера по оформлению по умолчанию на 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 как это использование некоторый другой метод (методы), чтобы сделать работу.

Надежда кто-то еще может пролить некоторый свет на это и знает удобный способ настроить менеджера по оформлению нев интерактивном режиме.

1
задан 31 January 2019 в 22:19

1 ответ

После чтения .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
  • .* который является всем вышеупомянутым
0
ответ дан 7 December 2019 в 21:30

Другие вопросы по тегам:

Похожие вопросы: