Macbookのように、通知を一時的に非表示にする「邪魔しない」オプションはありますか?


13

OSXデバイスの場合のように、「邪魔しないでください」モードがあります。このモードでは、通知が邪魔するかどうかを判断できます。

クロムをインストールしたばかりで、通常はグループテキストやその他の通知で迷惑になります。仕事中に迷惑になる場合があります。 Ubuntuにはそのようなものがありますか?


そこFirefox用のオプションがあるが、私はクロームのユーザーまったくだよんので、そのことについて言うことはできません
Sergiy Kolodyazhnyy

問題はクロム固有ではありませんが、一般的な通知..
ラムダ


2
スクリプトを開発しました。これまでのところ、それは私のgithubの上だ:github.com/SergKolo/sergrep/blob/master/notify-block.sh 今日は時間があるように私はすぐに私の答えを更新します。ランチャーにピン留めできる素敵なショートカットも含まれます
Sergiy Kolodyazhnyy

1
回答を編集しました。確認してください。追加したい追加機能がある場合は
お知らせください

回答:


9

1.メジャーアップデート

インジケーターの完全に書き直されたバージョン(0.9.0)を完成しました。オプションは次のとおりです。

  • 特定の文字列を含む通知のみを抑制する
  • 音の抑制(ミュート)
  • 逃した通知を記録する
  • 起動時に実行
  • 次回の実行時に最後の状態(抑制または非抑制)を記憶する

さらに、インターフェイスと動作の多くの多くの改善。

ここに画像の説明を入力してください ここに画像の説明を入力してください

インストールは変更されません(ppa):

sudo apt-add-repository  ppa:vlijm/nonotifs
sudo apt-get update
sudo apt-get install nonotifs

2.古い(より)答え

通知をミュート/表示するインジケータ

以下のインジケータを使用して、通知を一時的にオフにすることができます。

ここに画像の説明を入力してください

または通知を表示:

ここに画像の説明を入力してください

使い方

トリックは単純なコマンドで、dbus-monitor今後の通知をインターセプトし、表示される前に停止するために使用します。
このインジケータは、ユーザーフレンドリーな「ラッパー」であり、オフとオンを切り替えます。

設定方法


あたりとしてトラスティため、鮮やかな、ワイリー、Xenial):

sudo apt-add-repository  ppa:vlijm/nonotifs
sudo apt-get update
sudo apt-get install nonotifs

これはグローバルにインストールされます(ランチャーを含む)。最新バージョンを維持し、定期的に更新されるため、ppaを介したインストールが推奨されます。
インジケーターはダッシュでNoNotificationsとして表示されます

ppaでインストールしたが、以前に手動で下からインストールした場合は、rm ~/.local/share/applications/nonotif.desktop最初に実行してローカル.desktopファイルを削除してください。


または手動で:

解決策は、単に1つの同じディレクトリに一緒に保存する必要がある多くのアイテムで構成されています。

  1. ディレクトリまたはフォルダを作成します(たとえば、ホームディレクトリのどこにでも配置できます)
  2. インジケーター:以下のスクリプトを空のファイルにコピーし、名前を付けて保存しますnonotif_indicator.py

    #!/usr/bin/env python3
    import os
    import signal
    import gi
    import subprocess
    gi.require_version('Gtk', '3.0')
    gi.require_version('AppIndicator3', '0.1')
    from gi.repository import Gtk, AppIndicator3
    
    currpath = os.path.dirname(os.path.realpath(__file__))
    proc = "nonotifs.sh"
    
    def run(path):
        try: 
            pid = subprocess.check_output(["pgrep", "-f", proc]).decode("utf-8").strip()
        except subprocess.CalledProcessError:
            subprocess.Popen(path+"/"+proc)
    
    def show():
        try:
            pid = subprocess.check_output(["pgrep", "-f", proc]).decode("utf-8").strip()
            subprocess.Popen(["pkill", "-P", pid])
        except subprocess.CalledProcessError:
            pass
    
    class Indicator():
        def __init__(self):
            self.app = 'nonotif'
            iconpath = currpath+"/grey.png"
            self.testindicator = AppIndicator3.Indicator.new(
                self.app, iconpath,
                AppIndicator3.IndicatorCategory.OTHER)
            self.testindicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)       
            self.testindicator.set_menu(self.create_menu())
    
        def create_menu(self):
            menu = Gtk.Menu()
            item_quit = Gtk.MenuItem('Quit')
            item_quit.connect('activate', self.stop)
            item_silent = Gtk.MenuItem("Don't disturb")
            item_silent.connect('activate', self.silent)
            item_show = Gtk.MenuItem("Show notifications")
            item_show.connect('activate', self.show)
            menu.append(item_quit)
            menu.append(item_silent)
            menu.append(item_show)
            menu.show_all()
            return menu
    
        def stop(self, source):
            Gtk.main_quit()
    
        def silent(self, source):
            self.testindicator.set_icon(currpath+"/red.png")
            run(currpath)
    
        def show(self, source):
            self.testindicator.set_icon(currpath+"/green.png")
            show()
    
    Indicator()
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    Gtk.main()
  3. dbus-monitorスクリプト; 最初のスクリプトnonotifs.sh と同じディレクトリに(正確に)保存します。

    #!/bin/bash
    dbus-monitor "interface='org.freedesktop.Notifications'" | xargs -I '{}' pkill notify-osd

    このスクリプトを実行可能にする

  4. 3つのアイコン。それぞれを右クリックして、2つのスクリプトとともに(正確に)保存します。

    ここに画像の説明を入力してください <- green.png

    ここに画像の説明を入力してください <- red.png

    ここに画像の説明を入力してください<- grey.png

  5. それでおしまい。次のコマンドでインジケーターをテスト実行します:

    python3 /path/to/nonotif_indicator.py

    通知のオン/オフを切り替えます

ランチャー

インジケーター付きのランチャーが必要な場合:

ここに画像の説明を入力してください

  • 以下のアイコンをコピーして、名前を付けて保存しますnonotificon.png

    ここに画像の説明を入力してください

  • 以下のコードを空のファイルにコピーします。

    [Desktop Entry]
    Type=Application
    Name=No Notifications
    Exec=python3 /path/to/nonotif_indicator.py
    Icon=/path/to/nonotificon.png
    Type=Application
  • 行を編集します。

    Exec=python3 /path/to/nonotif_indicator.py

    そして

    Icon=/path/to/nonotificon.png

    実際のパスによると、としてファイルを保存nonotif.desktop~/.local/share/applications

スタートアップアプリケーションにインジケーターを追加します

インジケータをスタートアップアプリケーションに追加できます:ダッシュ>スタートアップアプリケーション>追加。コマンドを追加します。

/bin/bash -c "sleep 15 && python3 /path/to/nonotif_indicator.py"

あなたが素晴らしいです!:
ファビー

彼は@Fabby @
ジェイコブVlijm

さらに別の素晴らしいスクリプト、ジェイコブ!アイデア:スクリプトは、notify-osd通知と一緒に行われる音声通知もブロックできますか?
-orschiro

@orschiroありがとう!これらのnotify-osd通知もありますか?参照している通知がわからない。
ジェイコブVlijm 16

1
@RobertOrzannaは、バージョン1.0で変更されたものの1つです:)
ジェイコブVlijm

11

前書き

以下のスクリプトを使用すると、画面に表示される通知をミュートできます。-mミュートとミュート-u解除の2つの基本オプションがあります。両方が一緒に配置されます.desktopランチャーとして機能ファイルにます。

いつ -m使用される、通知、OSDが遮断される前に最終的な通知を送信します。実行中のスクリプトの別のインスタンスがある場合は、スクリプトが既にそのジョブを実行していることをユーザーに通知するグラフィカルなポップアップが表示されます。

