thông báo-gửi cho người dùng khác trên cùng hệ thống


12

Có thể sử dụng thông báo-gửi để gửi tin nhắn cho người dùng khác trên hệ thống không?
tốt nhất là cho một người dùng được chỉ định, nhưng toàn hệ thống sẽ hoạt động tốt.

Ubuntu / Debian được cài đặt libnotify


Xem câu trả lời này để biết ví dụ hoạt động với Ubuntu 16.04, ngay cả từ tập lệnh được bắt đầu bằng root trong crontab.
mivk

Câu trả lời:


6

Nếu bạn có mật khẩu người dùng khác, bạn có thể làm sudo -u somedude notify-send Hello. Một ngày nào đó phải bắt đầu một phiên X.

Chỉnh sửa: Tìm thấy tập lệnh này để sử dụng với 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

với một chút sửa đổi, kịch bản đó làm những gì tôi cần nó để làm, cảm ơn
madmaze

bạn đã không bỏ lỡ một dấu gạch nối trước -session?
vladkras

no @vladkras pgrepđược coi là người quản lý phiên X, tức là lxde-session, gnome-session, v.v. Kịch bản đó là một bản hack thô sơ nhất và phụ thuộc rất nhiều vào thiết lập hệ thống của bạn. Nó hoạt động khi tôi trả lời nhưng không hoạt động mà không sửa đổi, 5 năm sau.
micke

Nó cũng không hoạt động với tôi
vladkras

1

Nếu người dùng ở trên thiết bị đầu cuối, các lệnh sau sẽ được sử dụng -

write user [tty]

hoặc gửi cho tất cả người dùng

wall


0

Tôi cần công cụ tương tự để gửi thông báo cho tất cả các phiên. Đây là giải pháp của tôi: /unix//a/230062/93227

Nó quét / Proc để tìm tất cả các bus phiên và sau đó nó thực thi gửi thông báo trên mỗi cái (một lần trên mỗi xe buýt). Tất cả các đối số được chuyển không thay đổi để gửi thông báo thực sự.

#!/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);
                        }
                }
        }
' -- "$@"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.