Esiste un'opzione "non disturbare" per nascondere temporaneamente le notifiche, come nei macbook?


13

Esiste la "modalità Non disturbare" come per il dispositivo OSX, dove puoi decidere quando la notifica può disturbarti o no.

Ho appena installato Chrome e di solito vengo spammato da messaggi di gruppo e altre notifiche, il che può essere fastidioso quando provo a lavorare .. Sul mio macbook ho la possibilità di attivare "Non disturbare" che disattiva tutte le forme di notifica. Esiste qualcosa del genere per Ubuntu?


C'è un'opzione per Firefox, ma io non sono un utente Chrome, quindi non posso dirlo
Sergiy Kolodyazhnyy

Il problema non è specifico di Chrome, ma le notifiche in generale ..
Lamda


2
Ho sviluppato una sceneggiatura. Finora è sul mio github: github.com/SergKolo/sergrep/blob/master/notify-block.sh Aggiornerò la mia risposta non appena avrò tempo oggi. Includerà anche una bella scorciatoia che puoi aggiungere al programma di avvio
Sergiy Kolodyazhnyy,

1
Risposta modificata, si prega di rivedere. Fammi sapere se ci sono funzionalità aggiuntive che vuoi che io aggiunga
Sergiy Kolodyazhnyy,

Risposte:


9

1. Aggiornamento importante

Ho appena finito una versione completamente riscritta dell'indicatore (0.9.0). Le opzioni ora includono:

  • sopprimendo solo le notifiche, contenenti stringhe specifiche
  • soppressione del suono (silenziamento)
  • registrazione delle notifiche perse
  • in esecuzione all'avvio
  • ricordando l'ultimo stato (sopprimendo o meno) alla prossima corsa

Inoltre molti, molti miglioramenti su interfaccia e comportamento.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

L'installazione è invariata (ppa):

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

2. Vecchia (er) risposta

Indicatore per disattivare / mostrare le notifiche

Con l'indicatore in basso, puoi scegliere di disattivare temporaneamente le notifiche:

inserisci qui la descrizione dell'immagine

o mostra le notifiche:

inserisci qui la descrizione dell'immagine

Come funziona

Il trucco è un semplice comando, che utilizza dbus-monitorper intercettare le notifiche in arrivo e fermarle prima che appaiano.
L'indicatore è un "wrapper" intuitivo per attivarlo e disattivarlo.

Come impostare


Per ora ( per Trusty, Vivid, Wily, Xenial ):

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

Questo verrà installato a livello globale (incluso il programma di avvio). L'installazione tramite ppa è preferita, poiché mantiene l'ultima versione e viene regolarmente aggiornata.
L'indicatore verrà visualizzato in Dash come Nessuna notifica

Se si installa da ppa, ma precedentemente installato manualmente dal basso, eseguire rm ~/.local/share/applications/nonotif.desktopprima per rimuovere il .desktopfile locale .


O manualmente:

La soluzione esiste per un numero di elementi che è sufficiente archiviare insieme nella stessa directory.

  1. Crea una directory o cartella (può trovarsi ovunque nella tua home directory, ad es.)
  2. L'indicatore: copia lo script seguente in un file vuoto, salvalo come 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. La dbus-monitorsceneggiatura; salvalo (esattamente) come nonotifs.sh nella stessa directory del primo script:

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

    Rendi eseguibile questo script

  4. Tre icone; fare clic con il tasto destro su ciascuno di essi e salvarli insieme ai due script come (esattamente):

    inserisci qui la descrizione dell'immagine <- green.png

    inserisci qui la descrizione dell'immagine <- red.png

    inserisci qui la descrizione dell'immagine<- grey.png

  5. Questo è tutto. Ora prova a eseguire l'indicatore con il comando:

    python3 /path/to/nonotif_indicator.py

    e attiva / disattiva le notifiche

Launcher

Nel caso in cui desideri un lanciatore con l'indicatore:

inserisci qui la descrizione dell'immagine

  • Copia l'icona qui sotto, salvala come nonotificon.png:

    inserisci qui la descrizione dell'immagine

  • Copia il codice qui sotto in un file vuoto:

    [Desktop Entry]
    Type=Application
    Name=No Notifications
    Exec=python3 /path/to/nonotif_indicator.py
    Icon=/path/to/nonotificon.png
    Type=Application
  • Modifica le linee:

    Exec=python3 /path/to/nonotif_indicator.py

    e

    Icon=/path/to/nonotificon.png

    in base ai percorsi effettivi e salvare il file come nonotif.desktopin~/.local/share/applications

Aggiungi l'indicatore alle applicazioni di avvio

È possibile aggiungere l'indicatore alle applicazioni di avvio: Dash> Applicazioni di avvio> Aggiungi. Aggiungi il comando:

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

Sei incredibile! :-)
Fabby,

Lui @Fabby è così bello vederti in giro!
Jacob Vlijm,

Ancora un altro grande copione, Jacob! Idea: lo script può anche bloccare le notifiche audio associate a quelle di notifica-osd?
Orschiro,

@orschiro grazie! Sono anche quelle notifiche di notifica-osd? Non sei sicuro di quali notifiche ti riferisci.
Jacob Vlijm,

1
@RobertOrzanna che è una delle cose che è cambiata nella versione 1.0 :)
Jacob Vlijm,

11

introduzione

Il muggito dello script consente di silenziare eventuali notifiche sullo schermo. Esistono due opzioni di base per disattivare l'audio -me -udisattivare l'audio. Entrambi sono messi insieme in un .desktopfile per fungere da lanciatore.

Quando -mviene utilizzato, notification-osd invierà una notifica finale prima di essere bloccato. Se esiste un'altra istanza di script in esecuzione, mostrerà un popup grafico che informerà un utente che lo script sta già facendo il suo lavoro.

Quando chiamato con -u opzione, lo script smetterà di bloccare le notifiche e lo confermerà mostrandone una. Se non è in esecuzione alcuna istanza precedente di script, l'utente verrà avvisato che nulla è bloccato in questo momento.

Fonte dello script

La fonte dello script è disponibile qui. Per una versione più aggiornata puoi sempre trovarla sul mio github . Puoi installare git con sudo apt-get install gite clonare l'intero repository git clone https://github.com/SergKolo/sergrep.gito usarlo

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

per ottenere solo la sceneggiatura stessa.

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

Modello di collegamento .desktop

Questo è solo un esempio di ciò che uso personalmente. Sostituisci ogni Exec=riga con il percorso appropriato per lo script nel tuo ambiente. Ovviamente anche la tua Icon=dovrà essere cambiata. Preferibilmente, tieni questo file nella tua ~/.local/share/applicationscartella

[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

Screenshots

image1

Il file di collegamento bloccato al programma di avvio

inserisci qui la descrizione dell'immagine

Notifica finale prima del silenziamento


Mi sembra di avere problemi a riattivarlo? .. Dovrei interrompere manualmente il processo ogni volta o?
Lamda,

No, l'opzione di riattivazione non fa esattamente questo, uccide l'istanza di processo precedente. Qual è esattamente il problema che sta accadendo?
Sergiy Kolodyazhnyy,

Nessun messaggio, si verifica. Posso silenziare, ma non riattivare premendo il pulsante di riattivazione.
Lamda,

@Lamda OK, all'interno della unmutefunzione, puoi aggiungere set -xdopo la echo $0riga ed eseguire il programma nel terminale? Verrà visualizzato un determinato output. Copialo e incollalo su paste.ubuntu.com e fornisci il link per incollarlo nei commenti qui. Grazie
Sergiy Kolodyazhnyy,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.