Lots of people are confused why mesg(1) is priting this message. Usual
cause seems to be an uninteractive shell trying to turn running 'mesg n'
from a /root/.profile where command invocation is by default on debian based
systems. This might be rare case when failing silently is better.
[kzak@redhat.com: - add note to the man page
- fix if(isatty()) logic]
Reference: https://www.google.com/search?q=mesg+ttyname+failed
Review: https://marc.info/?l=util-linux-ng&m=
153319988631233&w=2
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Karel Zak <kzak@redhat.com>
sure your ttys are set the way you want them to be set,
.B mesg
should be executed in your login scripts.
+.PP
+The
+.B mesg
+utility silently exits with error status 2 if the current standard error output does
+not refer to the terminal. In this case execute
+.B mesg
+is pointless. The command line option \fB\-\-verbose\fR forces
+mesg to print a warning in this situation. This behaviour has been introduced
+in version 2.33.
.SH ARGUMENTS
.TP
.B n
argc -= optind;
argv += optind;
+ if (!isatty(STDERR_FILENO)) {
+ if (verbose)
+ warnx(_("no tty"));
+ exit(MESG_EXIT_FAILURE);
+ }
if ((tty = ttyname(STDERR_FILENO)) == NULL)
err(MESG_EXIT_FAILURE, _("ttyname failed"));
if ((fd = open(tty, O_RDONLY)) < 0)