greetd和regreet使用教程

显示管理器(或登录管理器)常见的有 LightDM、GDM、Ly 等,大部分是用 C 写的,往往只支持图形界面或者命令行界面。greetd 是 rust 写的,支持 wayland,同时支持命令行和图形界面(greeter)。

本文介绍在 labwc 环境下,使用 greetdregreet完成启动环境配置。

最终效果图示:

greetd-regreet

greetd 诞生已经好几年了,初次提交 2019 年:

1commit 2571da3772ff3219af1ccfce169bcaab5603501f
2Author: Kenny Levinsen <kl@kl.wtf>
3Date:   Tue Sep 10 00:36:35 2019 +0200
4
5    Initial commit

应该是目前唯一同时支持 console and graphical greeters 的。

regreet 也是 rust 写的,诞生不久,看了下感觉还不错。

在体验 2 者的组合前,我主要使用 gdm3 和 ly,二者寡淡无味,Gnome 相关的东西都限制得死死的。

话不多说,下面是操作过程。

1. greetd 手动安装

源码下载来后,和其它 rust 应用一样安装非常方便:

 1# Compile greetd and agreety.
 2cargo build --release
 3
 4# Put things into place
 5sudo cp target/release/{greetd,agreety} /usr/local/bin/
 6sudo cp greetd.service /etc/systemd/system/greetd.service
 7mkdir /etc/greetd
 8cp config.toml /etc/greetd/config.toml
 9
10# Create the greeter user
11sudo useradd -M -G video greeter
12sudo chmod -R go+r /etc/greetd/
13
14# Look in the configuration file `/etc/greetd/config.toml` and edit as appropriate.
15# When done, enable and start greetd
16systemctl enable --now greetd

安装完成后,核对下,会自动关联到 display-manager.service,ly、gdm3 等都是相同逻辑。意为 Linux 系统启动后,最后会运行 greed 服务,再由 greed 去召唤 greeter。

1➜ ls -al /etc/systemd/system/display-manager.service
2lrwxrwxrwx 1 root root 34 Aug 24 15:18 /etc/systemd/system/display-manager.service -> /etc/systemd/system/greetd.service

此时先不要重启系统,后续再说明原因。

2. 安装 regreet

下载源码后,直接编译。

1cargo build --all-features --release

复制出命令供系统使用

1sudo cp target/release/regreet /usr/bin/regreet

如果你还要设置其它的,请查看项目的 readme 文档,本文只介绍核心步骤。

3. 配置文件

greed 和 regreet 的配置文件都在:

 1➜  greetd ls
 2config.toml  regreet.css  regreet.toml
 3➜  greetd pwd
 4/etc/greetd
 5➜  greetd cat config.toml
 6[terminal]
 7# The VT to run the greeter on. Can be "next", "current" or a number
 8# designating the VT.
 9vt = 1
10
11# The default session, also known as the greeter.
12[default_session]
13
14# `agreety` is the bundled agetty/login-lookalike. You can replace `/bin/sh`
15# with whatever you want started, such as `sway`.
16# command = "agreety --cmd /bin/sh"
17command = "labwc -s regreet"
18
19# The user to run the command as. The privileges this user must have depends
20# on the greeter. A graphical greeter may for example require the user to be
21# in the `video` group.
22user = "greeter"
23➜  greetd cat regreet.toml
24# SPDX-FileCopyrightText: 2022 Harish Rajagopal <harish.rajagopals@gmail.com>
25#
26# SPDX-License-Identifier: GPL-3.0-or-later
27
28[background]
29# Path to the background image
30# path = "/usr/share/backgrounds/greeter.jpg"
31path = "/usr/share/backgrounds/guilin.jpg"
32
33# How the background image covers the screen if the aspect ratio doesn't match
34# Available values: "Fill", "Contain", "Cover", "ScaleDown"
35# Refer to: https://docs.gtk.org/gtk4/enum.ContentFit.html
36# NOTE: This is ignored if ReGreet isn't compiled with GTK v4.8 support.
37fit = "Contain"
38
39# The entries defined in this section will be passed to the session as environment variables when it is started
40[env]
41ENV_VARIABLE = "value"
42
43[GTK]
44# Whether to use the dark theme
45application_prefer_dark_theme = true
46
47# Cursor theme name
48cursor_theme_name = "Adwaita"
49
50# Font name and size
51font_name = "Cantarell 16"
52
53# Icon theme name
54#icon_theme_name = "Adwaita"
55icon_theme_name = "Papirus"
56
57# GTK theme name
58#theme_name = "Adwaita"
59theme_name = "Orchis-Green"
60
61[commands]
62# The command used to reboot the system
63reboot = [ "systemctl", "reboot" ]
64
65# The command used to shut down the system
66poweroff = [ "systemctl", "poweroff" ]

