web-dev-qa-db-fra.com

Existe-t-il une option "ne pas déranger" pour masquer temporairement les notifications, comme sur les macbooks?

Existe-t-il un mode "Ne pas déranger" comme pour les appareils OSX, où vous pouvez décider quand une notification peut vous déranger, ou non.

Je viens d'installer Chrome et je suis habituellement spammé par des textes de groupe et d'autres notifications, ce qui peut être gênant lorsque j'essaie de travailler. Sur mon macbook, j'ai la possibilité d'activer "Ne pas déranger", qui coupe toutes les notifications. Est-ce que quelque chose comme ça existe pour Ubuntu?

13
Lamda

1. Mise à jour majeure

Je viens de terminer une version complètement réécrite de l'indicateur (0.9.0). Les options incluent maintenant:

  • supprimer uniquement les notifications contenant des chaînes spécifiques
  • suppression du son
  • journalisation des notifications manquées
  • en cours d'exécution au démarrage
  • se souvenir du dernier état (suppression ou non) lors de la prochaine exécution

En outre, de nombreuses améliorations sur l'interface et le comportement.

enter image description hereenter image description here

L'installation est inchangée (ppa):

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

2. Ancienne réponse

Indicateur pour désactiver/afficher les notifications

Avec l'indicateur ci-dessous, vous pouvez choisir de désactiver temporairement les notifications:

enter image description here

ou afficher les notifications:

enter image description here

Comment ça fonctionne

Le truc est une commande simple, en utilisant dbus-monitor pour intercepter les notifications à venir et les arrêter avant qu'elles n'apparaissent.
L’indicateur est un "wrapper" convivial permettant de l’activer et de le désactiver.

Comment mettre en place


Selon maintenant ( pour Trusty, Vivid, Wily, Xenial ):

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

Cela installera globalement (y compris le lanceur). L'installation via ppa est préférable, car elle conserve la dernière version et est régulièrement mise à jour.
L’indicateur apparaîtra au tableau de bord sous la forme NoNotifications

Si vous effectuez l’installation à l’aide du ppa, mais que vous l’aviez précédemment installée manuellement, exécutez d’abord rm ~/.local/share/applications/nonotif.desktop pour supprimer le fichier local .desktop.


ou manuellement:

La solution consiste en un certain nombre d'éléments que vous devez simplement stocker ensemble dans un seul et même répertoire.

  1. Créez un répertoire ou un dossier (peut être n'importe où dans votre répertoire personnel, par exemple)
  2. L'indicateur: Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom 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. Le script dbus-monitor; enregistrez-le (exactement) sous le nom nonotifs.sh dans un seul et même répertoire en tant que premier scénario:

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

    Rend ce script exécutable

  4. Trois icônes; faites un clic droit sur chacun d’eux et sauvegardez-les avec les deux scripts comme (exactement):

    enter image description here <- green.png

    enter image description here <- red.png

    enter image description here <- grey.png

  5. C'est ça. Testez maintenant l'indicateur avec la commande:

    python3 /path/to/nonotif_indicator.py
    

    et activer/désactiver les notifications

Lanceur

Au cas où vous souhaiteriez un lanceur avec l'indicateur:

enter image description here

  • Copiez l'icône ci-dessous, enregistrez-la sous le nom nonotificon.png:

    enter image description here

  • Copiez le code ci-dessous dans un fichier vide:

    [Desktop Entry]
    Type=Application
    Name=No Notifications
    Exec=python3 /path/to/nonotif_indicator.py
    Icon=/path/to/nonotificon.png
    Type=Application
    
  • Editez les lignes:

    Exec=python3 /path/to/nonotif_indicator.py
    

    et

    Icon=/path/to/nonotificon.png
    

    en fonction des chemins d'accès réels et enregistrez le fichier sous le nom nonotif.desktop dans ~/.local/share/applications

Ajouter l'indicateur aux applications de démarrage

Vous pouvez ajouter l'indicateur à Applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:

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

Introduction

Le script ci-dessous permet de désactiver toutes les notifications apparaissant à l'écran. Il existe deux options de base -m pour le son muet et -u pour le son muet. Les deux sont rassemblés dans un fichier .desktop pour servir de lanceur.

Lorsque -m est utilisé, notify-osd enverra une notification finale avant d'être bloqué. Si une autre instance de script est en cours d'exécution, une fenêtre contextuelle graphique informera l'utilisateur que le script fait déjà son travail.

Lorsqu'il est appelé avec l'option -u, le script cesse de bloquer les notifications et le confirme en en affichant une. Si aucune instance précédente de script n'est en cours d'exécution, l'utilisateur sera averti que rien n'est bloqué pour le moment.

Source du script

La source du script est disponible ici. Pour une version plus récente, vous pouvez toujours la trouver sur mon github . Vous pouvez installer git avec Sudo apt-get install git et cloner l'intégralité du référentiel avec git clone https://github.com/SergKolo/sergrep.git ou utiliser

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

pour obtenir uniquement le script lui-même.

#!/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 "$@"

modèle de raccourci .desktop

Ceci est juste un exemple de ce que j'utilise personnellement. Remplacez chaque ligne Exec= par le chemin d'accès approprié au script dans votre environnement. Bien sûr, votre Icon= devra également être changé. De préférence, conservez ce fichier dans votre dossier ~/.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

Captures d'écran

image1

Le fichier de raccourci verrouillé au lanceur

enter image description here

Notification finale avant la mise en sourdine

11