同じシステム上の他のユーザーに通知送信


12

notify-sendを使用して、システム上の他のユーザーにメッセージを送信することはできますか?
指定されたユーザーが望ましいが、システム全体でも機能します。

libnotifyがインストールされたUbuntu / Debian


crontabでrootによって開始されたスクリプトからでも、Ubuntu 16.04で動作する例については、この回答を参照してください。
mivk

回答:


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

以前にハイフンを1つ見逃していません-sessionか?
vladkras

@vladkras pgrepはXセッションマネージャーのpidを取得することを想定していません。つまり、lxde-session、gnome-sessionなどです。このスクリプトはせいぜい粗雑なハックであり、システムのセットアップに大きく依存します。私が答えたときはうまくいきましたが、5年後には修正なしでは動作しません。
ミッケ

それはどちらか私のために仕事をdoesnの`t
vladkras

1

ユーザーが端末を使用している場合、次のコマンドが役立ちます-

write user [tty]

またはすべてのユーザーに送信する

wall


0

すべてのセッションに通知を送信するには、同様のツールが必要でした。ここに私の解決策があります:https : //unix.stackexchange.com/a/230062/93227

/ procをスキャンしてすべてのセッションバスを見つけ、各バスでnotify-sendを実行します(バスごとに1回)。すべての引数は変更されずに実際のnotify-sendに渡されます。

#!/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);
                        }
                }
        }
' -- "$@"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.