config.toml 是 greetd 的配置文件,regreet.tom 是 regreet 的配置文件。可参考我的配置

配置项看注释都非常清楚,唯一值得说明的是 command = "labwc -s regreet", 这是我摸索出来的。如果你不是 labwc 环境(比如你用 sway),要去查看 greetd 的文档怎么设置。

regreet.css 我测试了下,并没有生效,默认的颜值就可以了。

可能有的读者不理解 login manager 和 greeter 的区别。

很多 login manager 和 greeter 是捆绑在一起的,比如 gdm3。

有些就是分开的,像 lightDM 这个 login manager 就需要 greeter 来配合使用。从上面 login manager 和 greeter 配置文件中还是能看出来作用差别的。 login manager 负责系统启动后使用那个 VT(tty1~tty7), 执行什么命令启动后续程序;greeter 就是选择 X/wayland 环境,给用户输入密码等一些外在的和用户交互的页面功能,greeter 总会让我联想到酒店的前台,有服务员和一个黄山迎客松的画作等。如果实在理解不了,忽略差别,反正就是系统让你进入 Gnome/KDE/Labwc 等的最后一步。

拯救世界

最后,配置 login manager 还是有风险的,开始配置 greetd 的时候不让重启是因为,你可能还没有配置 greeter,那样的话,理解不深入的用户可能会非常生气,因为系统都进入不了。

但是,人非机器,通常配置等操作容易弄错,一旦你遇到 无法登录图形界面 的时候。

    1. 记得按 Ctrl + Alt + F1~F7,一般系统有 7 个 tty,假设你当前在 tty2 崩了,按Ctr + alt + F1切换到 tty1, 输入用户名密码,此时还能进入终端界面,想办法修复错误就好了。
    1. 如果你实在修复不了,也不想折腾了,不要慌张,重新安装回原来的 login manager 即可,假设是 Gnome 环境:
    1sudo apt reinstall gdm3
    

    这好比在外受到了伤害,喊爸妈要回家,不玩了,摊牌了。

    1. 头铁还想继续,但是 1 步骤都不管用,这种状况真的很崩溃,就是无限循环停留在那个界面,重启也没有用。

      这种事情我在折腾 LightDM 的时候遇到过,一瞬间被吓得手足无错,毕竟电脑什么都操作不了,和废铁砖头一样。

      其实这个时候,还是有得抢救的:就是使用另外一台电脑 ssh 远程登录。如果你 sshd 远程登录都没开,那估计只能引导盘挂载文件系统抢救了,比较费时间(此时,ip 地址通过路由器/抓包等方式查看)。

总之,login manager 还是选稳一点的比较好,毕竟没有人想把自己锁外面,但也不要过于害怕,一般来说 1 和 2 能拯救你了,有的 login manager 还有调试模式。只是为了世上少些烦恼,我把个人经验分享出来,或许能帮到有缘人。

最后修改于: Friday, February 23, 2024
欢迎关注微信公众号,留言交流。

相关文章:

翻译: