web-dev-qa-db-ja.com

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

OSXデバイスの場合のように、「邪魔しないでください」モードが存在しますか?.

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

13
Lamda

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

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

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

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

enter image description hereenter image description here

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

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

2.古い(より)答え

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

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

enter image description here

または通知を表示:

enter image description here

使い方

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

設定方法


nowTrusty、Vivid、Wily、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.sh1つの同じディレクトリにとして保存します:

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

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

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

    enter image description here <-green.png

    enter image description here <-red.png

    enter image description here <-grey.png

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

    python3 /path/to/nonotif_indicator.py
    

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

ランチャー

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

enter image description here

  • 以下のアイコンをコピーして、nonotificon.pngとして保存します。

    enter image description here

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

    [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"
9
Jacob Vlijm

前書き

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

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

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

スクリプトソース

スクリプトのソースはこちらから入手できます。最新バージョンについては、常に github で見つけることができます。 Sudo apt-get install gitで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: [email protected] 
# 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

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

enter image description here

ミューティング前の最終通知

11