who/w/logname 在多个终端中损坏

who/w/logname 在多个终端中损坏

我遇到了一个奇怪的问题:在 GUI 会话中,根据所使用的终端,会出现以下两个(相关)问题:

  1. who并且w不列出用户的活动会话
  2. logname返回logname: no login name

它发生在以下终端:

  • 外部终端
  • xfce4-终端
  • 接收

另一方面,在以下场景中它可以完美运行(who/w 列出用户和 logname 功能):

  • ssh 接入
  • xterm / lxterm / uxterm

答案1

我找到的最佳答案在这里:https://stackoverflow.com/a/1629628/3196753

IE

echo ${SUDO_USER:-${USER}}

或者

logname 2>/dev/null || echo ${SUDO_USER:-${USER}}

值得一提的是,它适用于 MacOS 10.8、10.11,并且已在 Ubuntu 12.04 中得到确认。

2>是为了抑制logname: no login name从 Ubuntu 16.04 开始由于上游 gnome-terminal 错误

:-${USER}意味着如果$SUDO_USER为空(当 sudo 实际上未被使用时),则替换 的值$USER

答案2

我在 16.04 中发现了同样的问题。我有几个使用 logname 的脚本,现在它们不起作用了。我找到了一个解决方法。以我自己的身份登录时,我使用我的登录用户名在我的主目录中放置了一个文件:

echo $LOGNAME > ~/.logname;

当我想访问我的日志名时,我这样检索它:

g_logname="$(<~/.logname)";

无论我是以自己还是 root 身份运行脚本,这种方法都有效,因为 sudo root 将“~”的定义保留为我的主目录。我可以为系统上的每个用户创建一个 .logname 文件。此方法有效,而从 root 级别调用时使用 $USER 和 $LOGNAME 则无效。确实,有人可能会破解它并更改文件中的值,但我并不担心。您始终可以将文件的权限更改为 444,并将所有者:组更改为 root:root,这将阻止任何没有 root 权限的人。

相关内容