{"id":17526486,"url":"https://github.com/tvrzna/emptty","last_synced_at":"2026-02-18T23:32:00.312Z","repository":{"id":41485795,"uuid":"263663889","full_name":"tvrzna/emptty","owner":"tvrzna","description":"Dead simple CLI Display Manager on TTY","archived":false,"fork":false,"pushed_at":"2025-12-03T09:16:18.000Z","size":451,"stargazers_count":885,"open_issues_count":0,"forks_count":33,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-12-21T23:28:12.415Z","etag":null,"topics":["cli","display-manager"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tvrzna.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-05-13T15:06:36.000Z","updated_at":"2025-12-21T21:01:52.000Z","dependencies_parsed_at":"2024-02-28T10:45:28.117Z","dependency_job_id":"eb07b39b-62fb-41e1-8e01-9cd9865ce634","html_url":"https://github.com/tvrzna/emptty","commit_stats":{"total_commits":366,"total_committers":10,"mean_commits":36.6,"dds":0.02732240437158473,"last_synced_commit":"635d1779f0fd662cad0d85b8363015bd2517fa8e"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/tvrzna/emptty","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvrzna%2Femptty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvrzna%2Femptty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvrzna%2Femptty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvrzna%2Femptty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tvrzna","download_url":"https://codeload.github.com/tvrzna/emptty/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvrzna%2Femptty/sbom","scorecard":{"id":903437,"data":{"date":"2025-08-11","repo":{"name":"github.com/tvrzna/emptty","commit":"d97de4fc5f41583908ce041b18b3934aee3b8dd7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":1,"reason":"Found 5/29 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":5,"reason":"4 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yaml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/tvrzna/emptty/main.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yaml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/tvrzna/emptty/main.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/tvrzna/emptty/release.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/tvrzna/emptty/release.yaml/master?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/main.yaml:1","Warn: no topLevel permission defined: .github/workflows/release.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.14.0 not signed: https://api.github.com/repos/tvrzna/emptty/releases/214693151","Warn: release artifact v0.13.0 not signed: https://api.github.com/repos/tvrzna/emptty/releases/171882420","Warn: release artifact v0.12.1 not signed: https://api.github.com/repos/tvrzna/emptty/releases/159305451","Warn: release artifact v0.12.0 not signed: https://api.github.com/repos/tvrzna/emptty/releases/143961020","Warn: release artifact v0.11.0 not signed: https://api.github.com/repos/tvrzna/emptty/releases/125734394","Warn: release artifact v0.14.0 does not have provenance: https://api.github.com/repos/tvrzna/emptty/releases/214693151","Warn: release artifact v0.13.0 does not have provenance: https://api.github.com/repos/tvrzna/emptty/releases/171882420","Warn: release artifact v0.12.1 does not have provenance: https://api.github.com/repos/tvrzna/emptty/releases/159305451","Warn: release artifact v0.12.0 does not have provenance: https://api.github.com/repos/tvrzna/emptty/releases/143961020","Warn: release artifact v0.11.0 does not have provenance: https://api.github.com/repos/tvrzna/emptty/releases/125734394"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 6 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T16:30:14.301Z","repository_id":41485795,"created_at":"2025-08-24T16:30:14.301Z","updated_at":"2025-08-24T16:30:14.301Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29598228,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T22:25:43.180Z","status":"ssl_error","status_checked_at":"2026-02-18T22:25:42.766Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","display-manager"],"created_at":"2024-10-20T15:01:49.377Z","updated_at":"2026-02-18T23:32:00.270Z","avatar_url":"https://github.com/tvrzna.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# emptty\n[![Release](https://img.shields.io/github/release/tvrzna/emptty.svg?style=flat-square)](https://github.com/tvrzna/emptty/releases/latest)\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/tvrzna/emptty/.github/workflows/main.yaml?branch=master\u0026style=flat-square)](https://github.com/tvrzna/emptty/actions?query=workflow:Build)\n[![Go Report Card](https://goreportcard.com/badge/github.com/tvrzna/emptty?style=flat-square)](https://goreportcard.com/report/github.com/tvrzna/emptty)\n\nDead simple CLI Display Manager on TTY\n\n![](screenshot.png)\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/emptty.svg?exclude_unsupported=1)](https://repology.org/project/emptty/versions)\n\n## Configuration\n\n__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).\n\n---\n\n#### /etc/emptty/conf\nDefault startup configuration. On each change it requires to restart emptty.\n\n`TTY_NUMBER` TTY, where emptty will start.\n\n`SWITCH_TTY` Enables switching to defined TTY number. Default is true.\n\n`PRINT_ISSUE` Enables printing of /etc/issue in daemon mode.\n\n`PRINT_MOTD` Enables printing of default motd, static motd or dynamic motd.\n\n`DEFAULT_ENV` Defines default environment used for starting undefined sessions (e.g. from `emptty` file). Possible values are \"xorg\" and \"wayland\". Default of default is xorg.\n\n`DEFAULT_USER` Preselected user, if AUTOLOGIN is enabled, this user is logged in.\n\n`DEFAULT_SESSION` Preselected desktop session, if user does not use `emptty` file. Has lower priority than `AUTOLOGIN_SESSION`\n\n`DEFAULT_SESSION_ENV` Optional environment of preselected desktop session, if user does not use `emptty` file. Possible values are \"xorg\" and \"wayland\".\n\n`AUTOLOGIN` Enables Autologin, if DEFAULT_USER is defined. Possible values are \"true\" or \"false\". Default value is false.\n__NOTE:__ to enable autologin DEFAULT_USER must be in group nopasswdlogin, otherwise user will NOT be authorized.\n\n`AUTOLOGIN_SESSION` The default session used, if Autologin is enabled. If session is not found in list of session, it proceeds to manual selection.\n\n`AUTOLOGIN_SESSION_ENV` Optional environment of autologin desktop session. Possible values are \"xorg\" and \"wayland\".\n\n`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.\n\n`AUTOLOGIN_RETRY_PERIOD` Time period in seconds, that is used for checking session login retries. Default value is 2.\n\n`LANG` defines locale for all users. Default value is \"en_US.UTF-8\"\n\n`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.\n\n`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.\n\n`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.\n\n`VERTICAL_SELECTION` Prints available WM/DE each on new line instead of printing on single line.\n\n`LOGGING` Defines the way, how is logging handled. Possible values are \"rotate\", \"appending\" or \"disabled\". Default value is \"rotate\".\n\n`LOGGING_FILE` Overrides path of log file. Default value is `/var/log/emptty/[TTY_NUMBER].log`.\n__NOTE:__ It expects existence of directories to defined logging file.\n\n`XORG_ARGS` Arguments passed to Xorg server.\n\n`DYNAMIC_MOTD` Allows to use dynamic motd script to generate custom MOTD. Possible values are \"true\" or \"false\". Default value is false.\n__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`.\n\n`DYNAMIC_MOTD_PATH` Allows to override default path to dynamic motd. Default value is `/etc/emptty/motd-gen.sh`\n\n`MOTD_PATH` Allows to override default path to static motd. Default value is `/etc/emptty/motd`\n\n`FG_COLOR` Foreground color, available only in daemon mode. List of colors is listed below.\n\n`BG_COLOR` Background color, available only in daemon mode. List of colors is listed below.\n\n`DISPLAY_START_SCRIPT` Script started before Display (Xorg/Wayland) starts.\n__NOTE:__ The script is started as default user; in daemon mode it means `root`.\n\n`DISPLAY_STOP_SCRIPT` Script started after Display (Xorg/Wayland) stops.\n__NOTE:__ The script is started as default user; in daemon mode it means `root`.\n\n`ENABLE_NUMLOCK` Enables numlock in daemon mode. Possible values are \"true\" or \"false\". Default value is false.\n\n`SESSION_ERROR_LOGGING` Defines how logging of session errors is handled. Possible values are \"rotate\", \"appending\" or \"disabled\". Default value is \"disabled\".\n\n`SESSION_ERROR_LOGGING_FILE` Overrides path of session errors log file. Default value is `/var/log/emptty/session-errors.[TTY_NUMBER].log`.\n__NOTE:__ It expects existence of directories to defined logging file.\n\n`NO_XDG_FALLBACK`\nDisallows 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.\n__NOTE:__ Be aware, that setting to \"true\" could lead to unexpected behaviour.\n\n`DEFAULT_XAUTHORITY`\nIf 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.\n\n`ROOTLESS_XORG`\nIf 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.\n__NOTE:__ Rootless Xorg requires additional [changes](#rootless-xorg) changes in Xorg config.\n\n`IDENTIFY_ENVS`\nIf set true, environmental groups are printed to differ Xorg/Wayland/Custom/UserCustom desktops. Possible values are \"true\" or \"false\". Default value is false.\n\n`HIDE_ENTER_LOGIN`\nIf set true, \"hostname login:\" is not displayed. Possible values are \"true\" or \"false\". Default value is false.\n\n`HIDE_ENTER_PASSWORD`\nIf set true, \"Password:\" is not displayed. Possible values are \"true\" or \"false\". Default value is false.\n\n`XORG_SESSIONS_PATH`\nPath to directory, where Xorg sessions' desktop files are stored. Default value is \"/usr/share/xsessions/\".\n\n`WAYLAND_SESSIONS_PATH`\nPath to directory, where Wayland sessions' desktop files are stored. Default value is \"/usr/share/wayland-sessions/\".\n\n`SELECT_LAST_USER`\nEnables funtionality of saving last successfully logged in user for next login. Possible values are \"false\", \"per-tty\" or \"global\". Default value is false.\n\n`AUTO_SELECTION`\nIf set to \"true\" and only one desktop is available, it automatically select that desktop. Possible values are \"true\" or \"false\". Default value is false.\n\n`ALLOW_COMMANDS`\nIf 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.\n\n`CMD_POWEROFF`\nCommand to be used to perform poweroff. Default value is \"poweroff\".\n\n`CMD_REBOOT`\nCommand to be used to perform reboot. Default value is \"reboot\".\n\n`CMD_SUSPEND`\nCommand to be used to perform suspend. Default value is blank, but it tries to use \"systemctl suspend\", \"loginctl suspend\" or \"zzz\".\n\n#### Commands\nIf 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.\n - `:help`, `:?` prints available commands\n - `:poweroff`, `:shutdown` processess poweroff command\n - `:reboot` processes reboot command\n - `:suspend`, `:zzz` processes suspend command\n\n#### Dynamic MOTD\nIf `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!\n\n#### Static MOTD\nCustom file, that prints your own MOTD. Reading this file supports colors (e.g. `\\x1b[31m` or `\\033[32m`).\n\n#### User Config `(${HOME}/.config/emptty or ${HOME}/.emptty)`\nOptional configuration file, that could be also handled as shell script. If is not presented, emptty shows selection of installed desktops.\nConfiguration file stored as `${HOME}/.config/emptty` has higher priority on loading.\nSee [samples](SAMPLES.md#emptty-as-config)\n\n`Name` Optional name to be used as Session Name.\n\n`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).\n\n`Environment` Selects, which environment should be defined for following command. Possible values are \"xorg\" and \"wayland\", \"xorg\" is default.\n\n`Lang` Defines locale for logged user, has higher priority than LANG from global configuration\n\n`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.\n\n`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`\n\n`DesktopNames` Value passed into `XDG_CURRENT_DESKTOP` variable.\n\n#### User Exit Script `${HOME}/.config/emptty-exit`\nOptional 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`.\n\n`Timeout` Optional custom timeout for script to finish its run, number represents seconds. Default is 3.\n\n#### `/etc/emptty/custom-sessions/` or `${HOME}/.config/emptty-custom-sessions/`\nOptional 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\".\nSee [samples](SAMPLES.md#custom-sessions)\n\n`Name` Defines name of Desktop Environment/Window Manager.\n\n`Exec` Defines command to start Desktop Environment/Window Manager.\n\n`Environment` Selects, which environment should be defined for following command. Possible values are \"xorg\" and \"wayland\", \"xorg\" is default.\n\n`DesktopNames` Value passed into `XDG_CURRENT_DESKTOP` variable.\n\n`NoDisplay` / `Hidden` Boolean value, that controls visibility of desktop session.\n\n#### `${HOME}./xinitrc`\nIf config `XINITRC_LAUNCH` is set to true, it enables possibility to use .xinitrc script. See [samples](SAMPLES.md#xinitrc)\n\n#### Colors\nPlease, be aware that `LIGHT_` colors could be unavailable as background color.\n\u003cdetails\u003e\n  \u003csummary\u003eList of colors\u003c/summary\u003e\n  \u003cul\u003e\n\t\u003cli\u003eBLACK\u003c/li\u003e\n\t\u003cli\u003eRED\u003c/li\u003e\n\t\u003cli\u003eGREEN\u003c/li\u003e\n\t\u003cli\u003eYELLOW\u003c/li\u003e\n\t\u003cli\u003eBLUE\u003c/li\u003e\n\t\u003cli\u003ePURPLE\u003c/li\u003e\n\t\u003cli\u003eCYAN\u003c/li\u003e\n\t\u003cli\u003eWHITE\u003c/li\u003e\n\t\u003cli\u003eLIGHT_BLACK\u003c/li\u003e\n\t\u003cli\u003eLIGHT_RED\u003c/li\u003e\n\t\u003cli\u003eLIGHT_GREEN\u003c/li\u003e\n\t\u003cli\u003eLIGHT_YELLOW\u003c/li\u003e\n\t\u003cli\u003eLIGHT_BLUE\u003c/li\u003e\n\t\u003cli\u003eLIGHT_PURPLE\u003c/li\u003e\n\t\u003cli\u003eLIGHT_CYAN\u003c/li\u003e\n\t\u003cli\u003eLIGHT_WHITE\u003c/li\u003e\n \u003c/ul\u003e\n\u003c/details\u003e\n\n\n#### Rootless Xorg\nIf Rootless Xorg does not work as expected, make sure you have set following lines in your `/etc/X11/Xwrapper.config`.\n```\nneeds_root_rights = no\nallowed_users = anybody\n```\n\n## Logging\nAs 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.\nDescribed log location could differ according configuration `LOGGING_FILE`, that is stored in `/etc/emptty/conf`.\n\n#### rotate\nThis 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`.\n\n__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`.\n\n#### appending\nThis 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).\n\n__NOTE:__ Appending without roration could cause large log file, be sure that log file is rotated.\n\n#### disabled\nThis option points all log into `/dev/null`, so no log is available.\n\n__NOTE:__ If any issue starts to appear and you want to report it, ensure you do not use this option.\n\n## Build \u0026 install\n\n### Build dependencies\n- go (\u003e= 1.20)\n- gcc\n- pam-devel\n- libx11-devel (libx11)\n\n### Dependencies\n- pam\n- libx11\n- xorg / xorg-server (optional)\n- xauth / xorg-xauth (required for xorg)\n- mcookie (required for xorg)\n- wayland (optional)\n\n\n### Make Commands\n---\n- `make clean` to cleanup already built binary.\n- `make build` to build binary and gzip man page.\n---\n- `make install` to install binary.\n- `make install-pam` to install pam module.\n- `make install-pam-fedora` to install pam module for Fedora.\n- `make install-pam-suse` to install pam module for openSUSE.\n- `make install-manual` to install man page.\n- `make install-all` to install binary, pam module and man page.\n---\n- `make install-config` to create default conf file in /etc/emptty/.\n- `make install-dinit` to install dinit service.\n- `make install-runit` to install runit service.\n- `make install-runit-artix` to install runit to Artix service folder.\n- `make install-openrc` to install openrc service.\n- `make install-s6` to install s6 service.\n- `make install-systemd` to install systemd service.\n- `make install-motd-gen` to create default motd-gen.sh in /etc/emptty/.\n---\n- `make uninstall` to remove emptty from your system\n---\n\n### Build tags\nDifferent 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.\nThe usage during build is really simple, just add parameter and optional tags split with \",\".\n```\n$ make build TAGS=tag1,tag2\n```\n\n#### nopam\nThis tag disables dependency on PAM. In Linux it switch to basic authentication with `shadow`.\n\n#### noxlib\nThis tag disables dependency on libx11, could be useful, if only Wayland desktop is expected to be used.\n\n#### noutmp\nThis tag disables dependency on UTMP/UTMPX. Its implementation is different by each libc/distro, this provides ability to build if incompatibility occurs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftvrzna%2Femptty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftvrzna%2Femptty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftvrzna%2Femptty/lists"}