Bagaimana cara mengaktifkan / menonaktifkan Do Not Disturb from shell on Mavericks?

16

Saya ingin mengaktifkan Do Not Disturb di pusat notifikasi dengan pintasan keyboard.

Saya menggunakan BetterTouchTool untuk beberapa pintasan keyboard tambahan tetapi tidak mendukung pengaktifan / nonaktifkan notifikasi dalam opsi default.

Ini memiliki opsi untuk mengeksekusi perintah terminal jadi saya bertanya di sini cara mengaktifkan / menonaktifkan Do Not Disturb dari terminal?

Saya menemukan Jadwal 'Jangan Ganggu' Di OS X Mountain Lion With Automator dan saya mencoba menjalankan perintah tetapi sepertinya tidak berhasil.

Razvan
sumber
Karena Anda benar-benar bertanya tentang cara menyelesaikannya dari keyboard, bukan dari shell, Anda mungkin harus mengubah judul pertanyaan. Atau jika saya salah, mohon koreksi saya!
webmarc
Sebenarnya, sudahlah ... Saya tidak menyadari bahwa "betterTouchTool" memerlukan terminal untuk apa yang Anda inginkan.
webmarc
Saya terutama bertanya bagaimana melakukannya dari shell. Melakukannya dari preferensi sistem memecahkan kasus saya, tetapi lebih menyenangkan untuk mengetahui bagaimana melakukannya dari shell.
Razvan
Gotcha, saya memperbarui jawaban saya dengan info shell.
webmarc

Jawaban:

13

Anda bisa mengatur pintasan keyboard global untuknya di System Preferences -> Keyboard -> Shortcuts -> Mission Control

