วิธีการเปิด / ปิดการใช้งานอย่ารบกวนจากเชลล์บน Mavericks


16

ฉันต้องการสลับห้ามใช้สิ่งรบกวนในศูนย์การแจ้งเตือนด้วยแป้นพิมพ์ลัด

ฉันใช้ BetterTouchTool สำหรับแป้นพิมพ์ลัดพิเศษบางตัว แต่ไม่รองรับการเปิด / ปิดการใช้งานการแจ้งเตือนในตัวเลือกเริ่มต้น

มันมีตัวเลือกสำหรับการรันคำสั่งเทอร์มินัลดังนั้นฉันจึงถามวิธีเปิด / ปิดการใช้งานอย่ารบกวนจากเทอร์มินัล

ฉันพบตารางเวลา 'ห้ามรบกวน' ใน OS X Mountain Lion ด้วย Automatorและฉันพยายามเรียกใช้คำสั่ง แต่ดูเหมือนจะไม่ทำงาน


เมื่อคุณถามเกี่ยวกับวิธีการทำมันออกมาจากแป้นพิมพ์ซึ่งแตกต่างจากเชลล์คุณควรเปลี่ยนชื่อคำถาม หรือถ้าฉันผิดโปรดแก้ไขฉัน!
webmarc

ที่จริงไม่เป็นไร ... ฉันไม่ได้ตระหนักว่า "betterTouchTool" ต้องการเทอร์มินัลสำหรับสิ่งที่คุณต้องการ
webmarc

ฉันถามว่าทำอย่างไรจากเปลือก การทำมันจากการตั้งค่าระบบช่วยแก้ไขกรณีของฉัน แต่มันสนุกมากขึ้นที่จะรู้วิธีทำจากเชลล์
Razvan

Gotcha ฉันได้อัพเดตคำตอบด้วยข้อมูลเชลล์
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 ของคุณ

ScreenCap: การปรับเปลี่ยนแป้นพิมพ์ลัดในการตั้งค่าระบบ


1
ที่สมบูรณ์แบบ! ขอบคุณ หวังว่าจะมีวิธีที่ดีกว่า
B

ดีกว่าในทางใด?
webmarc

1
osascriptไม่ต้องผูกแป้นพิมพ์ลัดปิดบังและสลับกับ
B

ฉันเดาว่าฉันถามว่าคุณหมายถึงดีกว่าใน "มีประสิทธิภาพมากขึ้น" หรือดีกว่าใน "สวยกว่าภายใต้ปก" มันเป็นความปรารถนาในทางปฏิบัติหรือความงาม?
webmarc

แค่อยากรู้อยากเห็นฉันไม่มีคำแนะนำเพิ่มเติมใด ๆ
webmarc

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หรือคุณสามารถรวมไว้ในสคริปต์ทุบตีได้โดยใส่ไว้ใน heredoc ดังนี้:

#!/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
ซึ่งหมายความว่าคุณสามารถสลับได้DoNotDisturbโดยคลิกที่ไทล์ขวาสุดในแถบเมนูในขณะที่กดOptionปุ่มค้างไว้
Razvan

2
สิ่งนี้ใช้ไม่ได้กับโมฮาวีอีกต่อไป Applescript ดูเหมือนจะคลิกที่รายการแถบเมนูราวกับว่าตัวเลือกไม่ได้ลงถึงแม้ว่ามันจะเป็น
Dylanthepiguy

13

คุณสามารถทำให้คำตอบที่ razvanz จัดทำง่ายขึ้นโดยใช้-currentHostอาร์กิวเมนต์ไปยังคำสั่ง defaults

เปิดใช้งานห้ามรบกวน:

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 นาทีจากนั้นเปิดใช้ Do Not Disturb เพื่อรับการแจ้งเตือนจากนั้นเรียกใช้คำสั่งภายใต้ "Disable Do Not Disturb" ในอีกด้านหนึ่งไอคอนยังคงเป็นสีเทา แต่อีกด้านหนึ่งดูเหมือนว่าจะใช้งานได้ - การแจ้งเตือนจะปรากฏขึ้นในอีกไม่กี่นาที การทดสอบครั้งที่สอง: ฉันเปิดใช้งาน Do Not Disturb สำหรับการแจ้งเตือน (โดยไม่มีการปิดเสียงเตือนชั่วคราว) & เรียกใช้คำสั่งภายใต้ "ปิดการใช้งานห้ามรบกวน" ไอคอนยังคงเป็นสีเทา แต่การแจ้งเตือนเริ่มปรากฏขึ้น
Matthew Elvey

1
@MatthewElvey นั่นอาจจะเปลี่ยนจากเซียร่าเป็นไฮเซีย เราอาจต้องหาวิธีใหม่ในการโหลดไอคอนแถบเมนูใหม่
Ryan

1
+1 สำหรับคำสั่งที่ไม่ใช่ Applescript!
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:

เปิดห้ามรบกวนON (การแจ้งเตือนปิดใช้งาน):

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:

เปิดห้ามรบกวนON (การแจ้งเตือนปิดใช้งาน):

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
สิ่งนี้ใช้ไม่ได้กับโมฮาวีอีกต่อไป 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:00 น. 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 เครื่องของคุณเองเป็นชื่อไฟล์ (มีไฟล์เดียวเท่านั้นดังนั้นจึงง่ายที่จะคิดออก)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.