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


12

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

安装了libnotify的Ubuntu / Debian


请参阅此答案,以获取适用于Ubuntu 16.04的示例,甚至可以从crontab中以root身份启动的脚本启动。
mivk

Answers:


6

如果您拥有其他用户的密码,则可以这样做sudo -u somedude notify-send Hello。somedude必须已开始X会话。

编辑:找到了与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

稍加修改,该脚本即可完成我需要做的事情,谢谢
madmaze 2011年

您以前没有错过连字符-session吗?
vladkras 16-10-19

没有@vladkras pgrep应该获得X会话管理器的pid,即lxde-session,gnome-session等。该脚本充其量只是一个粗略的技巧,在很大程度上取决于您的系统设置。当我回答时它奏效了,但五年后现在没有修改就无法奏效。
micke '16

这对我也
不起作用

1

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

write user [tty]

或发送给所有用户

wall


0

我需要类似的工具将通知发送到所有会话。这是我的解决方案: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);
                        }
                }
        }
' -- "$@"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.