Atau jika Anda menginginkannya dari baris perintah, sebuah applescript untuk melakukan ini (dengan asumsi Anda mengatur pintasan keyboard untuk digunakan cmdshiftoptctrlD.

Perhatikan bahwa Anda masih HARUS mengatur perintah keyboard di System Preferences agar ini berfungsi.

Masukkan skrip di bawah ini ke dalam file, misalnya, ~ / dnd.applescript

ignoring application responses
    tell application "System Events" to keystroke "D" using {command down, shift down, option down, control down}
end ignoring

Sekarang Anda dapat menjalankan osascript ~/dnd.applescriptdari baris perintah untuk beralih pengaturan DND Anda.

Screencap: Modifikasi pintasan keyboard di System Preferences

webmarc
sumber
1
Sempurna! Terima kasih. Berharap ada cara yang lebih baik.
Will B
Lebih baik dalam hal apa?
webmarc
1
Tidak harus mengikat pintasan keyboard yang tidak jelas dan mengaktifkannya dengan osascript.
Will B
Kurasa aku bertanya apakah maksudmu lebih baik di "lebih efektif" atau lebih baik seperti di "lebih cantik di bawah selimut." Apakah ini keinginan praktis atau estetis?
webmarc
Hanya ingin tahu, saya juga tidak punya saran tambahan.
webmarc
17

Pada OS X 10.10.3, AppleScript ini akan beralih "Jangan Ganggu." Tidak diperlukan pintasan keyboard:

tell application "System Events" to tell process "SystemUIServer"
  key down option
  click menu bar item 1 of menu bar 2
  key up option
end tell

Anda dapat menyimpannya sebagai AppleScript dan menjalankannya dari terminal dengan osascript DoNotDisturb.applescript, atau Anda dapat memasukkannya dalam skrip Bash dengan membungkusnya dalam heredoc seperti:

#!/bin/bash
osascript <<EOD
  tell application "System Events" to tell process "SystemUIServer"
    key down option
    click menu bar item 1 of menu bar 2
    key up option
  end tell
EOD
James
sumber
6
Ini berarti Anda juga dapat beralih DoNotDisturbdengan mengeklik ubin paling kanan di bilah menu sambil menahan Optiontombol.
Razvan
2
Ini tidak lagi berfungsi pada Mojave. Applescript tampaknya mengklik item menu bar seolah-olah opsi tidak turun, meskipun itu
Dylanthepiguy
13

Anda dapat menyederhanakan jawaban yang disediakan razvanz dengan menggunakan -currentHostargumen ke perintah default.

Aktifkan Jangan Ganggu:

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb -boolean true
defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturbDate -date "`date -u +\"%Y-%m-%d %H:%M:%S +0000\"`"
killall NotificationCenter

(via https://heyfocus.com/blog/enabling-do-not-disturb-mode/ )

Nonaktifkan Jangan Ganggu:

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb -boolean false
killall NotificationCenter

Sekarang Anda dapat dengan mudah menyelesaikan ini sebagai skrip untuk mengaktifkan atau menonaktifkan "Jangan Ganggu" sebagai skrip yang akan berfungsi pada mesin siapa pun terlepas dari preferensi sistem. Berikut adalah contoh cara melakukannya:

#!/bin/bash

set -eou pipefail

# From https://heyfocus.com/enabling-do-not-disturb-mode and
# /apple/145487

if [[ $(defaults -currentHost read ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb) -eq 0 ]]; then
  defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb -boolean true
  defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturbDate -date "`date -u +\"%Y-%m-%d %H:%M:%S +000\"`"
  killall NotificationCenter
  echo "Do Not Disturb is enabled. Run $0 to turn it off (OS X will turn it off automatically tomorrow)."
else
  defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui doNotDisturb -boolean false
  killall NotificationCenter
  echo "Do Not Disturb is disabled. Run $0 to turn it on again."
fi

Sumber: https://gist.github.com/ryangreenberg/5267f68a8e7b07ea66370b4eb5580ab9

Ryan
sumber
2
Bug visual minor! [Tercatat untuk orang-orang yang melihat @ warna]: Saya mencoba ini dan ini agak berhasil. Saya menunda beberapa pemberitahuan selama 5 menit, dan kemudian menyalakan Do Not Disturb for Notifications, dan kemudian menjalankan perintah di bawah "Nonaktifkan Jangan Ganggu". Di satu sisi, ikon tetap berwarna abu-abu, tetapi di sisi lain, ikon itu tampaknya berfungsi sebaliknya - pemberitahuan muncul dalam beberapa menit. Tes kedua: Saya menyalakan Do Not Disturb for Notifications (tanpa menunda apa pun), & menjalankan perintah di bawah "Nonaktifkan Jangan Ganggu". Ikon tetap berwarna abu-abu, tetapi pemberitahuan muncul segera.
Matthew Elvey
1
@ MatthewElvey Itu mungkin perubahan dari Sierra ke High Sierra. Kami mungkin perlu menemukan cara baru untuk memuat ulang ikon menubar.
Ryan
1
+1 untuk perintah non-Applescript!
Matt
1
Dnd tampaknya tidak diubah pada sierra / mojave tinggi dengan solusi ini
Dylanthepiguy
8

Membangun berdasarkan jawaban dari James dan Zsolt, saya telah membuat beberapa skrip untuk menghidupkan atau mematikan (tidak mengaktifkan) status DND. Mereka juga tidak membutuhkan ikatan kunci atau GUID mesin untuk bekerja.

PENTING : Harap dicatat bahwa menjalankan skrip ini untuk pertama kalinya mungkin memerlukan izin aksesibilitas untuk aplikasi yang menjalankan skrip. Jika Anda tidak memberikan izin dalam permintaan, tombol alt/ optionakan tetap ditekan untuk sistem dan Anda harus keluar dan kembali untuk "membukanya". Ini juga berlaku untuk jawaban sebelumnya dengan AppleScript. Jika skrip diedit, izin harus dicabut dan diberikan kembali. Izin diberikan menggunakan:

System Preferences > Security & Privacy > Accessibility > Add your app

Untuk macOS Sierra dan High Sierra itu menu bar 1:

Hidupkan Do Not Disturb ON (menonaktifkan pemberitahuan):

if [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.*.plist | grep false) ]]; then
    osascript <<EOD
      tell application "System Events" to tell process "SystemUIServer"
        key down option
        click menu bar item 1 of menu bar 1
        key up option
      end tell
