diff --git a/include/pathnames.h b/include/pathnames.h index 37f010997..e68ac7df2 100644 --- a/include/pathnames.h +++ b/include/pathnames.h @@ -79,7 +79,9 @@ /* used in term-utils/agetty.c */ #define _PATH_ISSUE "/etc/issue" -#define _PATH_OS_RELEASE "/etc/os-release" +#define _PATH_OS_RELEASE_ETC "/etc/os-release" +#define _PATH_OS_RELEASE_USR "/usr/lib/os-release" + #define _PATH_NUMLOCK_ON _PATH_LOCALSTATEDIR "/numlock-on" #define _PATH_LOGINDEFS "/etc/login.defs" diff --git a/term-utils/agetty.8 b/term-utils/agetty.8 index c4b7f13e2..66f1a0389 100644 --- a/term-utils/agetty.8 +++ b/term-utils/agetty.8 @@ -338,8 +338,9 @@ Insert the system name, the name of the operating system. Same as `uname \-s'. See also \\S escape code. .TP S or S{VARIABLE} -Insert the VARIABLE data from \fI/etc/os-release\fP. If the VARIABLE argument -is not specified then use PRETTY_NAME from the file or the system name (see \\s). +Insert the VARIABLE data from \fI/etc/os-release\fP, if the file does not exist +then fallback to \fI/usr/lib/os-release\fP. If the VARIABLE argument is not +specified then use PRETTY_NAME from the file or the system name (see \\s). This escape code allows to keep \fI/etc/issue\fP distribution and release independent. Note that \\S{ANSI_COLOR} is converted to the real terminal escape sequence. @@ -401,7 +402,7 @@ the system status file. .B /etc/issue printed before the login prompt. .TP -.B /etc/os-release +.B /etc/os-release /usr/lib/os-release operating system identification data. .TP .B /dev/console diff --git a/term-utils/agetty.c b/term-utils/agetty.c index 7c97faffa..0d7bd1db7 100644 --- a/term-utils/agetty.c +++ b/term-utils/agetty.c @@ -1444,10 +1444,13 @@ static char *read_os_release(struct options *op, const char *varname) /* read the file only once */ if (!op->osrelease) { - fd = open(_PATH_OS_RELEASE, O_RDONLY); + fd = open(_PATH_OS_RELEASE_ETC, O_RDONLY); if (fd == -1) { - log_warn(_("cannot open %s: %m"), _PATH_OS_RELEASE); - return NULL; + fd = open(_PATH_OS_RELEASE_USR, O_RDONLY); + if (fd == -1) { + log_warn(_("cannot open os-release file")); + return NULL; + } } if (fstat(fd, &st) < 0 || st.st_size > 4 * 1024 * 1024)