'알림 보내기'를 사용하여 기존 알림을 즉시 바꾸려면 어떻게해야합니까?


23

내가 사용하면 notify-send바탕 화면에 알림을 표시하고 다른 알림을 보여주기 위해 다시 사용하기 위해, 나는 두 번째 단지 쇼 것으로 나타났습니다 첫 번째가 사라졌다.

notify-send기존 알림을 다른 알림으로 즉시 바꾸는 방법이 있습니까?

답변:


16

할 수는 있지만 패치 된 libnotify 를 사용해야합니다.

notify-send시간 초과 또는 사라지기 전에 기존 알림을 교체 할 수 없습니다. 이것은 알려진 버그 입니다. 그러나 버그 보고서에 대한 의견 제시자가 이를 해결하기 위한 패치게시 했습니다.

PPA에서 패치 된 libnotify-bin 설치

패치 된 버전의 libnotify-bin 패키지를 만들어 PPA를 교체 할 수 있습니다. 현재는 Ubuntu 12.04 전용이지만 현재 지원되는 다른 릴리스에 필요한 경우 의견을 게시하십시오. 가능한 한 최선을 다할 것입니다.

설치하려면 터미널을 열고 다음을 수행하십시오.

sudo apt-add-repository ppa : izx / askubuntu
sudo apt-get 업데이트
sudo apt-get 설치 libnotify-bin

교체 기능을 사용하는 방법

패치 notify-send에는 두 개의 새로운 스위치 -p(또는 --print-id ) 및 -r(또는 --replace-id )가 포함됩니다. 는 --help그들과 같이 설명합니다 :

  -p, --print-id 알림 ID를 인쇄합니다.
  -r, --replace-id = REPLACE_ID 바꿀 알림의 ID입니다.
  • 을 사용 -p하면 각각 notify-sendID N (숫자 / 정수) 을 반환합니다 .
  • 다른 발행 notify-send과 함께하는 것은 -r N이전 통지를 대체합니다 즉시 .
  • 예를 들어, bash의 경우 다음을 사용하여 ID를 저장할 수 있습니다 notify-send -p ....

    NID=$(notify-send -p "MESSAGE-1")

    그런 다음 다음으로 바꾸십시오.

    notify-send -r $NID "MESSAGE-2"
  • -r 변수가 처음에 0으로 초기화 되는 한 스크립트에서 -p-r 을 재귀 적으로 사용할 수 있습니다 .

  • 다음은 0.5 초 간격으로 0에서 100까지의 알림을 보여주는 간단한 스크립트입니다.

    #! / bin / bash 
    NID = 0
    {0..100..10}의 i    해야 할 것       NID = $ (알림-보내기 -p -r $ NID $ i)       수면 0.5    끝난

ppa.launchpad.net/izx/askubuntu/ubuntu/dists/trusty/main/…에 대한 404를 얻습니다 . 이 저장소가 오래 되었습니까?
vp_arth

1
notify-send와 같은 내 파이썬 스크립트를 사용할 수 있습니다 : github.com/phuhl/notify-send.py
user3637541 5

11

"동기식"힌트를 사용하여 이전 확인 알림을 대체 할 "확인"알림을 작성할 수 있습니다. 예를 들면 다음과 같습니다.

notify-send "Message" -h string:x-canonical-private-synchronous:anything

"x-canonical-private-synchronous"힌트 가이 문서에 지정되어 있습니다 . 힌트를 지정하려면을 사용하십시오 -h type:name:value. 여기의 유형은 string, name은 x-canonical-private-synchronous이며 원하는 값이 될 수 있습니다.

첫 번째 알림이 그 힌트 만들어집니다 그래서 경우 두 번째는 물론이고, 두 번째는 바로 첫 번째 대체합니다. "확인 거품"열의 설명서에서 애니메이션 및 지속 시간 을 참조하십시오 .


string:x-canonical-private-synchronous:anything정확히 내가 필요한 것입니다. 이 답변에 감사드립니다. 또한 문서 링크
avk

그것은 그놈과 작동하지 않습니다 ....
Johannes Lemonde

1
이것은 다소 우분투에서만 작동합니다.
bschlueter

10

X-ref :
notify-osd에서 새 알림이 종료되기를 기다리지 않고 강제로 표시하는 방법은 무엇입니까?

패치없이 간단하게 할 수 있습니다

#!/bin/bash

for i in {0..100..10}
    do
          killall notify-osd
          notify-send "testing" $i
          sleep 1
    done

