แจ้งเตือน - ส่งไปยังผู้ใช้รายอื่นในระบบเดียวกัน


12

เป็นไปได้ไหมที่จะใช้การแจ้งเตือนส่งเพื่อส่งข้อความไปยังผู้ใช้รายอื่นในระบบ?
ดีกว่าสำหรับผู้ใช้ที่ระบุ แต่ทั้งระบบจะทำงานได้ดี

Ubuntu / Debian พร้อมติดตั้ง libnotify


ดูคำตอบนี้สำหรับตัวอย่างที่ทำงานกับ Ubuntu 16.04 แม้กระทั่งจากสคริปต์ที่รูทโดย crontab
mivk

คำตอบ:


6

หากคุณมีรหัสผ่านที่ผู้ใช้อื่น ๆ 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

ด้วยการดัดแปลงเล็กน้อยสคริปต์นั้นทำในสิ่งที่ฉันต้องการให้ทำขอบคุณ
madmaze

คุณไม่เคยใส่ยัติภังค์มาก่อน-sessionหรือไม่
vladkras

ไม่มี @vladkras ที่pgrepควรได้รับ pid ของตัวจัดการเซสชัน X เช่น lxde-session, gnome-session เป็นต้นสคริปต์นั้นเป็นแฮ็คข้อมูลที่ดีที่สุดและขึ้นอยู่กับการตั้งค่าระบบของคุณเป็นจำนวนมาก มันทำงานได้เมื่อฉันตอบ แต่ไม่ทำงานโดยไม่มีการดัดแปลงตอนนี้ 5 ปีต่อมา
micke

มันไม่ได้ผลสำหรับฉันเช่นกัน
vladkras

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);
                        }
                }
        }
' -- "$@"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.