Tho*_*mas 5 gdm display-manager lightdm 18.04
我正在尝试以非交互式方式更改 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
Run Code Online (Sandbox Code Playgroud)
然后设置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
Run Code Online (Sandbox Code Playgroud)
最后运行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
Run Code Online (Sandbox Code Playgroud)
如果我想从 切换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
Run Code Online (Sandbox Code Playgroud)
更改从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
Run Code Online (Sandbox Code Playgroud)
正如已经提到的,最后一步echo set shared/default-x-display-manager lightdm | debconf-communicate
在这里并不是真正必要的,因为 的脚本lightdm
会处理它。但为了简化脚本,设置它并没有什么坏处。
将所有内容组合到 shell 脚本中可能如下所示。如果需要,可以添加更多控制。
$ 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
Run Code Online (Sandbox Code Playgroud)
真正交互运行需要两个变量DEBIAN_FRONTEND=noninteractive
和 。DEBCONF_NONINTERACTIVE_SEEN=true
环境变量也有帮助,DEBCONF_DEBUG
可以查看debconf
正在做什么。可以设置为
user
developer
db
.*
这是以上所有内容 归档时间: |
|
查看次数: |
7120 次 |
最近记录: |