Add session(5).

This commit is contained in:
Jonas 'Sortie' Termansen 2022-09-18 21:54:21 +02:00
parent 050ba71ca0
commit 875030f3f3
3 changed files with 75 additions and 4 deletions

View File

@ -26,6 +26,15 @@ exists.
The process remains running in the background and takes over again when the user The process remains running in the background and takes over again when the user
session exits. session exits.
.Pp .Pp
The user's
.Xr session 5
is created upon login by running the user's
.Pa ~/.session
script if it exists and is executable, otherwise attempting
.Pa /etc/session ,
and ultimately falling back on the user's shell from
.Xr passwd 5 .
.Pp
Type a special username to perform special options: Type a special username to perform special options:
.Pp .Pp
.Bl -tag -width "poweroff" -compact -offset indent .Bl -tag -width "poweroff" -compact -offset indent
@ -57,12 +66,18 @@ shell
username username
.El .El
.Sh FILES .Sh FILES
.Bl -tag -width "/etc/passwd" -compact .Bl -tag -width "/etc/login.conf.textual" -compact
.It Pa ~/.session
user session script run upon login (see
.Xr session 5 )
.It Pa /etc/login.conf.textual
textual interface is forced if this file exists
.It Pa /etc/passwd .It Pa /etc/passwd
user database (see user database (see
.Xr passwd 5 ) .Xr passwd 5 )
.It Pa /etc/login.conf.textual .It Pa /etc/session
textual interface is forced if this file exists fallback session script run upon login (see
.Xr session 5 )
.El .El
.Sh EXIT STATUS .Sh EXIT STATUS
.Nm login .Nm login
@ -72,6 +87,7 @@ reboot, or exits 2 on fatal failure and the boot should halt.
.Xr passwd 1 , .Xr passwd 1 ,
.Xr crypt_checkpass 3 , .Xr crypt_checkpass 3 ,
.Xr passwd 5 , .Xr passwd 5 ,
.Xr session 5 ,
.Xr init 8 , .Xr init 8 ,
.Xr login 8 .Xr login 8
.Sh BUGS .Sh BUGS

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2014, 2015, 2018 Jonas 'Sortie' Termansen. * Copyright (c) 2014, 2015, 2018, 2022 Jonas 'Sortie' Termansen.
* *
* Permission to use, copy, modify, and distribute this software for any * Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@ -249,6 +249,10 @@ bool login(const char* username)
tcsetpgrp(0, getpgid(0)) || tcsetpgrp(0, getpgid(0)) ||
sigprocmask(SIG_SETMASK, &oldset, NULL) < 0 || sigprocmask(SIG_SETMASK, &oldset, NULL) < 0 ||
settermmode(0, TERMMODE_NORMAL) < 0 || settermmode(0, TERMMODE_NORMAL) < 0 ||
(execlp("./.session", "./.session", (const char*) NULL) < 0 &&
errno != ENOENT && errno != EACCES) ||
(execlp("/etc/session", "/etc/session", (const char*) NULL) < 0 &&
errno != ENOENT && errno != EACCES) ||
execlp(pwd->pw_shell, pwd->pw_shell, (const char*) NULL)); execlp(pwd->pw_shell, pwd->pw_shell, (const char*) NULL));
write(pipe_fds[1], &errno, sizeof(errno)); write(pipe_fds[1], &errno, sizeof(errno));
_exit(127); _exit(127);

51
share/man/man5/session.5 Normal file
View File

@ -0,0 +1,51 @@
.Dd September 18, 2022
.Dt SESSION 5
.Os
.Sh NAME
.Nm session
.Nd user login ession
.Sh SYNOPSIS
.Nm ~/.session
.Nm /etc/session
.Sh DESCRIPTION
.Xr login 8
creates the user's session by running the user's
.Nm
script, which normally
executes a command line or graphical user environment.
The session concludes once the session script exits and
.Xr login 8
reclaims control.
.Pp
The session script is found by searching for an executable script in the
following paths:
.Bl -bullet -compact
.It
.Pa ~/.session
.It
.Pa /etc/session
.El
.Pp
The user's shell from
.Xr passwd 5
is used as a fallback session.
.Sh EXAMPLES
The user's
.Pa ~/.session
file can be created in any text editor and then made executable:
.Bd -literal -offset indent
editor ~/.session
chmod +x ~/.session
.Ed
.Ss Trianglix
.Xr trianglix 1
can be selected as the user's triangle environment with this executable
.Pa ~/.session
script:
.Bd -literal -offset indent
#!/bin/sh
exec trianglix
.Ed
.Sh SEE ALSO
.Xr passwd 5 ,
.Xr login 8