WSL2 Ubuntu - wall 命令

WSL2 Ubuntu - wall 命令

我正在尝试设置一个简单的脚本来在后台运行的 cron 作业上运行,并使用命令通知任何打开的终端结果wall。然而,在测试时,我根本没有得到任何输出。我通过 Microsoft 的终端应用程序使用 WSL Ubuntu 和 zsh。

运行ttyw返回以下内容,而who什么也不返回。

 hardya@GBH-HARDYA1  ~  tty
/dev/pts/4
 hardya@GBH-HARDYA1  ~  w
 09:16:01 up 3 days,  4:30,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

有任何想法吗?

答案1

@EdgarMagallon 的评论中有两点是正确的:

  • who与上面提到的命令问题相关询问 Ubuntu
  • 该答案的所有者(我)将...;-)

好的,是的,该命令似乎确实使用与确定登录用户及其终端wall相同的机制。who

因此要让它在 WSL2 下工作:

  • 您需要最新版本的 WSL,该版本在wsl --version.如果返回invalid command,请确保您的 Windows 已完全更新,然后安装新版本Linux 的 Windows 子系统来自微软商店。

  • 启用 Systemd,如中所述这个答案

  • 重新启动 WSL 并确认 Systemd 已启用后,运行su - $USER以强制用户“登录”。

  • 然后,在另一个终端中,您可以运行:

    sudo wall Wallaby # Or a real message
    

    它应该显示在登录的终端中。请记住,这sudo是许多发行版所必需的。曾经是这样wallsetguidUbuntu 和 Debian 上,但情况似乎不再如此了。

  • w并且who还应该显示您的登录用户。

当然,这并不一定能帮助您实现所需的脚本,因为 WSL 不会力量登录。一些可能性:

  • 强制su - $USER登录您想要接收通知的 shell。

  • 编写一个 Zsh 提示函数来监视文件(或者可能是 fifo?)并使用“完成”信息更新提示(直到清除)。请注意,我发现这在 Fish 中更容易,但我确信在 Zsh(甚至 Bash)中也是可能的。

  • tmux在您的终端中运行并用于tmux display-message通知比赛。

相关内容