EOD
fi

Hidupkan Do Not Disturb OFF (mengaktifkan pemberitahuan):

if ! [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.*.plist | grep false) ]]; then
    osascript <<EOD
      tell application "System Events" to tell process "SystemUIServer"
        key down option
        click menu bar item 1 of menu bar 1
        key up option
      end tell
EOD
fi

Untuk versi macOS sebelumnya, itu menu bar 2:

Hidupkan Do Not Disturb ON (menonaktifkan pemberitahuan):

if [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.*.plist | grep false) ]]; then
    osascript <<EOD
      tell application "System Events" to tell process "SystemUIServer"
        key down option
        click menu bar item 1 of menu bar 2
        key up option
      end tell
EOD
fi

Hidupkan Do Not Disturb OFF (mengaktifkan pemberitahuan):

if ! [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.*.plist | grep false) ]]; then
    osascript <<EOD
      tell application "System Events" to tell process "SystemUIServer"
        key down option
        click menu bar item 1 of menu bar 2
        key up option
      end tell
EOD
fi
sv3k
sumber
1
Ini tidak lagi berfungsi pada Mojave. Applescript tampaknya mengklik item menu bar seolah-olah opsi tidak turun, meskipun itu
Dylanthepiguy
2

Jadwalkan Jangan Ganggu

Hanya untuk menambahkan bahwa Anda juga dapat menjadwalkan Jangan Ganggu dari baris perintah untuk mengaktifkan / menonaktifkan setiap hari pada waktu yang ditentukan.

Untuk mengatur waktu kapan DND akan diaktifkan :

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndStart -integer <start_time_in_minutes>

Untuk mengatur waktu kapan DND akan dinonaktifkan :

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndEnd -integer <end_time_in_minutes>

CATATAN: ganti<start_time_in_minutes>dan<end_time_in_minutes>dengan nilai yang diinginkan (dijelaskan di bawah).


Contoh:

Untuk menjadwalkan DND mulai setiap hari pada pukul 15:00 dan berakhir pada pukul 18:30, lakukan hal berikut:

Konversi 15:00 dan 18:30 menjadi beberapa menit untuk mendapatkan nilai <start_time_in_minutes>dan <end_time_in_minutes>. Artinya, kalikan jumlah jam dengan 60 dan tambahkan jumlah menit.

Untuk 15:00 yang akan: 15 * 60 + 0 = 900dan untuk 18:30 yang akan: 18 * 60 + 30 = 1110. Memberi kami perintah di bawah ini:

defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndStart -integer 900
defaults -currentHost write ~/Library/Preferences/ByHost/com.apple.notificationcenterui dndEnd -integer 1110
killall NotificationCenter # 'resets' Notificatio Center so that it reads the DND change
Z0B
sumber
1

Membangun dari jawaban James, saya juga ingin menunjukkan bahwa Anda juga dapat menentukan apakah itu dihidupkan atau dimatikan. Jadi yang berikut mematikannya, dan tidak melakukan apa-apa jika sudah mati:

if [[ $(plutil -convert xml1 -o - ~/Library/Preferences/ByHost/com.apple.notificationcenterui.000-000-000-000.plist | grep false) ]]; then
    osascript <<EOD
      tell application "System Events" to tell process "SystemUIServer"
        key down option
        click menu bar item 1 of menu bar 2
        key up option
      end tell
EOD
fi

Anda harus mengganti GUID mesin Anda sendiri dengan nama file (hanya ada satu file di sana, jadi mudah untuk mencari tahu)

Zsolt Szatmari
sumber