通知—发送给同一系统上的其他用户

通知—发送给同一系统上的其他用户

是否可以使用通知发送 (notify-send) 向系统上的其他用户发送消息?
最好是发送给指定的用户,但系统范围也可以。

安装了 libnotify 的 Ubuntu/Debian

答案1

如果您有其他用户的密码,您可以执行sudo -u somedude notify-send Hello。somedude 必须启动 X-session。

编辑:找到这个可用于 cron 的脚本:

#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin
export DISPLAY=:0.0
export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -session)/environ )
TIME=$1
shift
/usr/bin/notify-send -t 36000 $1 $2

答案2

如果用户在终端上,则以下命令将会有用 -

write user [tty]

或发送给所有用户

wall

答案3

我偶然发现了以下实现用户通知的项目:tinynotify-发送

答案4

我需要类似的工具来向所有会话发送通知。这是我的解决方案:https://unix.stackexchange.com/a/230062/93227

它扫描 /proc 以查找所有会话总线,然后在每个总线上执行通知发送 (每个总线一次)。所有参数均原封不动地传递给实际通知发送。

#!/bin/bash

/bin/grep -sozZe '^DBUS_SESSION_BUS_ADDRESS=[a-zA-Z0-9:=,/-]*$' /proc/*/environ \
| /usr/bin/php -r '
        $busses = array();
        array_shift($argv);
        while($ln = fgets(STDIN)) {
                list($f, $env) = explode("\0", $ln, 2);
                if (file_exists($f)) {
                        $user = fileowner($f);
                        $busses[$user][trim($env)] = true;
                }
        }
        foreach ($busses as $user => $user_busses) {
                foreach ($user_busses as $env => $true) {
                        if (pcntl_fork()) {
                                posix_seteuid($user);
                                $env_array = array("DBUS_SESSION_BUS_ADDRESS" => preg_replace("/^DBUS_SESSION_BUS_ADDRESS=/", "", $env));
                                pcntl_exec("/usr/bin/notify-send", $argv, $env_array);
                        }
                }
        }
' -- "$@"

相关内容