동일한 시스템의 다른 사용자에게 통지 보내기


12

알림 보내기를 사용하여 시스템의 다른 사용자에게 메시지를 보낼 수 있습니까?
가급적이면 지정된 사용자에게 적합하지만 시스템 전체가 잘 작동합니다.

libnotify가 설치된 우분투 / 데비안


crontab에서 root로 시작한 스크립트에서도 Ubuntu 16.04와 함께 작동하는 예제는 이 답변 을 참조하십시오 .
mivk

답변:


6

다른 사용자 암호가 있으면 할 수 있습니다 sudo -u somedude notify-send Hello. 누군가 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는 X 세션 관리자, 즉 lxde-session, gnome-session 등의 pid를 얻지 못합니다 .이 스크립트는 최상의 해킹이며 시스템 설정에 따라 다릅니다. 내가 대답했을 때 효과가 있었지만 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.