pax_global_header 0000666 0000000 0000000 00000000064 14676333633 0014530 g ustar 00root root 0000000 0000000 52 comment=b46a4985c057a4ddd4a9319194628b5786b8ad74
emptty-0.13.0/ 0000775 0000000 0000000 00000000000 14676333633 0013133 5 ustar 00root root 0000000 0000000 emptty-0.13.0/.github/ 0000775 0000000 0000000 00000000000 14676333633 0014473 5 ustar 00root root 0000000 0000000 emptty-0.13.0/.github/workflows/ 0000775 0000000 0000000 00000000000 14676333633 0016530 5 ustar 00root root 0000000 0000000 emptty-0.13.0/.github/workflows/main.yaml 0000664 0000000 0000000 00000004427 14676333633 0020347 0 ustar 00root root 0000000 0000000 name: Build
on:
push:
branches: master
pull_request:
branches: master
jobs:
build-void:
name: Build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
go-version: ['1.20', '1.21', '1.22']
container:
image: 'voidlinux/voidlinux:latest'
steps:
- name: Prepare container
run: |
# Redefine current main repo mirror
echo 'repository=https://repo-default.voidlinux.org/current' > /usr/share/xbps.d/00-repository-main.conf
# Update system xbps
xbps-install -Syu xbps
# Update system
xbps-install -Syu
# Install dependencies
xbps-install -y git make gcc pam-devel libX11-devel
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Checkout
uses: actions/checkout@v4
- name: Git Safe Directory
run: git config --global --add safe.directory /__w/emptty/emptty
- name: Test without tags
run: make test
- name: Test with noxlib tag
run: make test TAGS=noxlib
- name: Test with noutmp tag
run: make test TAGS=noutmp
- name: Test with nopam tag
run: make test TAGS=nopam
- name: Build with noxlib tag
run: |
# Make clean
make clean
# Make build
make build TAGS=noxlib
- name: Build with noutmp tag
run: |
# Make clean
make clean
# Make build
make build TAGS=noutmp
- name: Build with nopam tag
run: |
# Make clean
make clean
# Make build
make build TAGS=nopam
- name: Build without tags
run: |
# Make clean
make clean
# Make build
make build
- name: Test install-pam
run: make install-pam
- name: Test install-manual
run: make install-manual
- name: Test install-config
run: make install-config
- name: Test install-runit
run: make install-runit
- name: Test install-motd-gen
run: make install-motd-gen
- name: Test install
run: make install
- name: Test uninstall
run: make uninstall
emptty-0.13.0/.github/workflows/release.yaml 0000664 0000000 0000000 00000002712 14676333633 0021036 0 ustar 00root root 0000000 0000000 name: Release
on:
push:
tags: '*'
jobs:
release-for-arch:
name: Relase for Arch
runs-on: ubuntu-latest
outputs:
package-name: ${{ steps.build.outputs.package-name }}
container:
image: 'archlinux:base'
steps:
- name: Prepare container
run: |
# Update system
pacman -Syu --noconfirm
# Install dependencies
pacman -S --noconfirm git make go gcc pam libx11
- name: Checkout
uses: actions/checkout@v4
- name: Git Safe Directory
run: git config --global --add safe.directory /__w/emptty/emptty
- id: build
name: Package and Upload
run: |
export TAG=`git describe --tags`
export DISTDIR=emptty-bin-x86_64-${TAG:1}
echo "package-name=$DISTDIR.tar.gz" >> $GITHUB_OUTPUT
# Test and Build
make test build
# Install into distdir
DESTDIR=$DISTDIR make install install-manual install-config install-pam install-systemd
mkdir -p $DISTDIR/usr/share/licenses/emptty/
cp LICENSE $DISTDIR/usr/share/licenses/emptty/LICENSE
# Package distdir
ls $DISTDIR | xargs tar -czf $DISTDIR.tar.gz -C $DISTDIR/
- name: Upload to release
uses: softprops/action-gh-release@v1
with:
files: ${{ steps.build.outputs.package-name }}
draft: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
emptty-0.13.0/.gitignore 0000664 0000000 0000000 00000000020 14676333633 0015113 0 ustar 00root root 0000000 0000000 dist/
cover.out
emptty-0.13.0/LICENSE 0000664 0000000 0000000 00000002047 14676333633 0014143 0 ustar 00root root 0000000 0000000 MIT License
Copyright (c) 2020 tvrzna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
emptty-0.13.0/Makefile 0000664 0000000 0000000 00000006455 14676333633 0014605 0 ustar 00root root 0000000 0000000 DISTFILE=emptty
BUILD_VERSION=`git describe --tags`
GOVERSION=`go version | grep -Eo 'go[0-9]+\.[0-9]+'`
ifdef TAGS
TAGS_ARGS = -tags ${TAGS}
endif
test:
@echo "Testing..."
@go test -coverprofile cover.out ${TAGS_ARGS} ./...
@echo "Done"
clean:
@echo "Cleaning..."
@rm -f dist/${DISTFILE}
@rm -f dist/emptty.1.gz
@rm -rf dist
@echo "Done"
build:
@echo "Building${TAGS_ARGS}..."
@mkdir -p dist
@go build ${TAGS_ARGS} -o dist/${DISTFILE} -ldflags "-X github.com/tvrzna/emptty/src.buildVersion=${BUILD_VERSION}" -buildvcs=false
@gzip -cn res/emptty.1 > dist/emptty.1.gz
@echo "Done"
install:
@echo "Installing..."
@install -DZs dist/${DISTFILE} -m 755 -t ${DESTDIR}/usr/bin
@echo "Done"
install-config:
@echo "Installing config..."
@install -DZ res/conf -m 644 -T ${DESTDIR}/etc/${DISTFILE}/conf
@echo "Done"
install-manual:
@echo "Installing manual..."
@install -D dist/emptty.1.gz -t ${DESTDIR}/usr/share/man/man1
@echo "Done"
install-motd-gen:
@echo "Installing motd-gen.sh..."
@install -DZ res/motd-gen.sh -m 744 -t ${DESTDIR}/etc/${DISTFILE}/
@echo "Done"
install-pam:
@echo "Installing pam file..."
@install -DZ res/pam -m 644 -T ${DESTDIR}/etc/pam.d/${DISTFILE}
@echo "Done"
install-pam-debian:
@echo "Installing pam-debian file..."
@install -DZ res/pam-debian -m 644 -T ${DESTDIR}/etc/pam.d/${DISTFILE}
@echo "Done"
install-pam-fedora:
@echo "Installing pam-fedora file..."
@install -DZ res/pam-fedora -m 644 -T ${DESTDIR}/etc/pam.d/${DISTFILE}
@echo "Done"
install-pam-suse:
@echo "Installing pam-suse file..."
@install -DZ res/pam-suse -m 644 -T ${DESTDIR}/etc/pam.d/${DISTFILE}
@echo "Done"
install-runit:
@echo "Installing runit service..."
@install -DZ res/runit-run -m 755 -T ${DESTDIR}/etc/sv/${DISTFILE}/run
@echo "Done"
install-runit-artix:
@echo "Installing Artix runit service..."
@install -DZ res/runit-run -m 755 -T ${DESTDIR}/etc/runit/sv/${DISTFILE}/run
@echo "Done"
install-systemd:
@echo "Installing systemd service..."
@install -DZ res/systemd-service -m 644 -T ${DESTDIR}/usr/lib/systemd/system/${DISTFILE}.service
@echo "Done"
install-openrc:
@echo "Installing OpenRC service..."
@install -DZ res/openrc-service -m 755 -T ${DESTDIR}/etc/init.d/${DISTFILE}
@echo "Done"
install-s6:
@echo "Installing S6 service..."
@install -DZ res/s6-dependencies -m 644 -T ${DESTDIR}/etc/s6/sv/${DISTFILE}/dependencies
@install -DZ res/s6-type -m 644 -T ${DESTDIR}/etc/s6/sv/${DISTFILE}/type
@install -DZ res/s6-run -m 755 -T ${DESTDIR}/etc/s6/sv/${DISTFILE}/run
@echo "Done. Please recompile your S6 database."
install-dinit:
@echo "Installing dinit service..."
@install -DZ res/dinit-service -m 644 -T ${DESTDIR}/etc/dinit.d/${DISTFILE}
@install -DZ res/dinit-script -m 755 -T ${DESTDIR}/etc/dinit.d/scripts/${DISTFILE}
@echo "Done"
install-all: install install-manual install-pam
uninstall:
@echo "Uninstalling..."
@rm -rf ${DESTDIR}/etc/sv/${DISTFILE}
@rm -rf ${DESTDIR}/etc/runit/sv/${DISTFILE}
@rm -f ${DESTDIR}/usr/lib/systemd/system/${DISTFILE}.service
@rm -f ${DESTDIR}/etc/init.d/${DISTFILE}
@rm -f ${DESTDIR}/usr/share/man/man1/emptty.1.gz
@rm -f ${DESTDIR}/etc/pam.d/emptty
@rm -rf ${DESTDIR}/etc/s6/sv/${DISTFILE}
@rm -rf ${DESTDIR}/usr/bin/${DISTFILE}
@rm -rf ${DESTDIR}/etc/dinit.d/${DISTFILE}
@rm -rf ${DESTDIR}/etc/dinit.d/scripts/${DISTFILE}
@echo "Done"
emptty-0.13.0/README.md 0000664 0000000 0000000 00000035306 14676333633 0014421 0 ustar 00root root 0000000 0000000 # emptty
[](https://github.com/tvrzna/emptty/releases/latest)
[](https://github.com/tvrzna/emptty/actions?query=workflow:Build)
[](https://goreportcard.com/report/github.com/tvrzna/emptty)
Dead simple CLI Display Manager on TTY

[](https://repology.org/project/emptty/versions)
## Configuration
__NOTE__: Please be aware that emptty does not source any kind of `.profile` scripts by default. If you want to use them, please see [samples](SAMPLES.md).
---
#### /etc/emptty/conf
Default startup configuration. On each change it requires to restart emptty.
`TTY_NUMBER` TTY, where emptty will start.
`SWITCH_TTY` Enables switching to defined TTY number. Default is true.
`PRINT_ISSUE` Enables printing of /etc/issue in daemon mode.
`PRINT_MOTD` Enables printing of default motd, static motd or dynamic motd.
`DEFAULT_USER` Preselected user, if AUTOLOGIN is enabled, this user is logged in.
`DEFAULT_SESSION` Preselected desktop session, if user does not use `emptty` file. Has lower priority than `AUTOLOGIN_SESSION`
`DEFAULT_SESSION_ENV` Optional environment of preselected desktop session, if user does not use `emptty` file. Possible values are "xorg" and "wayland".
`AUTOLOGIN` Enables Autologin, if DEFAULT_USER is defined. Possible values are "true" or "false". Default value is false.
__NOTE:__ to enable autologin DEFAULT_USER must be in group nopasswdlogin, otherwise user will NOT be authorized.
`AUTOLOGIN_SESSION` The default session used, if Autologin is enabled. If session is not found in list of session, it proceeds to manual selection.
`AUTOLOGIN_SESSION_ENV` Optional environment of autologin desktop session. Possible values are "xorg" and "wayland".
`AUTOLOGIN_MAX_RETRY` If Autologin is enabled and session does not start correctly, the number of retries in short period is kept to eventually stop the infinite loop of restarts. -1 is for infinite retries, 0 is for no retry. Default value is 2.
`LANG` defines locale for all users. Default value is "en_US.UTF-8"
`DBUS_LAUNCH` Starts "dbus-launch" before desktop command. After end of session "dbus-daemon" is interrupted. Default value is true. If user config is handled as script (does not contain `Exec` option), this config is overridden to false.
`ALWAYS_DBUS_LAUNCH` Starts "dbus-launch" before desktop command in any case, `DBUS_LAUNCH` value is ignored. It also starts even if `XINITRC_LAUNCH` is set to `true`. After end of session "dbus-daemon" is interrupted. Default value is false.
`XINITRC_LAUNCH` Starts Xorg desktop with calling "\~/.xinitrc" script with session exec as argument, if is true, file exists and selected WM/DE is Xorg session, it overrides DBUS_LAUNCH. If user config is handled as script (does not contain `Exec` option), this config is overridden to false.
`VERTICAL_SELECTION` Prints available WM/DE each on new line instead of printing on single line.
`LOGGING` Defines the way, how is logging handled. Possible values are "rotate", "appending" or "disabled". Default value is "rotate".
`LOGGING_FILE` Overrides path of log file. Default value is `/var/log/emptty/[TTY_NUMBER].log`.
__NOTE:__ It expects existence of directories to defined logging file.
`XORG_ARGS` Arguments passed to Xorg server.
`DYNAMIC_MOTD` Allows to use dynamic motd script to generate custom MOTD. Possible values are "true" or "false". Default value is false.
__NOTE:__ Be sure, that dynamic motd has correct content and permissions (e.g. 744), the script is started as default user; in daemon mode it means `root`.
`DYNAMIC_MOTD_PATH` Allows to override default path to dynamic motd. Default value is `/etc/emptty/motd-gen.sh`
`MOTD_PATH` Allows to override default path to static motd. Default value is `/etc/emptty/motd`
`FG_COLOR` Foreground color, available only in daemon mode. List of colors is listed below.
`BG_COLOR` Background color, available only in daemon mode. List of colors is listed below.
`DISPLAY_START_SCRIPT` Script started before Display (Xorg/Wayland) starts.
__NOTE:__ The script is started as default user; in daemon mode it means `root`.
`DISPLAY_STOP_SCRIPT` Script started after Display (Xorg/Wayland) stops.
__NOTE:__ The script is started as default user; in daemon mode it means `root`.
`ENABLE_NUMLOCK` Enables numlock in daemon mode. Possible values are "true" or "false". Default value is false.
`SESSION_ERROR_LOGGING` Defines how logging of session errors is handled. Possible values are "rotate", "appending" or "disabled". Default value is "disabled".
`SESSION_ERROR_LOGGING_FILE` Overrides path of session errors log file. Default value is `/var/log/emptty/session-errors.[TTY_NUMBER].log`.
__NOTE:__ It expects existence of directories to defined logging file.
`NO_XDG_FALLBACK`
Disallows setting of fallback values for all XDG environmental variables and leaves it on Login Controls. Possible values are "true" or "false". Default value is false.
__NOTE:__ Be aware, that setting to "true" could lead to unexpected behaviour.
`DEFAULT_XAUTHORITY`
If set true, it will not use `.emptty-xauth` file, but the standard `~/.Xauthority` file. This allows to handle xauth issues. Possible values are "true" or "false". Default value is false.
`ROOTLESS_XORG`
If set true, Xorg will be started as rootless, if system allows and emptty is running in daemon mode. Possible values are "true" or "false". Default value is false.
__NOTE:__ Rootless Xorg requires additional [changes](#rootless-xorg) changes in Xorg config.
`IDENTIFY_ENVS`
If set true, environmental groups are printed to differ Xorg/Wayland/Custom/UserCustom desktops. Possible values are "true" or "false". Default value is false.
`HIDE_ENTER_LOGIN`
If set true, "hostname login:" is not displayed. Possible values are "true" or "false". Default value is false.
`HIDE_ENTER_PASSWORD`
If set true, "Password:" is not displayed. Possible values are "true" or "false". Default value is false.
`XORG_SESSIONS_PATH`
Path to directory, where Xorg sessions' desktop files are stored. Default value is "/usr/share/xsessions/".
`WAYLAND_SESSIONS_PATH`
Path to directory, where Wayland sessions' desktop files are stored. Default value is "/usr/share/wayland-sessions/".
`SELECT_LAST_USER`
Enables funtionality of saving last successfully logged in user for next login. Possible values are "false", "per-tty" or "global". Default value is false.
`AUTO_SELECTION`
If set to "true" and only one desktop is available, it automatically select that desktop. Possible values are "true" or "false". Default value is false.
`ALLOW_COMMANDS`
If set to "true" and no default user is selected, it allows to enter [commands](#commands) into login input. Possible values are "true" or "false", Default value is true.
`CMD_POWEROFF`
Command to be used to perform poweroff. Default value is "poweroff".
`CMD_REBOOT`
Command to be used to perform reboot. Default value is "reboot".
`CMD_SUSPEND`
Command to be used to perform suspend. Default value is blank, but it tries to use "systemctl suspend", "loginctl suspend" or "zzz".
#### Commands
If commands are allowed and default user is not defined, there could be used commands in login input. All of these commands need to start with colon `:`. Escape characters are ignored to prevent issues with muscle memory from VI.
- `:help`, `:?` prints available commands
- `:poweroff`, `:shutdown` processess poweroff command
- `:reboot` processes reboot command
- `:suspend`, `:zzz` processes suspend command
#### Dynamic MOTD
If `DYNAMIC_MOTD` is set to `true`, this file exists and is executable for its owner, the result is printed as your own MOTD. Be very careful with this script!
#### Static MOTD
Custom file, that prints your own MOTD. Reading this file supports colors (e.g. `\x1b[31m` or `\033[32m`).
#### User Config `(${HOME}/.config/emptty or ${HOME}/.emptty)`
Optional configuration file, that could be also handled as shell script. If is not presented, emptty shows selection of installed desktops.
Configuration file stored as `${HOME}/.config/emptty` has higher priority on loading.
See [samples](SAMPLES.md#emptty-as-config)
`Name` Optional name to be used as Session Name.
`Exec` Defines command to start Desktop Environment/Window Manager. It could contain multiple arguments same as in \*.desktop files. This value does not need to be defined, if user config file is presented as shell script (with shebang at the start and execution permissions).
`Environment` Selects, which environment should be defined for following command. Possible values are "xorg" and "wayland", "xorg" is default.
`Lang` Defines locale for logged user, has higher priority than LANG from global configuration
`Selection` Requires selection of desktop, basically turns `emptty` file into `.xinitrc` for Xorg and Wayland. In this case `Exec` is skipped. Possible values are "false" for never using selection, "true" for always showing selection or "auto" for showing selection or first option autoselect, if there is no other desktop. Defauls value is false.
`LoginShell` Defines custom shell to be used to start the session. This allows to start the session with non-interactive shell e.g. `/bin/bash --login`
`DesktopNames` Value passed into `XDG_CURRENT_DESKTOP` variable.
#### User Exit Script `${HOME}/.config/emptty-exit`
Optional script file, that is handled as shell script and is started, when session is going end. Script is started even if emptty is being terminated. The default timeout to finish script is 3 seconds, but it is configurable from the script itself by setting variable `Timeout`.
`Timeout` Optional custom timeout for script to finish its run, number represents seconds. Default is 3.
#### `/etc/emptty/custom-sessions/` or `${HOME}/.config/emptty-custom-sessions/`
Optional folders for custom sessions, that could be available system-wide (in case of `/etc/emptty/custom-sessions/`) or user-specific (in case of `${HOME}/.config/emptty-custom-sessions/`), but do not have .desktop file stored on standard paths for Xorg or Wayland sessions. Expected suffix of each file is ".desktop".
See [samples](SAMPLES.md#custom-sessions)
`Name` Defines name of Desktop Environment/Window Manager.
`Exec` Defines command to start Desktop Environment/Window Manager.
`Environment` Selects, which environment should be defined for following command. Possible values are "xorg" and "wayland", "xorg" is default.
`DesktopNames` Value passed into `XDG_CURRENT_DESKTOP` variable.
`NoDisplay` / `Hidden` Boolean value, that controls visibility of desktop session.
#### `${HOME}./xinitrc`
If config `XINITRC_LAUNCH` is set to true, it enables possibility to use .xinitrc script. See [samples](SAMPLES.md#xinitrc)
#### Colors
Please, be aware that `LIGHT_` colors could be unavailable as background color.
List of colors
- BLACK
- RED
- GREEN
- YELLOW
- BLUE
- PURPLE
- CYAN
- WHITE
- LIGHT_BLACK
- LIGHT_RED
- LIGHT_GREEN
- LIGHT_YELLOW
- LIGHT_BLUE
- LIGHT_PURPLE
- LIGHT_CYAN
- LIGHT_WHITE
#### Rootless Xorg
If Rootless Xorg does not work as expected, make sure you have set following lines in your `/etc/X11/Xwrapper.config`.
```
needs_root_rights = no
allowed_users = anybody
```
## Logging
As it is mentioned in configuration, there are three options to handle logging of emptty. The logs contains not just logs from emptty, but also from Xorg (if used) and user's WM/DE.
Described log location could differ according configuration `LOGGING_FILE`, that is stored in `/etc/emptty/conf`.
#### rotate
This option provides simple solution, when current instance of `emptty` logs into `/var/log/emptty/[TTY_NUMBER].log` and the previous version is stored as `/var/log/emptty/[TTY_NUMBER].log.old`.
__NOTE:__ Current instance always move previous log into old file, if `emptty` crashes and is started again, previous log is in `/var/log/emptty/[TTY_NUMBER].log.old`.
#### appending
This option provides functionality that logs everything into `/var/log/emptty/[TTY_NUMBER].log` and does not handle log rotation by itself. It leaves the option for user to handle it themselves (e.g. with logrotate).
__NOTE:__ Appending without roration could cause large log file, be sure that log file is rotated.
#### disabled
This option points all log into `/dev/null`, so no log is available.
__NOTE:__ If any issue starts to appear and you want to report it, ensure you do not use this option.
## Build & install
### Build dependencies
- go (>= 1.20)
- gcc
- pam-devel
- libx11-devel (libx11)
### Dependencies
- pam
- libx11
- xorg / xorg-server (optional)
- xauth / xorg-xauth (required for xorg)
- mcookie (required for xorg)
- wayland (optional)
### Make Commands
---
- `make clean` to cleanup already built binary.
- `make build` to build binary and gzip man page.
---
- `make install` to install binary.
- `make install-pam` to install pam module.
- `make install-pam-debian` to install pam module for Debian.
- `make install-pam-fedora` to install pam module for Fedora.
- `make install-pam-suse` to install pam module for openSUSE.
- `make install-manual` to install man page.
- `make install-all` to install binary, pam module and man page.
---
- `make install-config` to create default conf file in /etc/emptty/.
- `make install-dinit` to install dinit service.
- `make install-runit` to install runit service.
- `make install-runit-artix` to install runit to Artix service folder.
- `make install-openrc` to install openrc service.
- `make install-s6` to install s6 service.
- `make install-systemd` to install systemd service.
- `make install-motd-gen` to create default motd-gen.sh in /etc/emptty/.
---
- `make uninstall` to remove emptty from your system
---
### Build tags
Different distros could handle libc dependencies in different ways and `emptty` have direct references to these libc functions. For these cases there are Build tags to disable incompatible functionality or just to avoid some unwanted dependency.
The usage during build is really simple, just add parameter and optional tags split with ",".
```
$ make build TAGS=tag1,tag2
```
#### nopam
This tag disables dependency on PAM. In Linux it switch to basic authentication with `shadow`.
#### noxlib
This tag disables dependency on libx11, could be useful, if only Wayland desktop is expected to be used.
#### noutmp
This tag disables dependency on UTMP/UTMPX. Its implementation is different by each libc/distro, this provides ability to build if incompatibility occurs.
emptty-0.13.0/SAMPLES.md 0000664 0000000 0000000 00000005612 14676333633 0014565 0 ustar 00root root 0000000 0000000 # emptty - Samples
## \~/.config/emptty or \~/.emptty as init script
In your `.config` folder you have to create 'emptty' file or in your home folder you have to create `.emptty` file.
This variant allows to treat your script in similar way as your `.xinitrc`, however this is common to both Xorg and Wayland. The magic option is `Selection=true` or `Selection=auto`. You can define your own environmental variables and keep the possibility to select any desktop.
As it is mentioned in [README](README.md), no `.profile` scripts are sourced by default. However following scripts contains few examples, how it could be done inside `emptty` file.
#### Script with sourced `/etc/profile`
```
#!/bin/sh
Selection=true
xrandr --output eDP1 --mode 1920x1080
xrdb -merge ~/.Xresources
# source /etc/profile does not have any effect
. /etc/profile
. ~/.bashrc
export BROWSER=firefox
export EDITOR=vim
exec dbus-launch $@
```
#### Script with sourced `/etc/profile` using LoginShell
```
#!/bin/sh
Selection=true
LoginShell=/bin/bash --login
# /etc/profile is sourced by using non-interactive shell
exec dbus-launch $@
```
#### Script with fish support in LoginShell
Emptty supports simplified fish support, if shebang is set to fish, properties could be set in its basic way.
```
#!/bin/fish
set Selection true
set LoginShell /bin/fish --login
exec dbus-launch $argv
```
## \~/.config/emptty or \~/.emptty as config
In your .config folder you have to create 'emptty' file or in your home folder you have to create `.emptty` file. If `environment` is not defined, it assumes xorg.
#### Xorg session
```
Name=Custom Optional Name
Exec=/usr/bin/openbox-session
Environment=xorg
```
#### Wayland session
```
Name=Custom Optional Name
Exec=/usr/bin/sway
Environment=wayland
```
## \~/.config/emptty or \~/.emptty as script
In your .config folder you have to create 'emptty' file or in your home folder you have to create `.emptty` file. This file needs to have execution permission (`chmod +x ~/.config/emptty` or `chmod +x ~/.emptty`).
```
#!/bin/sh
Environment=xorg
# source /etc/profile does not have any effect
. /etc/profile
. ~/.bashrc
exec dbus-launch i3
```
## \~/.xinitrc
In your home folder you have to create `.xinitrc` file. This file needs to have execution permission (`chmod +x ~/.xinitrc`).
```
#!/bin/sh
. ~/.xprofile
xrdb -merge ~/.Xresources
xmodmap ~/.Xmodmap
exec dbus-launch $@
```
## Custom sessions
#### User-specific
Create folder custom-sessions as super user
```
$ mkdir -p ~/.config/emptty-custom-sessions/
```
#### System-wide
Create folder custom-sessions as super user
```
$ sudo mkdir -p /etc/emptty/custom-sessions
```
In these folders you can paste your desktop files. If `environment` is not defined, it assumes xorg.
### Xorg session
sowm.desktop
```
Name=sowm
Exec=/usr/bin/sowm
Environment=xorg
```
### Wayland session
sway.desktop
```
Name=My custom Sway
Exec=/usr/bin/sway
Environment=wayland
``` emptty-0.13.0/go.mod 0000664 0000000 0000000 00000000204 14676333633 0014235 0 ustar 00root root 0000000 0000000 module github.com/tvrzna/emptty
go 1.20
require github.com/msteinert/pam/v2 v2.0.0
replace github.com/tvrzna/emptty/src => ./src
emptty-0.13.0/go.sum 0000664 0000000 0000000 00000000735 14676333633 0014273 0 ustar 00root root 0000000 0000000 github.com/msteinert/pam/v2 v2.0.0 h1:jnObb8MT6jvMbmrUQO5J/puTUjxy7Av+55zVJRJsCyE=
github.com/msteinert/pam/v2 v2.0.0/go.mod h1:KT28NNIcDFf3PcBmNI2mIGO4zZJ+9RSs/At2PB3IDVc=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
emptty-0.13.0/main.go 0000664 0000000 0000000 00000000133 14676333633 0014403 0 ustar 00root root 0000000 0000000 package main
import emptty "github.com/tvrzna/emptty/src"
func main() {
emptty.Main()
}
emptty-0.13.0/res/ 0000775 0000000 0000000 00000000000 14676333633 0013724 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/conf 0000664 0000000 0000000 00000005215 14676333633 0014577 0 ustar 00root root 0000000 0000000 # TTY, where emptty will start.
TTY_NUMBER=7
# Enables switching to defined TTY number.
SWITCH_TTY=true
# Enables printing of /etc/issue in daemon mode.
PRINT_ISSUE=true
# Enables printing of default motd, /etc/emptty/motd or /etc/emptty/motd-gen.sh.
PRINT_MOTD=true
# Preselected user, if AUTOLOGIN is enabled, this user is logged in.
#DEFAULT_USER=user
# Enables Autologin, if DEFAULT_USER is defined and part of nopasswdlogin group. Possible values are "true" or "false".
AUTOLOGIN=false
# The default session used, if Autologin is enabled. If session is not found in list of session, it proceeds to manual selection.
# AUTOLOGIN_SESSION=i3
# If Autologin is enabled and session does not start correctly, the number of retries in short period is kept to eventually stop the infinite loop of restarts. -1 is for infinite retries, 0 is for no retry.
# AUTOLOGIN_MAX_RETRY=2
# Default LANG, if user does not have set own in init script.
#LANG=en_US.UTF-8
# Starts desktop with calling "dbus-launch".
DBUS_LAUNCH=true
# Starts Xorg desktop with calling "~/.xinitrc" script, if is true, file exists and selected WM/DE is Xorg session, it overrides DBUS_LAUNCH.
XINITRC_LAUNCH=false
# Prints available WM/DE each on new line instead of printing on single line.
VERTICAL_SELECTION=false
# Defines the way, how is logging handled. Possible values are "rotate", "appending" or "disabled".
#LOGGING=rotate
# Overrides path of log file
#LOGGING_FILE=/var/log/emptty/[TTY_NUMBER].log
# Arguments passed to Xorg server.
#XORG_ARGS=
# Allows to use dynamic motd script to generate custom MOTD.
#DYNAMIC_MOTD=false
# Allows to override default path to dynamic motd.
#DYNAMIC_MOTD_PATH=/etc/emptty/motd-gen.sh
# Allows to override default path to static motd.
#MOTD_PATH=/etc/emptty/motd
# Foreground color, available only in daemon mode.
#FG_COLOR=LIGHT_BLACK
# Background color, available only in daemon mode.
#BG_COLOR=BLACK
# Enables numlock in daemon mode. Possible values are "true" or "false".
#ENABLE_NUMLOCK=false
# Defines the way, how is logging of session errors handled. Possible values are "rotate", "appending" or "disabled".
#SESSION_ERROR_LOGGING=disabled
# Overrides path of session errors log file
#SESSION_ERROR_LOGGING_FILE=/var/log/emptty/session-errors.[TTY_NUMBER].log
# If set true, it will not use `.emptty-xauth` file, but the standard `~/.Xauthority` file. This allows to handle xauth issues.
#DEFAULT_XAUTHORITY=false
#If set true, Xorg will be started as rootless, if system allows and emptty is running in daemon mode.
#ROOTLESS_XORG=false
#If set true, environmental groups are printed to differ Xorg/Wayland/Custom/UserCustom desktops.
IDENTIFY_ENVS=false
emptty-0.13.0/res/dinit-script 0000664 0000000 0000000 00000000046 14676333633 0016260 0 ustar 00root root 0000000 0000000 #!/bin/sh -l
exec /usr/bin/emptty -d
emptty-0.13.0/res/dinit-service 0000664 0000000 0000000 00000000232 14676333633 0016411 0 ustar 00root root 0000000 0000000 type = process
command = /etc/dinit.d/scripts/emptty
restart = true
smooth-recovery = true
depends-on = logind
waits-for = loginready
waits-for = rclocal
emptty-0.13.0/res/emptty.1 0000664 0000000 0000000 00000030520 14676333633 0015330 0 ustar 00root root 0000000 0000000 .TH EMPTTY 1 "August 2024" "emptty 0.13.0" emptty
.SH NAME
emptty \- Dead simple CLI Display Manager on TTY
.SH SYNOPSIS
.B emptty [-v] [--version] [-d] [--daemon] [-c PATH] [--config PATH] [-i] [--ignore-config] [-t TTY] [--tty TTY] [-u defaultUser] [--default-user defaultUser] [-a [session]] [--autologin [session]]
.SH DESCRIPTION
.B emptty
Simple CLI Display Manager, that allows one to select DE/WM after login, use predefined config or allows autologin, if selected user is part of
.I nopasswdlogin
group.
.SH OPTIONS
.IP "\-v, \-\-version"
Display the version of the program.
.IP "\-d, \-\-daemon"
Starts emptty as daemon, that does not require agetty.
.IP "\-c, \-\-config PATH"
Loads configuration from specified path.
.IP "\-i, \-\-ignore-config"
Skips loading of configuration from file, loads only argument configuration.
.IP "\-t, \-\-tty TTY"
Overrides loaded configuration by setting defined TTY. May be specified as a number (e.g. "7") or a TTY name (e.g. "tty7").
.IP "\-u, \-\-default-user defaultUser"
Overrides loaded configuration by setting defined defaultUser.
.IP "\-a, \-\-autologin [session]"
Overrides loaded configuration by enabling autologin. If session is defined, it overrides autologin session.
.SH CONFIG
/etc/emptty/conf
.IP TTY_NUMBER
TTY, where emptty will start.
.IP SWITCH_TTY
Enables switching to defined TTY number. Default is true.
.IP PRINT_ISSUE
Enables printing of /etc/issue in daemon mode.
.IP PRINT_MOTD
Enables printing of default motd, static motd or dynamic motd.
.IP DEFAULT_USER
Preselected user, if AUTOLOGIN is enabled, this user is logged in.
.IP DEFAULT_SESSION
Preselected desktop session, if user does not use `emptty` file. Has lower priority than
.I AUTOLOGIN_SESSION
.IP DEFAULT_SESSION_ENV
Optional environment of preselected desktop session, if user does not use `emptty` file. Possible values are "xorg" and "wayland".
.IP AUTOLOGIN
Enables Autologin, if DEFAULT_USER is defined. Possible values are "true" or "false". Default value is false.
.B NOTE:
to enable autologin DEFAULT_USER must be in group
.I nopasswdlogin
, otherwise user will NOT be authorized.
.IP AUTOLOGIN_SESSION
The default session used, if Autologin is enabled. If session is not found in list of session, it proceeds to manual selection.
.IP AUTOLOGIN_SESSION_ENV
Optional environment of autologin desktop session. Possible values are "xorg" and "wayland".
.IP AUTOLOGIN_MAX_RETRY
If Autologin is enabled and session does not start correctly, the number of retries in short period is kept to eventually stop the infinite loop of restarts. -1 is for infinite retries, 0 is for no retry. Default value is 2.
.IP LANG
defines locale for all users. Default value is "en_US.UTF-8"
.IP DBUS_LAUNCH
Starts "dbus-launch" before desktop command. After end of session "dbus-daemon" is interrupted. Default value is true. If
.I user config
is handled as script (does not contain
.I Exec
option), this config is overridden to false.
.IP ALWAYS_DBUS_LAUNCH
Starts "dbus-launch" before desktop command in any case,
.I DBUS_LAUNCH
value is ignored. It also starts even if
.I
XINITRC_LAUNCH
is set to `true`. After end of session "dbus-daemon" is interrupted. Default value is false.
.IP XINITRC_LAUNCH
Starts Xorg desktop with calling
.I ~/.xinitrc
script with session exec as argument, if is true, file exists and selected WM/DE is Xorg session, it overrides DBUS_LAUNCH. If
.I user config
is handled as script (does not contain
.I Exec
option), this config is overridden to false.
.IP VERTICAL_SELECTION
Prints available WM/DE each on new line instead of printing on single line.
.IP LOGGING
Defines how logging is handled. Possible values are "rotate", "appending" or "disabled". Default value is "rotate".
.IP LOGGING_FILE
Overrides path of log file. Default value is
.I /var/log/emptty/[TTY_NUMBER].log
.B NOTE:
It expects existence of directories to defined logging file.
.IP XORG_ARGS
Arguments passed to Xorg server.
.IP DYNAMIC_MOTD
Allows using dynamic motd script to generate custom MOTD. Possible values are "true" or "false". Default value is false.
.B NOTE:
Be sure, that dynamic motd has correct content and permissions (e.g. 744), the script is started as default user; in daemon mode it means
.I root
.IP DYNAMIC_MOTD_PATH
Allows overriding default path to dynamic motd. Default value is "/etc/emptty/motd-gen.sh".
.IP MOTD_PATH
Allows overriding default path to static motd. Default value is "/etc/emptty/motd".
.IP FG_COLOR
Foreground color, available only in daemon mode. List of colors is listed below.
.IP BG_COLOR
Background color, available only in daemon mode. List of colors is listed below.
.IP DISPLAY_START_SCRIPT
Script started before Display (Xorg/Wayland) starts.
.B NOTE:
The script is started as default user; in daemon mode it means
.I root
.IP DISPLAY_STOP_SCRIPT
Script started after Display (Xorg/Wayland) stops.
.B NOTE:
The script is started as default user; in daemon mode it means
.I root
.IP ENABLE_NUMLOCK
Enables numlock in daemon mode. Possible values are "true" or "false". Default value is false.
.IP SESSION_ERROR_LOGGING
Defines how logging of session errors is handled. Possible values are "rotate", "appending" or "disabled". Default value is "disabled".
.IP SESSION_ERROR_LOGGING_FILE
Overrides path of session errors log file. Default value is
.I /var/log/emptty/session-errors.[TTY_NUMBER].log
.B NOTE:
It expects existence of directories to defined logging file.
.IP NO_XDG_FALLBACK
Disallows setting of fallback values for all XDG environmental variables and leaves it on Login Controls. Possible values are "true" or "false". Default value is false.
.B NOTE:
Be aware, that setting to "true" could lead to unexpected behaviour.
.IP DEFAULT_XAUTHORITY
If set true, it will not use .emptty-xauth file, but the standard ~/.Xauthority file. This allows handling xauth issues. Possible values are "true" or "false". Default value is false.
.IP ROOTLESS_XORG
If set true, Xorg will be started as rootless, if system allows and emptty is running in daemon mode. Possible values are "true" or "false". Default value is false.
.IP IDENTIFY_ENVS
If set true, environmental groups are printed to differ Xorg/Wayland/Custom/UserCustom desktops. Possible values are "true" or "false". Default value is false.
.IP HIDE_ENTER_LOGIN
If set true, "hostname login:" is not displayed. Possible values are "true" or "false". Default value is false.
.IP HIDE_ENTER_PASSWORD
If set true, "Password:" is not displayed. Possible values are "true" or "false". Default value is false.
.IP XORG_SESSIONS_PATH
Path to directory, where Xorg sessions' desktop files are stored. Default value is "/usr/share/xsessions/".
.IP WAYLAND_SESSIONS_PATH
Path to directory, where Wayland sessions' desktop files are stored. Default value is "/usr/share/wayland-sessions/".
.IP SELECT_LAST_USER
Enables funtionality of saving last successfully logged in user for next login. Possible values are "false", "per-tty" or "global". Default value is false.
.IP AUTO_SELECTION
If set to "true" and only one desktop is available, it automatically select that desktop. Possible values are "true" or "false". Default value is false.
.IP ALLOW_COMMANDS
If set to "true" and no default user is selected, it allows to enter commands into login input. Possible values are "true" or "false", Default value is true.
.IP CMD_POWEROFF
Command to be used to perform poweroff. Default value is "poweroff".
.IP CMD_REBOOT
Command to be used to perform reboot. Default value is "reboot".
.IP CMD_SUSPEND
Command to be used to perform suspend. Default value is blank, but it tries to use "systemctl suspend", "loginctl suspend" or "zzz".
.SH COMMANDS
If commands are allowed and default user is not defined, there could be used commands in login input. All of these commands need to start with colon ":". Escape characters are ignored to prevent issues with muscle memory from VI.
- :help, :? - prints available commands
- :poweroff, :shutdown - processess poweroff command
- :reboot - processes reboot command
- :suspend, :zzz - processes suspend command
.SH DYNAMIC MOTD
Optional file stored by default as /etc/emptty/motd-gen.sh. Could be overridden.
If
.I DYNAMIC_MOTD
is set to true, this file exists and is executable for its owner, the result is printed as your own MOTD. Be very careful with this script!
.SH CUSTOM MOTD
Optional file stored by default as /etc/emptty/motd. Could be overridden.
Custom file, that prints your own MOTD. Reading this file supports colors (e.g.
.I \\\x1b[31m
or
.I \\\033[32m
)
.SH USER CONFIG
Optional file stored as ${HOME}/.config/emptty or ${HOME}/.emptty
Configuration file stored as ${HOME}/.config/emptty has higher priority on loading.
.IP Name
Optional name to be used as Session Name.
.IP Exec
Defines command to start Desktop Environment/Window Manager. This value does not need to be defined, if user config is presented as shell script (with shebang at the start and execution permissions).
.IP Environment
Selects, which environment should be defined for following command. Possible values are "xorg" and "wayland", "xorg" is default.
.IP Lang
Defines locale for logged user, has higher priority than LANG from global configuration
.IP Selection
Requires selection of desktop, basically turns
.I emptty
file into
.I .xinitrc
for Xorg and Wayland. In this case
.I Exec
is skipped. Possible values are "false" for never using selection, "true" for always showing selection or "auto" for showing selection or first option autoselect, if there is no other desktop. Default value is false.
.IP LoginShell
Defines custom shell to be used to start the session. This allows starting the session with non-interactive shell e.g. "/bin/bash --login"
.IP DesktopNames
Value passed into
.I XDG_CURRENT_DESKTOP
variable.
.SH USER EXIT SCRIPT
Optional script file stored as ${HOME}/.config/emptty-exit, that is handled as shell script and is started, when session is going to end. Script is started even if emptty is being terminated.
The default timeout to finish script is 3 seconds, but it is configurable from the script itself.
.IP Timeout
Optional custom timeout for script to finish its run, number represents seconds. Default is 3.
.SH CUSTOM SESSIONS
Optional folders for custom sessions, that could be available system-wide (in case of /etc/emptty/custom-sessions/) or user-specific (in case of ${HOME}/.config/emptty-custom-sessions/), but do not have .desktop file stored on standard paths for Xorg or Wayland sessions. Expected suffix of each file is ".desktop".
.IP Name
Defines name of Desktop Environment/Window Manager.
.IP Exec
Defines command to start Desktop Environment/Window Manager. It could contain multiple arguments same as in *.desktop files.
.IP Environment
Selects, which environment should be defined for following command. Possible values are "xorg" and "wayland", "xorg" is default.
.IP DesktopNames
Value passed into
.I XDG_CURRENT_DESKTOP
variable.
.IP NoDisplay/Hidden
Boolean value, that controls visibility of desktop session.
.SH LAST SESSION
The last user selection of session is stored into ~/.cache/emptty/last-session
.SH LOGGING
As it is mentioned in configuration, there are three options to handle logging of emptty. The logs contains not just logs from emptty, but also from Xorg (if used) and user's WM/DE.
Described log location could differ according configuration
.I LOGGING_FILE
, that is stored in
.I /etc/emptty/conf
.IP default
This option provides simple solution, when current instance of emptty logs into
.I /var/log/emptty/[TTY_NUMBER].log
and the previous version is stored as
.I /var/log/emptty/[TTY_NUMBER].log.old
.B NOTE:
Current instance always move previous log into old file, if emptty crashes and is started again, previous log is in
.I /var/log/emptty/[TTY_NUMBER].log.old
.IP appending
This option provides functionality that logs everything into
.I /var/log/emptty/[TTY_NUMBER].log
and does not handle log rotation by itself. It leaves the option for user to handle it themselves (e.g. with logrotate).
.B NOTE:
Appending without roration could cause large log file, be sure that log file is rotated.
.IP disabled
This option points all log into
.I /dev/null
, so no log is available.
.B NOTE:
If any issue starts to appear and you want to report it, ensure you do not use this option.
.SH COLORS
Please, be aware that
.I LIGHT_
colors could be unavailable as background color.
BLACK, RED, GREEN, YELLOW, BLUE, PURPLE, CYAN, WHITE
LIGHT_BLACK, LIGHT_RED, LIGHT_GREEN, LIGHT_YELLOW, LIGHT_BLUE, LIGHT_PURPLE, LIGHT_CYAN, LIGHT_WHITE
emptty-0.13.0/res/motd-gen.sh 0000664 0000000 0000000 00000000246 14676333633 0015774 0 ustar 00root root 0000000 0000000 #!/bin/sh
echo "┌─┐┌┬┐┌─┐┌┬┐┌┬┐┬ ┬"
echo "├┤ │││├─┘ │ │ └┬┘"
echo "└─┘┴ ┴┴ ┴ ┴ ┴ " emptty-0.13.0/res/openrc-service 0000664 0000000 0000000 00000000510 14676333633 0016567 0 ustar 00root root 0000000 0000000 #!/sbin/openrc-run
supervisor=supervise-daemon
description="emptty Display Manager"
command=/usr/bin/emptty
command_args="-d"
pidfile="/run/${RC_SVCNAME}.pid"
respawn_period=${respawn_period-60}
EMPTTY_TERMTIMEOUT=${EMPTTY_TERMTIMEOUT:-"TERM/60/KILL/15"}
retry="${EMPTTY_TERMTIMEOUT}"
depend() {
after local
before getty
}
emptty-0.13.0/res/pam 0000664 0000000 0000000 00000000765 14676333633 0014434 0 ustar 00root root 0000000 0000000 #%PAM-1.0
auth sufficient pam_succeed_if.so user ingroup nopasswdlogin
auth include system-login
-auth optional pam_gnome_keyring.so
-auth optional pam_kwallet5.so
account include system-login
password include system-login
session include system-login
-session optional pam_gnome_keyring.so auto_start
-session optional pam_kwallet5.so auto_start force_run
emptty-0.13.0/res/pam-alpine 0000664 0000000 0000000 00000000411 14676333633 0015666 0 ustar 00root root 0000000 0000000 #%PAM-1.0
auth sufficient pam_succeed_if.so user ingroup nopasswdlogin
auth include base-auth
account include base-account
password include base-password
session include base-session
emptty-0.13.0/res/pam-debian 0000664 0000000 0000000 00000000773 14676333633 0015653 0 ustar 00root root 0000000 0000000 #%PAM-1.0
auth sufficient pam_succeed_if.so user ingroup nopasswdlogin
@include common-auth
-auth optional pam_gnome_keyring.so
-auth optional pam_kwallet5.so
@include common-account
@include common-session
-session optional pam_gnome_keyring.so auto_start
-session optional pam_kwallet5.so auto_start force_run
@include common-password
emptty-0.13.0/res/pam-fedora 0000664 0000000 0000000 00000000771 14676333633 0015667 0 ustar 00root root 0000000 0000000 #%PAM-1.0
auth sufficient pam_succeed_if.so user ingroup nopasswdlogin
auth include password-auth
-auth optional pam_gnome_keyring.so
-auth optional pam_kwallet5.so
account include password-auth
password include password-auth
session include password-auth
-session optional pam_gnome_keyring.so auto_start
-session optional pam_kwallet5.so auto_start force_run
emptty-0.13.0/res/pam-suse 0000664 0000000 0000000 00000000400 14676333633 0015373 0 ustar 00root root 0000000 0000000 #%PAM-1.0
auth include common-auth
account include common-account
password include common-password
session required pam_loginuid.so
session include common-session
session optional pam_keyinit.so revoke force
emptty-0.13.0/res/runit-run 0000664 0000000 0000000 00000000051 14676333633 0015606 0 ustar 00root root 0000000 0000000 #!/bin/sh
exec setsid /usr/bin/emptty -d
emptty-0.13.0/res/s6-dependencies 0000664 0000000 0000000 00000000007 14676333633 0016620 0 ustar 00root root 0000000 0000000 udevadm emptty-0.13.0/res/s6-run 0000664 0000000 0000000 00000000057 14676333633 0015003 0 ustar 00root root 0000000 0000000 #!/usr/bin/execlineb -P
exec /usr/bin/emptty -d emptty-0.13.0/res/s6-type 0000664 0000000 0000000 00000000007 14676333633 0015153 0 ustar 00root root 0000000 0000000 longrun emptty-0.13.0/res/systemd-service 0000664 0000000 0000000 00000000465 14676333633 0017002 0 ustar 00root root 0000000 0000000 [Unit]
Description=emptty display manager
After=systemd-user-sessions.service
[Service]
EnvironmentFile=/etc/emptty/conf
Type=idle
ExecStart=/usr/bin/emptty -d
Restart=always
TTYPath=/dev/tty${TTY_NUMBER}
TTYReset=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes
[Install]
Alias=display-manager.service
emptty-0.13.0/res/testing/ 0000775 0000000 0000000 00000000000 14676333633 0015401 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/conf 0000664 0000000 0000000 00000001533 14676333633 0016253 0 ustar 00root root 0000000 0000000 # Testing config file. Only for test purpose!
TTY_NUMBER=14
SWITCH_TTY=true
PRINT_ISSUE=true
PRINT_MOTD=false
DEFAULT_USER=emptty-user
DEFAULT_SESSION=/usr/bin/no-login
DEFAULT_SESSION_ENV=waYLand
AUTOLOGIN=false
AUTOLOGIN_SESSION=none
LANG=en_US.UTF-8
DBUS_LAUNCH=true
XINITRC_LAUNCH=true
VERTICAL_SELECTION=true
LOGGING=disabled
XORG_ARGS=-none
LOGGING_FILE=/dev/null
DYNAMIC_MOTD=true
DYNAMIC_MOTD_PATH=/dev/null/dynamic
MOTD_PATH="/dev/null/static"
FG_COLOR=RED
BG_COLOR=BLUE
DISPLAY_START_SCRIPT='/usr/bin/none-start'
DISPLAY_STOP_SCRIPT=/usr/bin/none
ENABLE_NUMLOCK=true
SESSION_ERROR_LOGGING=appending
SESSION_ERROR_LOGGING_FILE=/dev/null
ROOTLESS_XORG=true
IDENTIFY_ENVS=true
AUTOLOGIN_MAX_RETRY=-1
HIDE_ENTER_LOGIN=true
ALWAYS_DBUS_LAUNCH=true
XORG_SESSIONS_PATH=/dev/null
WAYLAND_SESSIONS_PATH=/dev/zero
SELECT_LAST_USER=per-tty
AUTO_SELECTION=true emptty-0.13.0/res/testing/desktops/ 0000775 0000000 0000000 00000000000 14676333633 0017235 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/desktops/desktop1.desktop 0000664 0000000 0000000 00000000102 14676333633 0022353 0 ustar 00root root 0000000 0000000 Name=Desktop1
Exec=/usr/bin/desktop1
DesktopNames=Desk1;DESKTOP_1; emptty-0.13.0/res/testing/desktops/desktop2.desktop 0000664 0000000 0000000 00000000060 14676333633 0022357 0 ustar 00root root 0000000 0000000 Name=Desktop2
Exec=/usr/bin/desktop2
env=waylAND emptty-0.13.0/res/testing/issue 0000664 0000000 0000000 00000000016 14676333633 0016451 0 ustar 00root root 0000000 0000000 Hello there \d emptty-0.13.0/res/testing/issue_anything 0000664 0000000 0000000 00000000106 14676333633 0020352 0 ustar 00root root 0000000 0000000 \d
\l
\m
\n
\r
\s
\S
\S{id_like}
\t
\4
\6
\4{eth0}
\6{eth0}
\\t
\5
\O
emptty-0.13.0/res/testing/issue_more_new_lines 0000664 0000000 0000000 00000000030 14676333633 0021532 0 ustar 00root root 0000000 0000000 Hello with new lines
emptty-0.13.0/res/testing/motd-dynamic.sh 0000664 0000000 0000000 00000000047 14676333633 0020323 0 ustar 00root root 0000000 0000000 #!/bin/sh
echo "This is dynamic motd." emptty-0.13.0/res/testing/motd-static 0000664 0000000 0000000 00000000024 14676333633 0017550 0 ustar 00root root 0000000 0000000 This is static motd. emptty-0.13.0/res/testing/motd-static-empty 0000664 0000000 0000000 00000000000 14676333633 0020676 0 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome/ 0000775 0000000 0000000 00000000000 14676333633 0017170 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome/.cache/ 0000775 0000000 0000000 00000000000 14676333633 0020311 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome/.cache/emptty/ 0000775 0000000 0000000 00000000000 14676333633 0021633 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome/.cache/emptty/last-session 0000664 0000000 0000000 00000000025 14676333633 0024177 0 ustar 00root root 0000000 0000000 /usr/bin/none;wayland emptty-0.13.0/res/testing/userHome/.config/ 0000775 0000000 0000000 00000000000 14676333633 0020513 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome/.config/emptty 0000664 0000000 0000000 00000000207 14676333633 0021757 0 ustar 00root root 0000000 0000000 #!/bin/fish
set env waylAND
set COMMAND none
set SELECTION false
set EXEC none
set NAME window-manager
set LOGINSHELL /bin/fish --login emptty-0.13.0/res/testing/userHome2/ 0000775 0000000 0000000 00000000000 14676333633 0017252 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome2/.config/ 0000775 0000000 0000000 00000000000 14676333633 0020575 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome2/.config/emptty-custom-sessions/ 0000775 0000000 0000000 00000000000 14676333633 0025273 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome2/.config/emptty-custom-sessions/custom-desktop.desktop 0000664 0000000 0000000 00000000105 14676333633 0031643 0 ustar 00root root 0000000 0000000 Name=CustomDesktop1
Exec=/usr/bin/custom-desktop1
Environment=wayland emptty-0.13.0/res/testing/userHome2/.config/emptty-custom-sessions/custom-desktop2.desktop 0000664 0000000 0000000 00000000102 14676333633 0031722 0 ustar 00root root 0000000 0000000 Name=CustomDesktop2
Exec=/usr/bin/custom-desktop2
Environment=xorg emptty-0.13.0/res/testing/userHome2/.emptty 0000664 0000000 0000000 00000000134 14676333633 0020573 0 ustar 00root root 0000000 0000000 ENVIRONMENT=xorg
COMMAND=none
SELECTION=false
EXEC=none
NAME=window-manager
LANG=en_US.UTF-8 emptty-0.13.0/res/testing/userHome3/ 0000775 0000000 0000000 00000000000 14676333633 0017253 5 ustar 00root root 0000000 0000000 emptty-0.13.0/res/testing/userHome3/.emptty 0000664 0000000 0000000 00000000137 14676333633 0020577 0 ustar 00root root 0000000 0000000 ENVIRONMENT=xorg
COMMAND=none
SELECTION=true
EXEC=sfdgfdgd
NAME=window-manager
LANG=en_US.UTF-8 emptty-0.13.0/res/testing/userHome3/.xinitrc 0000664 0000000 0000000 00000000023 14676333633 0020727 0 ustar 00root root 0000000 0000000 exec dbus-launch $@ emptty-0.13.0/screenshot.png 0000664 0000000 0000000 00000007424 14676333633 0016025 0 ustar 00root root 0000000 0000000 PNG
IHDR u8* sBIT|d IDATxn8PfkErt66HfJGR?4}O O Ї@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ?4M^ck~S%m8ο q}@ymϺm5n?ݿQα#rο T2bsV#mcT%P GSb[Oͽ?z{v/_9LJY{ s.HF?uY٩{Su)i?VZI 5MhӖ#k4F :nsSm5FKNE &fȽљ~JG 6 P.Q;_Tz\};-%y6 mdL{/_,X.x)5'uà
崟j{yTY{-6A w'c<