Làm cách nào để bật / tắt Không làm phiền từ trình bao trên Mavericks?


16

Tôi muốn chuyển đổi Không làm phiền trong trung tâm thông báo bằng phím tắt.

Tôi đang sử dụng BetterTouchTool cho một số phím tắt bổ sung nhưng nó không hỗ trợ bật / tắt thông báo trong các tùy chọn mặc định.

Nó có một tùy chọn để thực thi lệnh đầu cuối, vì vậy tôi hỏi ở đây làm thế nào để bật / tắt Không làm phiền khỏi thiết bị đầu cuối?

Tôi đã tìm thấy Lịch biểu 'Không làm phiền' trong OS X Mountain Lion With Automator và tôi đã cố chạy các lệnh nhưng dường như nó không hoạt động.


Vì bạn thực sự hỏi về cách thực hiện nó từ bàn phím, trái ngược với vỏ, có lẽ bạn nên thay đổi tiêu đề của câu hỏi. Hoặc nếu tôi sai, xin vui lòng sửa cho tôi!
webmarc

Trên thực tế, đừng bận tâm ... Tôi đã không nhận ra rằng "betterTouchTool" yêu cầu thiết bị đầu cuối cho những gì bạn muốn.
webmarc

Tôi chủ yếu hỏi làm thế nào để làm điều đó từ vỏ. Làm điều đó từ các tùy chọn hệ thống sẽ giải quyết trường hợp của tôi, nhưng sẽ vui hơn khi biết cách thực hiện từ vỏ.
Razvan

Gotcha, tôi đã cập nhật câu trả lời của mình với thông tin shell.
webmarc

Câu trả lời:


13

Bạn chỉ có thể thiết lập lối tắt bàn phím chung cho nó trong Tùy chọn hệ thống -> Bàn phím -> Phím tắt -> Điều khiển nhiệm vụ

