这两天在Jetson nano 上想做一个跳过用户界面直接自动登录到桌面的功能。本来很简单的在System Setting 的Account里打开一下auto login就完成的事情,结果一直是重启两次后就不生效了。研究了两天Ubuntu DM的流程,就顺便记录下来。
如果你也是用的Nvidia的平台并且遇到了和我一样的问题,可以直接跳到最后看看这个坑在哪里。


启动流程

首先简单梳理一下ubuntu 图形界面的启动流程,方便后面理解

  1. 设备内核启动init进程读取inittab获取运行级别
  2. 找到/etc/rcX.d 启动各个服务。图形化Xwindows的服务器xorg就在这开始初始化。
  3. Xwindows会根据/etc/X11/default-display-manager 启动一个显示管理器一般有gdm/gdm3/lightdm
  4. 对应的DM会根据自己配置(/etc/gdm3或/etc/lightdm)启动desktop,常用有unity/LXDE/gnome(ubuntu)
    我们在开机或者是休眠唤醒后看到的登录界面,其实就是第三步Display Manager的欢迎界面。我们要做的就是不显示这个登录界面,直接进入desktop。

配置greeter和desktop自动登录

  • 确认环境配置
    各个网站上一堆关于Ubuntu自动登录的配置,上来就让改这个改那个,改了lightdm配置其实用的是gdm3,这肯定是不生效的。我们要先查看自己的系统环境,使用的究竟是什么。
    查看Display Manager
    $ systemctl status display-manager.service在这里插入图片描述
    查看Desktop
    $ echo $XDG_CURRENT_DESKTOP
    确认自己环境中的greeter和desktop,找到下面对应得修改自动登录方式即可。

  • 配置Display Manager
    DM是由Xwindow启动,配置文件目录为/etc/X11/
    网络上有说修改/etc/X11/default-display-manager更换DM得说法
    $ cat /etc/X11/default-display-manager
    /usr/sbin/lightdm
    或是
    /usr/sbin/gdm3
    我在Ubuntu 18.04.5 LTS环境中尝试并未生效。
    有效得切换DM方案是
    $ sudo dpkg-reconfigure lightdm
    或者
    $ sudo dpkg-reconfigure gdm3
    然后重启
    $ sudo reboot
    当然,前提是你已经安装了gdm3或者lightdm。
    ------------------------------------------------------------------------------------------------------------
    关于gdm3和lightdm的区别
    gdm3是ubuntu正统得最新发布桌面管理器,lightdm得宗旨则是面向全平台方便移植。
    从界面美观和实用性上讲,gdm都要优于lightdm。
    关于启动速度,我对比测试了一下没有明显得差距。

    ------------------------------------------------------------------------------------------------------------

  • GDM3 配置
    gdm3得相关配置文件在/etc/gdm3目录下
    gdm预留了custom.conf 文件方便用户更改配置。
    $ cat /etc/gdm3/custom.conf
    在这里插入图片描述
    配置gdm3自动登录只需要在custom.conf的daemon节点下添加
    AutomaticLogin=你的用户名
    AutomaticLoginEnable=True
    “=”后面空格和true的大小写都是无所谓的。
    有些文章中提到的在桌面系统菜单中user account里打开autologin,其实也是系统自动修改了custom.conf中这两个属性的值。

    更多关于gdm的配置,包括root用户自动登录,修改欢迎界面背景字体等配置,请查看archlinux GDM文档说明

  • LightDM 配置
    若你使用的lightdm,可以在/etc/lightdm目录下找到对应的配置文件
    /etc/lightdm/lightdm.conf
    也可在这个目录下自己创建一个50-myconfig.conf文件
    /etc/lightdm/lightdm.conf.d/50-myconfig.con
    系统会优先读取lightdm.conf.d中的配置。
    $ cat /etc/lightdm/lightdm.conf.d/50-myconfig.conf
    在这里插入图片描述
    若要打开自动登录,在conf文件中添加
    $ autologin-user=username
    同时需要将对应的用户名和密码添加到autologin和nopasswdlogin组中
    $ groupadd -r nopasswdlogin
    $ gpasswd -a username nopasswdlogin
    然后在/etc/pam.d/lightdm 首行添加如下
    auth sufficient pam_succeed_if.so user ingroup nopasswdlogin
    在这里插入图片描述
    即可完成lightdm 自动登录到桌面的配置。
    更多关于lightdm的配置请查看https://wiki.archlinux.org/title/LightDM


配置自动登录后进入的desktop

通过上面的配置,就可以跳过DM直接进入桌面。但是系统内有多个桌面的用户可能会发现,进入的desktop并不是自己想要的。
这里就需要配置DM启动的桌面。首先查看系统中支持哪些桌面
$ ls /usr/share/xsessions/
ubuntu-communitheme-snap.desktop unity.desktop ux-LXDE.desktop ux-openbox.desktop ux-ubuntu.desktop
若是起用了wayland 需要查看
$ ls /usr/share/wayland-sessions/
这里看到我们支持4个桌面:unity,LXDE,openbox,ubuntu
然后再系统的Accoutserver配置文件中修改默认的Xsession
$ sudo vim /var/lib/AccountsService/users/yourusename
在这里插入图片描述
修改要启动的桌面后重启,即可自动登录到对应的桌面。
XSession=untiy
这个步骤对应lightdm配置文件中也有,但是由于AccountService影响,在lightdm中修改并不会生效。
或者有个简单的方法,就是在配置自动登录前,通过登录界面选择需要的桌面,然后开启自动登录,后面会保存当前的配置。
在这里插入图片描述


总结

到这里正常的系统环境应该都可以成功设置自动登录到桌面了。但是在我环境中,每次配置完第三次重启时,就又会出现登录界面。偶然在nvidia 论坛上看到一个类似问题的帖子,才发现问题出在nvgpu.ko。
由于我重新编译了kernel,导致nvgpu.ko 和kernel不兼容,需要进行strip操作。
$ <tool_chain_path>/aarch64-linux-gnu-strip -–strip-unneeded <path-of-kernel-module.ko>
$ /usr/bin/aarch64-linux-gnu-strip --strip-unneeded /lib/modules/4.9.253-tegra/kernel/drivers/gpu/nvgpu/nvgpu.ko
执行命令后重启,一切终于正常了。

简单记录了自动登录到桌面的步骤和流程,时间有限,期间关于wayland,终端模式自动登录,终端直接启动app等后面有空再记录吧,如有问题可以留言和我沟通

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