책갈피 :
'알림 보내기'를 사용하여 기존 알림을 즉시 바꾸려면 어떻게합니까?


notify-osd (2592) 오류를 보냅니다. 작업이 허용되지 않습니다. 그게 무슨 뜻이야?

권한이 부적절하다는 것을 의미 할 수 있습니다.

sudo killall notify-osd

오류를 보냅니다 notify-osd(2592): Operation not permitted. 그게 무슨 뜻이야?
VedVals

5

notify-send와 거의 동일하지만을 지원하는 간단한 Python 스크립트를 만들었습니다 --replaces-id.

notify-send.py

웹 : https://github.com/phuhl/notify-send.py

쉘에서 데스크탑 알림을 보내기위한 Python 스크립트.

Libnotify는 Linux 세계에서 많은 스크립트의 일부입니다. Desktop Notifications 사양의 지정된 많은 기능을 활용하여 셸 스크립트에 액세스 할 수 있습니다. 그러나 기존 알림을로 대체 할 수 는 없습니다replaces-id . 이것은 알려져있다 버그 2008과이 패치 패치는 아직 (2018) 불구하고 업스트림되지 않은 2012 년 이후를.

이 파이썬 스크립트는 notify2 패키지를 사용하고 기능을 쉘에 노출시킵니다.

notify-send.py와 notify-send의 차이점

  • 에서 notify-send.py -h 쇼 대신 힌트에 대한 매개 변수가되는 데 도움이. 힌트를 사용하십시오 --hint.
  • 에서 notify-send.py -r ID와는 notify-send.py --replaces-id ID 존재한다. 알림 호출을 교체 알림 notify-send.py 으로 반환 된 ID로 교체합니다.
  • notify-send.py 새로 만든 알림의 ID를 반환합니다.
  • notify-send.py --replaces-process NAME존재합니다. 동일한 NAME으로 생성 된 모든 알림은 모든 알림을 동일한 NAME으로 대체합니다. 이 매개 변수 notify-send.py를 사용하여 호출하면 막힘으로 호출하는 것이 가장 좋습니다 &.

설치

python3이 필요합니다.

git clone https://github.com/phuhl/notify-send.py
cd notify-send.py
sudo pip install notify2
sudo python setup.py install

용법

$ notify-send.py -h
usage: notify-send.py [-h] [-u LEVEL] [-t TIME] [-a APP_NAME]
                  [-i ICON[,ICON...]] [-c TYPE[,TYPE...]]
                  [--hint TYPE:NAME:VALUE] [-r ID]
                  [--replaces-process NAME]
                  SUMMERY [BODY]

positional arguments:
      SUMMERY
      BODY

optional arguments:
      -h, --help        show this help message and exit
      -u LEVEL, --urgency LEVEL
                        Specifies the urgency level (low, normal, critical).
      -t TIME, --expire-time TIME
                        Specifies the timeout in milliseconds at which to
                        expire the notification.
      -a APP_NAME, --app-name APP_NAME
                        Specifies the app name for the icon
      -i ICON[,ICON...], --icon ICON[,ICON...]
                        Specifies an icon filename or stock icon to display.
      -c TYPE[,TYPE...], --category TYPE[,TYPE...]
                        Specifies the notification category.
      --hint TYPE:NAME:VALUE
                        Specifies basic extra data to pass. Valid typesare
                        int, double, string and byte.
      -r ID, --replaces-id ID
                        Specifies the id of the notification that should be
                        replaced.
     --replaces-process NAME
                        Specifies the name of a process that should take care
                        of replacing notifications for this process.

루트 사용자로 알림 전송 [.py]

libnotify 또는

notify-send.py

이 두 스크립트가 루트 사용자로부터 사용됩니다.

#!/bin/bash
username=<your username here>
if [ "$(id -u)" != "1000" ] ; then
    sudo -u $username DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send.sh "$@"
else
    notify-send.sh "$@"
fi

이와 notify-send.sh같이 :

#!/bin/bash
notify-send.py "$@" &

참조

또한 Dunst 에서 영감을 얻은 알림 데몬 을 살펴보십시오 . 투명한 배경 및 알림을 저장하는 알림 센터의 가능성을 포함하여 몇 가지 개선 된 기능이 있습니다.


이 솔루션은 우분투 18.10에서 나를 위해 일했습니다. 다른 솔루션도 작동하지 않는 것 같습니다.
Dreamcat4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.