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

13

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

Je viens d'installer Chrome, et je suis généralement spammé par les textes de groupe et autres notifications, ce qui peut être ennuyeux lorsque j'essaie de travailler .. Sur mon macbook, j'ai la possibilité d'activer "Ne pas déranger" qui coupe toute forme de notification .. Existe-t-il quelque chose comme ça pour Ubuntu?

Lamda
la source
Il existe une option pour Firefox, mais je ne suis pas un utilisateur de Chrome, donc je ne peux pas en parler
Sergiy Kolodyazhnyy
Le problème n'est pas spécifique à Chrome, mais les notifications en général ..
Lamda
2
Avoir développé un script. Jusqu'à présent, c'est sur mon github: github.com/SergKolo/sergrep/blob/master/notify-block.sh Je mettrai à jour ma réponse dès que j'aurai le temps aujourd'hui. Inclura également un joli raccourci que vous pouvez épingler au lanceur
Sergiy Kolodyazhnyy
1
Réponse modifiée, veuillez vérifier. Faites-moi savoir s'il y a des fonctionnalités supplémentaires que vous souhaitez que j'ajoute
Sergiy Kolodyazhnyy

Réponses:

9

1. Mise à jour majeure

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

  • suppression uniquement des notifications, contenant des chaînes spécifiques
  • suppression (coupure) du son
  • journalisation des notifications manquées
  • en cours de 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.

entrez la description de l'image ici entrez la description de l'image ici

L'installation est inchangée (ppa):

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

2. Ancienne (er) réponse

Indicateur pour couper / afficher les notifications

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

entrez la description de l'image ici

ou afficher les notifications:

entrez la description de l'image ici

Comment ça fonctionne

L'astuce est une commande simple, utilisée dbus-monitorpour intercepter les notifications à venir et les arrêter avant qu'elles n'apparaissent.
L'indicateur est un "wrapper" convivial pour l'activer et le désactiver.

Comment installer


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

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

Cela s'installera globalement (y compris le lanceur). L'installation via ppa est préférable, car elle maintient la dernière version et est régulièrement mise à jour.
L'indicateur apparaîtra dans Dash comme NoNotifications

Si vous installez par le ppa, mais précédemment installé manuellement par le bas, veuillez d' rm ~/.local/share/applications/nonotif.desktopabord exécuter pour supprimer le .desktopfichier local .


Ou manuellement:

La solution existe d'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 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 dbus-monitorscript; enregistrez-le (exactement) comme nonotifs.sh dans un seul et même répertoire que le premier script:

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

    Rendre ce script exécutable

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

    entrez la description de l'image ici <- green.png

    entrez la description de l'image ici <- red.png

    entrez la description de l'image ici<- 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

Si vous souhaitez un lanceur avec l'indicateur:

entrez la description de l'image ici

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

    entrez la description de l'image ici

  • 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
  • Modifiez les lignes:

    Exec=python3 /path/to/nonotif_indicator.py

    et

    Icon=/path/to/nonotificon.png

    en fonction des chemins réels, et enregistrez le fichier comme nonotif.desktopdans~/.local/share/applications

Ajouter l'indicateur aux applications de démarrage

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

/bin/bash -c "sleep 15 && python3 /path/to/nonotif_indicator.py"
Jacob Vlijm
la source
Tu es incroyable! :-)
Fabby
Il @Fabby tellement ravi de vous voir autour!
Jacob Vlijm
Encore un autre grand script, Jacob! Idée: le script peut-il également bloquer les notifications audio qui vont de pair avec celles notifiées par osd?
orschiro
@orschiro merci! S'agit-il également de notifications OSD? Je ne sais pas à quelles notifications vous faites référence.
Jacob Vlijm
1
@RobertOrzanna qui est l'une des choses qui a changé dans la version 1.0 :)
Jacob Vlijm
11

introduction

Le script ci-dessous permet de couper toutes les notifications d'apparaître à l'écran. Il existe deux options de base -mpour désactiver et -uréactiver le son. Les deux sont regroupés dans un .desktopfichier pour servir de lanceur.

Quand -mest utilisé, le notifier-osd enverra une notification finale avant d'être bloqué. S'il y a une autre instance de script en cours d'exécution, il affichera une fenêtre contextuelle graphique qui informera un utilisateur que le script fait déjà son travail.

Lorsqu'il est appelé avec -uoption, le script arrêtera de bloquer les notifications et le confirmera en en affichant une. Si aucune instance précédente de script n'est en cours d'exécution, l'utilisateur sera informé que rien n'est bloqué pour le moment.

Source de script

La source du script est disponible ici. Pour une version plus à jour, vous pouvez toujours le trouver sur mon github . Vous pouvez installer git avec sudo apt-get install gitet cloner l'ensemble du référentiel avec git clone https://github.com/SergKolo/sergrep.gitou utiliser

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

pour obtenir juste 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 Exec=ligne par le chemin d'accès approprié au script dans votre environnement. Bien sûr, vous Icon=devrez également changer. De préférence, conservez ce fichier dans votre ~/.local/share/applicationsdossier

[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é sur le lanceur

entrez la description de l'image ici

Notification finale avant l'inhibition

Sergiy Kolodyazhnyy
la source
Je semble avoir des problèmes pour le réactiver? .. Dois-je tuer manuellement le processus à chaque fois ou?
Lamda
Non, l'option de suppression du son fait exactement cela, tue l'instance de processus précédente. Quel est exactement le problème qui se produit?
Sergiy Kolodyazhnyy
Aucun message, ne se produit. Je peux couper le son, mais pas unmute en appuyant sur la unmute buttom ..
Lamda
@ Lamda OK, à l'intérieur de la unmutefonction, pouvez-vous s'il vous plaît ajouter set -xaprès la echo $0ligne et exécuter le programme dans le terminal? Il affichera certaines sorties. Copiez et collez cela sur paste.ubuntu.com et fournissez un lien vers cette pâte dans les commentaires ici. Merci
Sergiy Kolodyazhnyy