2023-02-17 13:49:32 +00:00
|
|
|
<p align="center">
|
|
|
|
<!-- Icon by SVGRepo under CC0. Notice at the end of the file -->
|
|
|
|
<img src="./assets/text-icon.svg" height="200px" alt="Lemur Icon by SVGRepo" />
|
|
|
|
</p>
|
2021-12-28 21:56:14 +00:00
|
|
|
|
2023-02-17 13:49:32 +00:00
|
|
|
Lemurs provides a *Terminal User Interface* (TUI) for a [Display/Login
|
|
|
|
Managers](https://wiki.archlinux.org/title/Display_manager) in Rust for most
|
2023-03-03 19:06:55 +00:00
|
|
|
GNU/Linux and BSD distributions. It can work both *with or without SystemD*.
|
|
|
|
Lemurs works on most Unix systems including Linux, FreeBSD and NetBSD.
|
2021-12-31 18:48:24 +00:00
|
|
|
|
2023-02-17 13:49:32 +00:00
|
|
|
## Goal
|
2021-12-28 21:56:14 +00:00
|
|
|
|
2023-02-17 13:49:32 +00:00
|
|
|
This project creates a small, robust and yet customizable Login Manager which
|
|
|
|
can serve as the front-end to your TTY, X11 or Wayland sessions. Lemurs uses
|
2023-03-03 19:06:55 +00:00
|
|
|
[_Pluggable Authentication Modules_][pam] (PAM) as its method of authentication.
|
2021-12-28 22:18:22 +00:00
|
|
|
|
2023-02-17 13:49:32 +00:00
|
|
|
## Screenshot
|
2021-12-28 22:18:22 +00:00
|
|
|
|
2023-03-03 19:27:18 +00:00
|
|
|
![Cover image](./assets/cover.png)
|
2021-12-28 22:18:22 +00:00
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
2023-02-17 13:49:32 +00:00
|
|
|
[![Packaging status](https://repology.org/badge/vertical-allrepos/lemurs.svg)](https://repology.org/project/lemurs/versions)
|
|
|
|
|
2023-03-03 19:06:55 +00:00
|
|
|
Installation follows three steps.
|
2022-11-22 15:30:26 +00:00
|
|
|
|
2023-03-03 19:06:55 +00:00
|
|
|
1. Compile the codebase
|
|
|
|
2. Copy all files to correct positions
|
|
|
|
3. Enable `init` process to run `lemurs`
|
|
|
|
|
|
|
|
### Arch Linux
|
2022-11-22 15:30:26 +00:00
|
|
|
|
2023-09-20 18:20:20 +00:00
|
|
|
Lemurs can be installed from the [AUR](https://aur.archlinux.org/packages/lemurs). This will
|
2023-03-03 19:06:55 +00:00
|
|
|
build the package on your local machine.
|
2022-11-22 15:30:26 +00:00
|
|
|
|
|
|
|
```bash
|
2023-09-20 18:20:20 +00:00
|
|
|
paru -S lemurs # paru can be replaced by any other AUR helper
|
2022-12-05 18:37:10 +00:00
|
|
|
|
|
|
|
# Not needed if do don't have a window manager yet
|
2023-02-17 13:49:32 +00:00
|
|
|
sudo systemctl disable display-manager.service
|
2022-12-05 18:37:10 +00:00
|
|
|
|
|
|
|
sudo systemctl enable lemurs.service
|
2022-11-22 15:30:26 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
### Compiling from source
|
|
|
|
|
2021-12-31 19:02:53 +00:00
|
|
|
The `install.sh` script can be used to compile and setup the display manager on
|
|
|
|
your Unix machine. This will perform multiple steps:
|
|
|
|
|
2022-07-30 17:41:41 +00:00
|
|
|
1. Build the project in release mode (requires Rust's _cargo_)
|
2021-12-31 19:02:53 +00:00
|
|
|
2. Setup the `/etc/lemurs` folder which contains some of the configuration and
|
|
|
|
necessary files such as your selection of window managers.
|
|
|
|
3. Disables the previous Display Manager
|
2022-11-22 15:30:26 +00:00
|
|
|
4. Copies over the _systemd_ service and enables it.
|
2021-12-31 19:05:45 +00:00
|
|
|
|
2021-12-31 19:13:23 +00:00
|
|
|
Although you might first want to set up some window managers (see
|
|
|
|
[Usage](#Usage)), upon rebooting you should now see Lemurs.
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
2022-11-22 15:30:26 +00:00
|
|
|
After installation you can add your environments by creating runnable scripts.
|
|
|
|
|
|
|
|
For your Xorg put your [xinitrc](https://wiki.archlinux.org/title/Xinit) scripts
|
|
|
|
in the `/etc/lemurs/wms` directory. For Wayland, put a script that starts your
|
|
|
|
compositor in the `/etc/lemurs/wayland` directory. For both cases, the name of
|
|
|
|
the runnable script file is the name that is shown in the environment switcher
|
|
|
|
within lemurs. Multiple Xorg and Wayland environments can exist at the same time.
|
|
|
|
|
|
|
|
### Example 1: BSPWM
|
|
|
|
|
|
|
|
For the [bspwm](https://github.com/baskerville/bspwm) window manager, you might
|
2021-12-31 19:13:23 +00:00
|
|
|
add the script `/etc/lemurs/wms/bspwm`.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
#! /bin/sh
|
|
|
|
sxhkd &
|
|
|
|
exec bspwm
|
|
|
|
```
|
|
|
|
|
|
|
|
Remember to make this script runnable. This is done with the `chmod +x
|
|
|
|
/etc/lemurs/wms/bspwm` command.
|
|
|
|
|
2022-07-30 17:45:24 +00:00
|
|
|
Upon rebooting your new `bspwm` should show up within Lemurs.
|
2021-12-31 19:13:23 +00:00
|
|
|
|
2022-11-22 15:30:26 +00:00
|
|
|
### Example 2: Sway
|
|
|
|
|
|
|
|
For the [sway](https://swaywm.org/) compositor and window manager, you might
|
|
|
|
add the script `/etc/lemurs/wayland/sway`. Ensure that you have sway installed
|
|
|
|
and added yourself to the `seat` group.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
#! /bin/sh
|
|
|
|
exec sway
|
|
|
|
```
|
|
|
|
|
|
|
|
Remember to make this script runnable. This is done with the `chmod +x
|
|
|
|
/etc/lemurs/wayland/sway` command.
|
|
|
|
|
|
|
|
Upon rebooting your new `sway` should show up within Lemurs.
|
|
|
|
|
2022-01-05 20:07:36 +00:00
|
|
|
## Configuration
|
2022-01-05 18:58:43 +00:00
|
|
|
|
2023-09-20 15:36:10 +00:00
|
|
|
Configuration is done through a [TOML] file. By default, Lemurs searches for a
|
|
|
|
`/etc/lemurs/config.toml` file, but an alternative location can be specified
|
|
|
|
using the `--config <path/to/config.toml>` flag. The configuration type can
|
|
|
|
contain any subset of the available options. All the options and explanations
|
|
|
|
as to what they do can be found in the
|
|
|
|
[`extra/config.toml`](./extra/config.toml) file. This file also serves as the
|
|
|
|
default configuration.
|
|
|
|
|
|
|
|
Additionally, there is the possibility of variables in the configuration file.
|
|
|
|
By default, Lemurs searches for a `/etc/lemurs/variables.toml` file, but an
|
|
|
|
alternative location can be specified using the `--variables
|
|
|
|
<path/to/variables.toml`. The `variables.toml` file may contain key-value pairs
|
|
|
|
which can be referenced from within the main `config.toml` file.
|
|
|
|
|
|
|
|
Below shows an example of how the `variables.toml` and `config.toml` file
|
|
|
|
interact.
|
|
|
|
|
|
|
|
```toml
|
|
|
|
# variables.toml
|
|
|
|
replacement_char = "+"
|
|
|
|
show_pw_title = true
|
|
|
|
password_title = "Password :)"
|
|
|
|
title_color = "white"
|
|
|
|
|
|
|
|
# config.toml
|
|
|
|
[password_field]
|
|
|
|
content_replacement_character = "$replacement_char"
|
|
|
|
|
|
|
|
[password_field.style]
|
|
|
|
show_title = "$show_pw_title"
|
|
|
|
title = "Wow a $password_title"
|
|
|
|
title_color = "$title_color"
|
|
|
|
```
|
|
|
|
|
|
|
|
This will be interpreted as:
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[password_field]
|
|
|
|
content_replacement_character = "+"
|
|
|
|
|
|
|
|
[password_field.style]
|
|
|
|
show_title = true
|
|
|
|
title = "Wow a Password :)"
|
|
|
|
title_color = "white"
|
|
|
|
```
|
2021-12-31 19:05:45 +00:00
|
|
|
|
2022-11-22 15:30:26 +00:00
|
|
|
## Preview & Debugging
|
2022-07-30 17:41:41 +00:00
|
|
|
|
2023-03-30 20:14:40 +00:00
|
|
|
Lemurs logs a lot of information of it running to a logging file. There are 3
|
|
|
|
log files.
|
|
|
|
|
|
|
|
- `/var/log/lemurs.log`: This is the main log file that contains information
|
|
|
|
about the control flow and is the first place you should look.
|
|
|
|
- `/var/log/lemurs.client.log`: This is the `stdout` and `stderr` of your
|
|
|
|
environment. This can help you debug your scripts in the `/etc/lemurs/wms` or
|
|
|
|
`/etc/lemurs/wayland` folder.
|
|
|
|
- `/var/log/lemurs.xorg.log`: This is the `stdout` and `stderr` of the X server.
|
|
|
|
This is only used when you run a X11 based environment.
|
|
|
|
|
|
|
|
You can disable logging with the `--no-log` flag. This flag can be adding into
|
|
|
|
your service manager script if you want to disable logging globally.
|
|
|
|
|
|
|
|
If you want to test the UI generated by your configuration file you can also run
|
|
|
|
`lemurs --preview`. This will run a preview instance of your configuration. This
|
|
|
|
will automatically create a `lemurs.log` in the working directory.
|
2022-07-30 17:41:41 +00:00
|
|
|
|
2022-11-22 15:30:26 +00:00
|
|
|
## File Structure
|
|
|
|
|
|
|
|
Below is overview of the source files in this project and a short description of
|
|
|
|
each of them and their use. This can be used by people who want to contribute or
|
|
|
|
want to tweak details for their own installation.
|
|
|
|
|
|
|
|
```
|
|
|
|
|- src: Rust Source Code
|
2023-03-03 19:06:55 +00:00
|
|
|
| |- main.rs
|
|
|
|
| |- chvt.rs: UNIX calls to change of TTY
|
|
|
|
| |- cli.rs: CLI argument parsing
|
2022-11-22 15:30:26 +00:00
|
|
|
| |- config.rs: Configuration file format and options
|
2023-03-03 19:06:55 +00:00
|
|
|
| |- env_container.rs: Handles resetting and resetting the environment variables
|
|
|
|
| |- info_caching.rs: Handling cached username and session environment
|
|
|
|
| |- auth: Interaction with PAM modules and UTMPX
|
|
|
|
| | |- mod.rs
|
|
|
|
| | |- pam.rs
|
|
|
|
| | |- utmpx.rs
|
2022-11-22 15:30:26 +00:00
|
|
|
| |- post_login: All logic after authentication
|
2023-03-03 19:06:55 +00:00
|
|
|
| | |- mod.rs
|
2022-11-22 15:30:26 +00:00
|
|
|
| | |- env_variables.rs: General environment variables settings
|
|
|
|
| | |- x.rs: Logic concerning Xorg
|
|
|
|
| |- ui: TUI code
|
|
|
|
| | |- mod.rs: UI calling logic, separated over 2 threads
|
2023-03-03 19:06:55 +00:00
|
|
|
| | |- chunks.rs: Division of the TUI screen
|
2022-11-22 15:30:26 +00:00
|
|
|
| | |- input_field.rs: TUI input field used for username and password
|
|
|
|
| | |- power_menu.rs: Shutdown and Reboot options UI
|
|
|
|
| | |- status_message.rs: UI for error and information messages
|
|
|
|
| | |- switcher.rs: UI for environment switcher
|
|
|
|
|- extra: Configuration and extra files needed
|
|
|
|
| |- config.toml: The default configuration file
|
|
|
|
| |- xsetup.sh: Script used to setup a Xorg session
|
|
|
|
| |- lemurs.service: The systemd service used to start at boot
|
2023-03-03 19:06:55 +00:00
|
|
|
| |- lemurs.pam: PAM service configuration
|
2022-11-22 15:30:26 +00:00
|
|
|
```
|
|
|
|
|
2023-04-16 08:39:01 +00:00
|
|
|
## Shell Keybindings
|
|
|
|
|
|
|
|
Lemurs has support for some basic shell keybindings.
|
|
|
|
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>A</kbd>: Go to the beginning of the focused input field
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>E</kbd>: Go to the end of the focused input field
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>L</kbd>: Clear the focused input field
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>U</kbd>: Clear input field text before the cursor
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>K</kbd>: Clear input field text after the cursor
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>D</kbd>: Same as <kbd>Delete</kbd>
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>H</kbd>: Same as <kbd>Backspace</kbd>
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>B</kbd>: Same as <kbd>Left</kbd>
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>F</kbd>: Same as <kbd>Right</kbd>
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>P</kbd>: Same as <kbd>Up</kbd>
|
|
|
|
- <kbd>Ctrl</kbd> + <kbd>N</kbd>: Same as <kbd>Down</kbd>
|
|
|
|
|
2022-12-02 18:26:14 +00:00
|
|
|
## Platforms
|
|
|
|
|
|
|
|
Tested on
|
|
|
|
|
|
|
|
- ArchLinux (Vanilla, ArcoLinux)
|
|
|
|
- VoidLinux
|
2022-12-22 16:04:46 +00:00
|
|
|
- Ubuntu (make sure to install `build-essential` and `libpam-dev`)
|
|
|
|
|
|
|
|
## MSRV Policy
|
|
|
|
|
2023-03-03 19:06:55 +00:00
|
|
|
Lemurs has a _Minimum Supported Rust Version_ policy of _N - 2_. This means that
|
|
|
|
we only use Rust languages features that have been in Rust as of 2 releases.
|
2022-12-02 18:26:14 +00:00
|
|
|
|
2022-11-22 15:30:26 +00:00
|
|
|
## License
|
|
|
|
|
2023-02-17 13:49:32 +00:00
|
|
|
The icon used at the top of the repository is not a logo and taken as an icon
|
|
|
|
from the [SVGRepo](https://www.svgrepo.com/svg/252871/lemur). It is marked
|
|
|
|
under CC0 and therefore freely distributable and amendable under a new
|
|
|
|
license.
|
|
|
|
|
2022-11-22 15:30:26 +00:00
|
|
|
The project is made available under the MIT and APACHE license. See the
|
|
|
|
`LICENSE-MIT` and `LICENSE-APACHE` files, respectively, for more information.
|
|
|
|
|
2022-07-30 17:41:41 +00:00
|
|
|
## Contributions
|
|
|
|
|
|
|
|
Please report any bugs and possible improvements as an issue within this
|
|
|
|
repository. Pull requests are also welcome.
|
2023-02-17 13:49:32 +00:00
|
|
|
|
|
|
|
[pam]: https://en.wikipedia.org/wiki/Pluggable_authentication_module
|
2023-09-20 15:36:10 +00:00
|
|
|
[TOML]: https://toml.io/
|