Apakah ada opsi "jangan ganggu" untuk menyembunyikan pemberitahuan sementara, seperti pada macbook?


13

Apakah ada "Jangan ganggu mode" seperti halnya untuk perangkat OSX, di mana Anda dapat memutuskan kapan pemberitahuan dapat mengganggu Anda, atau tidak ..

Saya baru saja menginstal chrome, dan saya biasanya mendapatkan spam oleh teks grup dan pemberitahuan lainnya, yang dapat mengganggu ketika saya mencoba bekerja .. Di macbook saya, saya memiliki opsi untuk mengaktifkan "Jangan ganggu" yang membisukan semua bentuk pemberitahuan .. Apakah ada yang seperti itu untuk Ubuntu?


Ada opsi untuk firefox, tapi saya bukan pengguna chrome jadi tidak bisa mengetahuinya
Sergiy Kolodyazhnyy

Masalahnya bukan khusus chrome, tetapi pemberitahuan secara umum ..
Lamda


2
Telah mengembangkan skrip. Sejauh ini ada di github saya: github.com/SergKolo/sergrep/blob/master/notify-block.sh Saya akan memperbarui jawaban saya segera setelah saya punya waktu hari ini. Juga akan menyertakan pintasan bagus yang bisa Anda pin ke peluncur
Sergiy Kolodyazhnyy

1
Jawaban diedit, silakan tinjau. Beritahu saya jika ada fitur tambahan yang ingin Anda tambahkan
Sergiy Kolodyazhnyy

Jawaban:


9

1. Pembaruan utama

Baru saja menyelesaikan versi indikator yang ditulis ulang sepenuhnya (0.9.0). Opsi sekarang termasuk:

  • menekan hanya pemberitahuan, yang berisi string tertentu
  • menekan (mematikan) suara
  • mencatat pemberitahuan yang terlewat
  • berjalan saat startup
  • mengingat status terakhir (menekan atau tidak) pada proses selanjutnya

Selanjutnya banyak, banyak perbaikan pada antarmuka dan perilaku.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Pemasangan tidak berubah (ppa):

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

2. Jawaban lama (er)

Indikator untuk membisukan / menampilkan notifikasi

Dengan indikator di bawah ini, Anda dapat memilih untuk menonaktifkan pemberitahuan sementara:

masukkan deskripsi gambar di sini

atau tampilkan pemberitahuan:

masukkan deskripsi gambar di sini

Bagaimana itu bekerja

Caranya adalah perintah sederhana, gunakan dbus-monitoruntuk mencegat pemberitahuan yang akan datang dan menghentikannya sebelum muncul.
Indikatornya adalah "pembungkus" yang mudah digunakan untuk menghidupkan dan mematikannya.

Cara mengatur


Sesuai sekarang ( untuk Trusty, Vivid, Wily, Xenial ):

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

Ini akan dipasang secara global (termasuk peluncur). Menginstal melalui ppa lebih disukai, karena mempertahankan versi terbaru, dan diperbarui secara berkala.
Indikator akan muncul di Dash sebagai NoNotifications

Jika Anda menginstal dengan ppa, tetapi sebelumnya diinstal secara manual dari bawah, jalankan rm ~/.local/share/applications/nonotif.desktopterlebih dahulu untuk menghapus .desktopfile lokal .


Atau secara manual:

Solusinya ada dari sejumlah item yang hanya perlu Anda simpan bersama dalam satu dan direktori yang sama.

  1. Buat direktori atau folder (bisa di mana saja di direktori home Anda misalnya)
  2. Indikator: Salin skrip di bawah ini ke file kosong, simpan sebagai 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. The dbus-monitorScript; simpan (persis) seperti nonotifs.sh dalam satu dan direktori yang sama dengan skrip pertama:

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

    Jadikan skrip ini dapat dieksekusi

  4. Tiga ikon; klik kanan pada masing-masing dan simpan bersama dengan dua skrip sebagai (persis):

    masukkan deskripsi gambar di sini <- green.png

    masukkan deskripsi gambar di sini <- red.png

    masukkan deskripsi gambar di sini<- grey.png

  5. Itu dia. Sekarang uji coba indikator dengan perintah:

    python3 /path/to/nonotif_indicator.py

    dan aktifkan notifikasi pada / dari

