greetd和regreet使用教程

顯示管理器(或登錄管理器)常見的有 LightDM、GDM、Ly 等,大部分是用 C 寫的,往往只支持圖形界面或者命令行界面。greetd 是 rust 寫的,支持 wayland,同時支持命令行和圖形界面(greeter)。

本文介紹在 labwc 環境下,使用 greetdregreet完成啓動環境配置。

最終效果圖示:

greetd-regreet

greetd 誕生已經好幾年了,初次提交 2019 年:

1commit 2571da3772ff3219af1ccfce169bcaab5603501f
2Author: Kenny Levinsen <[email protected]>
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 <[email protected]>
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

相關文章:

翻譯: