ฉันต้องการเครื่องมือที่คล้ายกันเพื่อส่งการแจ้งเตือนไปยังทุกเซสชัน นี่คือทางออกของฉัน: /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);
}
}
}
' -- "$@"