Peluncur

Jika Anda ingin peluncur dengan indikator:

masukkan deskripsi gambar di sini

  • Salin ikon di bawah ini, simpan sebagai nonotificon.png:

    masukkan deskripsi gambar di sini

  • Salin kode di bawah ini ke file kosong:

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

    Exec=python3 /path/to/nonotif_indicator.py

    dan

    Icon=/path/to/nonotificon.png

    sesuai dengan jalur yang sebenarnya, dan simpan file seperti nonotif.desktoppada~/.local/share/applications

Tambahkan indikator ke Aplikasi Startup

Anda dapat menambahkan indikator ke Aplikasi Startup: Dash> Startup Applications> Add. Tambahkan perintah:

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

Anda menakjubkan! :-)
Fabby

Dia @Fabby senang melihatmu!
Jacob Vlijm

Namun naskah hebat lainnya, Yakub! Ide: Bisakah skrip juga memblokir notifikasi audio yang sejalan dengan notify-osd?
orschiro

@orschiro terima kasih! Apakah itu notifikasi-osd notifikasi juga? Tidak yakin pemberitahuan apa yang Anda maksud.
Jacob Vlijm

1
@RobertOrzanna itu adalah salah satu hal yang diubah dalam versi 1.0 :)
Jacob Vlijm

11

pengantar

Skrip di bawah memungkinkan mematikan pemberitahuan yang muncul di layar. Ada dua opsi dasar -muntuk bisu dan -uuntuk bersuara . Keduanya dimasukkan ke dalam .desktopfile untuk dijadikan peluncur.

Saat -mdigunakan, notify-osd akan mengirim pemberitahuan akhir sebelum diblokir. Jika ada contoh lain dari skrip berjalan, itu akan menampilkan popup grafis yang akan memberi tahu pengguna bahwa skrip sudah melakukan tugasnya.

Saat dipanggil dengan -uopsi, skrip akan berhenti memblokir notifikasi dan akan mengonfirmasi hal itu dengan menunjukkannya. Jika tidak ada skrip sebelumnya yang berjalan, pengguna akan diberi tahu bahwa saat ini tidak ada yang diblokir.

Sumber Skrip

Sumber skrip tersedia di sini. Untuk versi yang lebih baru, Anda selalu dapat menemukannya di github saya . Anda dapat menginstal git dengan sudo apt-get install gitdan mengkloning seluruh repositori dengan git clone https://github.com/SergKolo/sergrep.gitatau menggunakan

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

untuk mendapatkan hanya script itu sendiri.

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

templat pintasan .desktop

Ini hanyalah contoh dari apa yang saya gunakan secara pribadi. Ganti setiap Exec=baris dengan jalur yang sesuai ke skrip di lingkungan Anda. Tentu saja Anda Icon=harus diubah juga. Lebih disukai, simpan file ini di ~/.local/share/applicationsfolder Anda

[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

Tangkapan layar

image1

File pintasan terkunci ke peluncur

masukkan deskripsi gambar di sini

Pemberitahuan terakhir sebelum mematikan


Sepertinya saya punya masalah membunyikannya? .. Saya haruskah saya mematikan prosesnya secara manual setiap kali atau?
Lamda

Tidak, opsi unmuting melakukan hal itu, membunuh instance proses sebelumnya. Apa sebenarnya masalah yang terjadi?
Sergiy Kolodyazhnyy

Tidak ada pesan, terjadi. Saya dapat membisukan, tetapi tidak membisukan dengan menekan tombol yang tidak bersuara ..
Lamda

@Lamda OK, di dalam unmutefungsi, bisakah Anda menambahkan set -xsetelah echo $0baris dan menjalankan program di terminal? Ini akan menampilkan output tertentu. Salin dan tempel ke paste.ubuntu.com dan berikan tautan ke tempel itu di komentar di sini. Terima kasih
Sergiy Kolodyazhnyy

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.