と呼ばれたとき -uオプションで、スクリプトは通知のブロックを停止し、通知を表示して確認します。スクリプトの以前のインスタンスが実行されていない場合、ユーザーには現在何もブロックされていないことが通知されます。

スクリプトソース

スクリプトのソースはこちらから入手できます。最新のバージョンについては、私のgithubでいつでも見つけることができます。を使用してgitをインストールしsudo apt-get install git、リポジトリ全体を複製するgit clone https://github.com/SergKolo/sergrep.gitか、または使用できます

wget https://raw.githubusercontent.com/SergKolo/sergrep/master/notify-block.sh  && chmod +x notify-block.sh

スクリプト自体を取得します。

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com 
# Date: May 10th 2016
# Purpose: Notification blocker for Ubuntu
# Written for: 
# Tested on:  Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo ,2016 
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

ARGV0="$0"
ARGC=$#

mute_notifications()
{ 

  self=${ARGV0##*/}
  CHECK_PID_NUMS=$(pgrep -f  "$self -m" | wc -l )
  if [ "$CHECK_PID_NUMS" -gt 2 ]; then
     zenity --info --text "Notifications already disabled"
     exit 0
  else  
     killall notify-osd 2> /dev/null # ensure we have PID
     notify-send 'All notifications will be muted after this one' 
     sleep 1
     while true 
     do 
        PID=$(pgrep notify-osd)
        [  "x$PID" != "x" ]  && 
        kill -TERM $PID 
        sleep 0.25
     done
  fi
}

unmute()
{
  echo $0
  self=${0##*/}

  MUTE_PID=$(pgrep -f  "$self -m" ) #match self with -m option
  if [ "x$MUTE_PID" != "x"   ];then
     kill -TERM "$MUTE_PID" &&
     sleep 1 && # ensure the previous process exits
     notify-send "UNMUTED"
     exit 0
  else 
     notify-send "NOTIFICATIONS ALREADY UNMUTED"
     exit 0
  fi  
}

print_usage()
{
  cat > /dev/stderr <<EOF
  usage: notify-block.sh [-m|-u]
EOF
exit 1
}
main()
{
  [ $# -eq 0  ] && print_usage

  while getopts "mu" options
  do

     case ${options} in
          m) mute_notifications & ;;
          u) unmute ;;
          \?) print_usage ;;
     esac

  done
}
main "$@"

.desktopショートカットテンプレート

これは私が個人的に使用しているものの単なる例です。Exec=環境内のスクリプトへの適切なパスで各行を置き換えます。もちろん、あなたIcon=も変更する必要があります。できれば、このファイルを~/.local/share/applicationsフォルダーに保管してください

[Desktop Entry]
Name=Notification Blocker
Comment=blocks any on-screen notifications
Terminal=false
Actions=Mute;Unmute
Type=Application
Exec=/home/xieerqi/sergrep/notify-block.sh -m
Icon=/home/xieerqi/Desktop/no-notif2.png

[Desktop Action Mute]
Name=Mute Notifications
Exec=/home/xieerqi/sergrep/notify-block.sh -m
Terminal=false

[Desktop Action Unmute]
Name=Unmute Notifications
Exec=/home/xieerqi/sergrep/notify-block.sh -u
Terminal=false

スクリーンショット

image1

ランチャーにロックされたショートカットファイル

ここに画像の説明を入力してください

ミュート前の最終通知


ミュートを解除するのに問題があるようです。
ラムダ

いいえ、unmutingオプションはまさにそれを行い、前のプロセスインスタンスを強制終了します。何が起こっているのですか?
セルギーKolodyazhnyy

メッセージは発生しません。ミュートできますが、ミュート解除ボタンを押すことでミュートを解除できません。–
ラムダ

@Lamda OK、unmute関数内で、行のset -x後に追加しecho $0てプログラムをターミナルで実行してください。特定の出力が表示されます。それをpaste.ubuntu.comにコピーして貼り付け、ここにコメントでその貼り付けへのリンクを提供します。ありがとう
Sergiy Kolodyazhnyy

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.