マーベリックスのシェルからのサイレントを有効/無効にする方法は?


16

通知センターのサイレントモードをキーボードショートカットで切り替えたいのですが。

追加のキーボードショートカットにBetterTouchToolを使用していますが、デフォルトオプションの通知の有効化/無効化をサポートしていません。

端末コマンドを実行するためのオプションがあるので、端末からサイレントを有効/無効にする方法をここで尋ねていますか?

OS X Mountain Lion with Automatorスケジュール「サイレント」を見つけてコマンドを実行しようとしましたが、機能していないようです。


シェルからではなく、キーボードから実行する方法について本当に質問しているので、おそらく質問のタイトルを変更する必要があります。または、間違っている場合は修正してください!
webmarc 2014

実は気にしないでください… "betterTouchTool"はあなたが望むもののためにターミナルを必要とすることを私は知りませんでした。
webmarc 2014

私は主にシェルからそれを行う方法を尋ねました。システムの設定からそれを行うと私の問題は解決しますが、シェルからそれを行う方法を知ることはより楽しいです。
Razvan 2014

おっと、私はシェル情報で私の答えを更新しました。
webmarc

回答:


13

システム環境設定->キーボード->ショートカット->ミッションコントロールでグローバルキーボードショートカットを設定できます。

または、コマンドラインから間違いなく必要な場合は、Applescriptでこれを実行します(使用するキーボードショートカットを設定している場合)cmdshiftoptctrlD

これが機能するには、システム環境設定でキーボードコマンドを設定する必要があることに注意してください。

以下のスクリプトをファイルに入れます。たとえば、〜/ dnd.applescript

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

これでosascript ~/dnd.applescript、コマンドラインから実行してDND設定を切り替えることができます。

スクリーンキャップ: システム環境設定でのキーボードショートカットの変更


1
パーフェクト!ありがとう。より良い方法があったらいいのに。
ウィル・B

どのように良いですか?
webmarc 2014

1
あいまいなキーボードショートカットをバインドしてで切り替える必要はありませんosascript
ウィルB

私はあなたが「より効果的」というより良いことを意味するのか、それとも「隠蔽されている」よりも良い意味があるのか​​を尋ねていると思います。それは実用的または審美的な願いですか?
webmarc 2014

好奇心旺盛なのですが、どちらにしても追加の提案はありません。
webmarc 2014

17

OS X 10.10.3以降、このAppleScriptは「サイレントモード」を切り替えます。キーボードショートカットは不要です。

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

これをAppleScriptとして保存し、ターミナルからを使用して実行するosascript DoNotDisturb.applescriptか、次のようにヒアドキュメントにラップして、Bashスクリプトに含めることができます。

#!/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

6
つまりDoNotDisturbOptionキーを押しながらメニューバーの右端のタイルをクリックして切り替えることもできます。
Razvan

2
これはMojaveでは機能しません。Applescriptは、オプションがダウンしていない場合でも、メニューバーアイテムをクリックしたように見えます
Dylanthepiguy

13

defaultsコマンドの引数を使用することで、razvanzが提供する回答を簡略化でき-currentHostます。

サイレントを有効にする:

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

https://heyfocus.com/blog/enabling-do-not-disturb-mode/を介して)

サイレントを無効にする:

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

これを簡単にスクリプトとしてまとめ、システムの設定に関係なく誰のマシンでも機能するスクリプトとして「サイレント」を有効または無効にすることができます。これを行う方法の例を次に示します。

#!/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

出典:https : //gist.github.com/ryangreenberg/5267f68a8e7b07ea66370b4eb5580ab9


2
マイナーな視覚バグ![@色を見る人に注目]:私はこれを試してみましたが、うまくいきました。一部の通知を5分間スヌーズしてから、通知のサイレントをオンにしてから、「サイレントの無効化」でコマンドを実行しました。一方でアイコンはグレー表示のままでしたが、もう一方では機能しないようでした。通知は数分でポップアップしました。2番目のテスト:通知のサイレントモードをオンにし(何もスヌーズしない場合)、[サイレントモードを無効にする]でコマンドを実行しました。アイコンはグレー表示のままでしたが、通知はすぐにポップアップ表示されました。
Matthew Elvey、2018

1
@MatthewElveyそれはシエラからハイシエラへの変更かもしれません。メニューバーのアイコンをリロードする新しい方法を見つける必要があるでしょう。
Ryan

1
Applescript以外のコマンドの+1!
Matt

1
このソリューションでは、ハイシエラ/モハベでDNDが変更されないようです
Dylanthepiguy

8

JamesとZsoltからの回答に基づいて、DND状態をオンまたはオフにする(トグルしない)ためのスクリプトをいくつか作成しました。また、キーバインディングやマシンGUIDが機能する必要もありません。

重要:これらのスクリプトを初めて実行するには、スクリプトを実行するアプリのアクセシビリティ権限が必要になる場合があります。リクエストで許可を与えない場合、alt/ optionボタンはシステムに対して押されたままになり、ログアウトしてから再度ログインして「解除」する必要があります。これは、AppleScriptによる以前の回答にも当てはまります。スクリプトを編集した場合は、権限を取り消して再度付与する必要があります。権限は以下を使用して付与されます:

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

macOS SierraおよびHigh Sierraの場合menu bar 1

サイレントモードをオンにします(通知を無効にします)。

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

サイレントモードをオフにします(通知を有効にします)。

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

以前のバージョンのmacOSの場合menu bar 2

サイレントモードをオンにします(通知を無効にします)。

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

サイレントモードをオフにします(通知を有効にします)。

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

1
これはMojaveでは機能しません。Applescriptは、メニューバーアイテムをクリックしても、オプションがダウンしていないように見えます
Dylanthepiguy

2

邪魔しないスケジュール

加えて、コマンドラインからサイレントモードをスケジュールして、毎日設定した時刻にアクティブ化/非アクティブ化することもできます。

DNDが有効になる時刻を設定するに

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

DNDが無効になる時刻を設定するには:

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

注:<start_time_in_minutes>および<end_time_in_minutes>を目的の値に置き換えます(以下で説明します)。


例:

DNDを毎日15:00に開始し、18:30に終了するようにスケジュールするには、次の手順を実行します。

15:00と18:30を分に変換して、<start_time_in_minutes>およびの値を取得します<end_time_in_minutes>。つまり、時間数に60を掛けて、分数を加算します。

夜三時のために、それは次のようになります15 * 60 + 0 = 900と、18:30のためにそれは次のようになります18 * 60 + 30 = 1110。以下のコマンドを提供してください:

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

1

ジェームズの答えに基づいて、私はまた、それがオンになっているかオフになっているかを判断できることを指摘したいと思います。したがって、次のコードはそれをオフにし、すでにオフの場合は何もしません。

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

独自のマシンGUIDをファイル名に置き換える必要があります(そこにはファイルが1つしかないため、簡単に理解できます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.