Hoặc nếu bạn chắc chắn muốn nó từ dòng lệnh, một applescript để làm điều này (giả sử bạn thiết lập phím tắt để sử dụng cmdshiftoptctrlD.

Lưu ý rằng bạn vẫn PHẢI thiết lập lệnh bàn phím trong Tùy chọn hệ thống để làm việc này.

Đặt đoạn script dưới đây vào một tệp, giả sử, ~ / dnd.applescript

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

Bây giờ bạn có thể chạy osascript ~/dnd.applescripttừ dòng lệnh để chuyển đổi cài đặt DND của bạn.

Screencap: Sửa đổi phím tắt trong Tùy chọn hệ thống


1
Hoàn hảo! Cảm ơn. Mong muốn có một cách tốt hơn mặc dù.
Sẽ B

Tốt hơn theo cách nào?
webmarc

1
Không phải liên kết một phím tắt tối nghĩa và chuyển đổi với osascript.
Sẽ B

Tôi đoán tôi đang hỏi bạn có nghĩa là tốt hơn như "hiệu quả hơn" hay tốt hơn là "đẹp hơn dưới vỏ bọc". Đó là một mong muốn thực tế hay thẩm mỹ?
webmarc

Chỉ tò mò, tôi không có bất kỳ đề nghị bổ sung nào cả.
webmarc

17

Kể từ OS X 10.10.3, AppleScript này sẽ chuyển đổi "Không làm phiền". Không cần phím tắt:

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

Bạn có thể lưu nó dưới dạng AppleScript và chạy nó từ thiết bị đầu cuối osascript DoNotDisturb.applescripthoặc bạn có thể đưa nó vào tập lệnh Bash bằng cách gói nó trong một di sản như vậy:

#!/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
Điều này có nghĩa là bạn cũng có thể chuyển đổi DoNotDisturbbằng cách nhấp vào các ô ngoài cùng bên phải trong thanh menu trong khi giữ Optionphím.
Razvan

2
Điều này không còn hoạt động trên Mojave. Applescript dường như nhấp vào mục thanh menu như thể tùy chọn không bị hỏng, mặc dù vậy
Dylanthepiguy

13

Bạn có thể đơn giản hóa câu trả lời mà razvanz cung cấp bằng cách sử dụng -currentHostđối số cho lệnh mặc định.

Kích hoạt Không làm phiền:

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

(thông qua https: //heyf Focus.com/blog/eneac-do-not-disturb-mode/ )

Vô hiệu hóa Không làm phiền:

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

Giờ đây, bạn có thể dễ dàng gói mã này thành tập lệnh để bật hoặc tắt "Không làm phiền" dưới dạng tập lệnh hoạt động trên máy của bất kỳ ai, bất kể tùy chọn hệ thống. Đây là một ví dụ về cách làm điều đó:

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

Nguồn: https://gist.github.com/ryangreenberg/5267f68a8e7b07ea66370b4eb5580ab9


2
Lỗi thị giác nhỏ! [Lưu ý cho những người nhìn @ color]: Tôi đã thử cái này và nó hoạt động được. Tôi đã báo lại một số thông báo trong 5 phút và sau đó bật Không làm phiền cho thông báo, rồi chạy các lệnh trong phần "Vô hiệu hóa không làm phiền". Một mặt, biểu tượng vẫn bị mờ đi, nhưng mặt khác, nó dường như hoạt động khác - thông báo bật lên trong vài phút. Thử nghiệm thứ hai: Tôi đã bật Không làm phiền cho thông báo (không báo lại bất cứ điều gì) và chạy các lệnh trong phần "Vô hiệu hóa không làm phiền". Biểu tượng vẫn còn màu xám, nhưng thông báo bật lên.
Matthew Elvey

1
@MatthewElvey Đó có thể là một sự thay đổi từ Sierra sang High Sierra. Có lẽ chúng ta cần tìm một cách mới để tải lại biểu tượng thanh thực đơn.
Ryan

1
+1 cho lệnh không Applescript!
Matt

1
Dnd dường như không được thay đổi trên sierra / mojave cao với giải pháp này
Dylanthepiguy

8

Dựa trên câu trả lời từ James và Zsolt, tôi đã tạo ra một vài tập lệnh để bật hoặc tắt (không chuyển đổi) trạng thái DND. Họ cũng không yêu cầu bất kỳ ràng buộc chính hoặc máy GUID để hoạt động.

QUAN TRỌNG : Xin lưu ý rằng việc chạy các tập lệnh này lần đầu tiên có thể yêu cầu quyền truy cập cho ứng dụng chạy tập lệnh. Nếu bạn không cấp quyền trong yêu cầu, nút alt/ optionsẽ vẫn được nhấn cho hệ thống và bạn sẽ cần phải đăng xuất và quay lại để "bỏ" nó. Điều này cũng đúng với các câu trả lời trước với AppleScript. Nếu tập lệnh được chỉnh sửa, các quyền sẽ cần phải được thu hồi và cấp lại. Quyền được cấp bằng cách sử dụng:

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

Đối với macOS Sierra và High Sierra, nó menu bar 1:

Bật Không làm phiền ON (tắt thông báo):

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

Biến không làm phiền TẮT (bật thông báo):

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

Đối với các phiên bản trước của macOS, nó menu bar 2:

Biến không làm phiền ON (tắt thông báo):

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

Tắt Không làm phiền TẮT (bật thông báo):

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
Điều này không còn hoạt động trên Mojave. Applescript dường như nhấp vào mục thanh menu như thể tùy chọn không bị hỏng, mặc dù vậy
Dylanthepiguy

2

Lịch trình không làm phiền

Chỉ cần thêm rằng bạn cũng có thể lên lịch Không làm phiền từ dòng lệnh để kích hoạt / hủy kích hoạt mỗi ngày vào thời gian đã đặt.

Để đặt thời gian khi DND sẽ được bật :

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

Để đặt thời gian khi DND sẽ bị tắt :

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

LƯU Ý: thay thế<start_time_in_minutes><end_time_in_minutes>với giá trị mong muốn (giải thích bên dưới).


Thí dụ:

Để lên lịch DND bắt đầu mỗi ngày vào lúc 15:00 và kết thúc lúc 18:30, hãy làm như sau:

Chuyển đổi 15:00 và 18:30 sang phút để nhận giá trị của <start_time_in_minutes><end_time_in_minutes> . Nghĩa là nhân số giờ với 60 và thêm số phút.

Trong 15:00 đó sẽ là: 15 * 60 + 0 = 900và cho 18:30 sẽ là : 18 * 60 + 30 = 1110. Cung cấp cho chúng tôi các lệnh dưới đây:

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

Dựa trên câu trả lời của James, tôi cũng nói dối rằng bạn cũng có thể xác định xem nó được bật hay tắt. Vì vậy, những điều sau đây sẽ tắt và không làm gì nếu đã tắt:

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

Bạn phải thay thế máy của mình GUID thành tên tệp (chỉ có một tệp ở đó, vì vậy thật dễ dàng để tìm ra)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.