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

hyp*_*not 5 ssh command-line login xterm

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

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

它发生在以下终端:

  • 终端
  • xfce4-终端
  • 收货人

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

  • ssh-ing
  • xterm / lxterm / uxterm

tre*_*esf 1

我找到的最佳答案在这里:/sf/answers/114073991/

IE

echo ${SUDO_USER:-${USER}}
Run Code Online (Sandbox Code Playgroud)

或者也可以

logname 2>/dev/null || echo ${SUDO_USER:-${USER}}
Run Code Online (Sandbox Code Playgroud)

FWIW,这适用于 MacOS 10.8、10.11,并且早在 Ubuntu 12.04 上也得到了证实。

2>是为了抑制logname: no login name由于上游 gnome-terminal bug而从 Ubuntu 16.04 开始记录到控制台的错误。

:-${USER}表示如果$SUDO_USER为空(当实际未使用 sudo 时),则替换 的值$USER


小智 0

我在16.04中也发现了同样的问题。我有几个使用日志名的脚本,但现在它们不起作用。我创建了一个解决方法。以我自己的身份登录时,我使用我的登录用户名将文件放入我的主目录中:

echo $LOGNAME > ~/.logname;
Run Code Online (Sandbox Code Playgroud)

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

g_logname="$(<~/.logname)";
Run Code Online (Sandbox Code Playgroud)

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