Existe uma opção de não perturbe para ocultar temporariamente notificações, como em macbooks?

13

Existe o "modo não perturbe", como acontece com o dispositivo OSX, onde você pode decidir quando a notificação pode incomodá-lo ou não ..

Acabei de instalar o chrome, e geralmente recebo spam de textos em grupo e outras notificações, o que pode ser irritante quando tento trabalhar. No meu macbook eu tenho a opção de ativar o "Do no disturb" que silencia toda a forma de notação .. Existe algo assim para o Ubuntu?

    
por Lamda 09.05.2016 / 21:39

2 respostas

9

1. Atualização principal

Acabou de terminar uma versão completamente reescrita do indicador (0.9.0). As opções agora incluem:

  • suprimindo somente notificações, contendo strings específicas
  • suprimindo (silenciando) o som
  • registro de notificações perdidas
  • em execução na inicialização
  • lembrando do último estado (suprimindo ou não) na próxima execução

Além disso, muitas melhorias na interface e no comportamento.

Ainstalaçãoestáinalterada(ppa):

sudoapt-add-repositoryppa:vlijm/nonotifssudoapt-getupdatesudoapt-getinstallnonotifs

2.Respostaantiga(er)

Indicadorparasilenciar/mostrarnotificações

Comoindicadorabaixo,vocêpodeoptarpordesativartemporariamenteasnotificações:

oumostrarnotificações:

Comofunciona

Otruqueéumcomandosimples,usandodbus-monitorparainterceptaraspróximasnotificaçõesepará-lasantesqueelasapareçam.
Oindicadoréum"wrapper" de fácil utilização para ativar e desativar.

Como configurar

Como por agora ( para Trusty, Vivid, Wily, Xenial ):

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

Isso será instalado globalmente (incluindo o inicializador). A instalação via ppa é preferida, pois mantém a versão mais recente e é atualizada regularmente.
O indicador aparecerá no Dash como NoNotifications

Se você instalar pelo ppa, mas instalado manualmente a partir de baixo, execute rm ~/.local/share/applications/nonotif.desktop primeiro para remover o arquivo .desktop local.

Ou manualmente:

A solução existe de vários itens que você precisa armazenar juntos em um único diretório.

  1. Crie um diretório ou pasta (pode estar em qualquer lugar em seu diretório pessoal, por exemplo)
  2. O indicador: Copie o script abaixo em um arquivo vazio, salve-o como 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. O script dbus-monitor ; salve-o (exatamente) como nonotifs.sh em um único diretório e como o primeiro script:

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

    Torne este script executável

  4. Três ícones; clique com o botão direito em cada um deles e salve-os junto com os dois scripts como (exatamente):

    <-green.png

    <-red.png

    <-grey.png

  5. Éisso.Agorateste-executeoindicadorcomocomando:

    python3/path/to/nonotif_indicator.py

    emudeasnotificaçõesem/de

Lançador

Casovocêqueiraumlançadorcomoindicador:

  • Copieoíconeabaixoesalve-ocomononotificon.png:

  • Copieocódigoabaixoemumarquivovazio:

    [Desktop Entry] Type=Application Name=No Notifications Exec=python3 /path/to/nonotif_indicator.py Icon=/path/to/nonotificon.png Type=Application
  • Edite as linhas:

    Exec=python3 /path/to/nonotif_indicator.py
    

    e

    Icon=/path/to/nonotificon.png
    

    de acordo com os caminhos reais e salve o arquivo como nonotif.desktop em ~/.local/share/applications

Adicione o indicador aos aplicativos de inicialização

Você pode adicionar o indicador a Startup Applications: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

/bin/bash -c "sleep 15 && python3 /path/to/nonotif_indicator.py"
    
por Jacob Vlijm 11.05.2016 / 18:00
11

Introdução

O script abaixo permite que quaisquer notificações não sejam exibidas na tela. Existem duas opções básicas -m para mudo e -u para ativar o som. Ambos são reunidos em um arquivo .desktop para servir como um lançador.

Quando -m é usado, o notify-osd enviará uma notificação final antes de ser bloqueado. Se houver outra instância do script em execução, ela mostrará um pop-up gráfico que informará ao usuário que o script já está realizando seu trabalho.

Quando chamado com a opção -u , o script deixará de bloquear as notificações e confirmará isso mostrando uma. Se nenhuma instância anterior do script estiver em execução, o usuário será notificado de que nada está bloqueado no momento.

Origem do script

A fonte do script está disponível aqui. Para obter uma versão mais atualizada, você pode encontrá-lo sempre no meu github . Você pode instalar o git com sudo apt-get install git e clonar todo o repositório com git clone https://github.com/SergKolo/sergrep.git ou usar

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

para obter apenas o script em si.

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

modelo de atalho do .desktop

Este é apenas um exemplo do que eu pessoalmente uso. Substitua cada linha Exec= pelo caminho apropriado para o script em seu ambiente. É claro que seu Icon= terá que ser alterado também. De preferência, mantenha este arquivo na sua pasta ~/.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

Screenshots

Oarquivodeatalhobloqueadoparaoiniciador

Notificação final antes de silenciar

    
por Sergiy Kolodyazhnyy 09.05.2016 / 23:12