уведомить-отправить другому пользователю в той же системе


12

Можно ли использовать notify-send для отправки сообщений другим пользователям в системе?
желательно для указанного пользователя, но система будет работать хорошо.

Ubuntu / Debian с установленным libnotify


Посмотрите этот ответ для примера, который работает с Ubuntu 16.04, даже из скрипта, запущенного пользователем root в crontab.
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

ты не пропустил ни одного дефиса раньше -session?
vladkras

ни один @vladkras pgrepне должен получать pid менеджера X-сессии, то есть lxde-session, gnome-session и т. д. Этот скрипт в лучшем случае является грубым взломом и во многом зависит от настроек вашей системы. Это сработало, когда я ответил, но не работает без изменений сейчас, 5 лет спустя.
Микке

У меня это тоже не работает
vladkras 22.10.16

1

Если пользователи находятся на терминалах, будут полезны следующие команды:

write user [tty]

или отправить всем пользователям

wall


0

Мне нужен подобный инструмент для отправки уведомлений на все сессии. Вот мое решение: /unix//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);
                        }
                }
        }
' -- "$@"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.