Làm cách nào để bật / tắt chế độ thang độ xám trong Trợ năng qua Terminal / App?


6

Tôi đang tự hỏi điều gì sẽ là quá trình kích hoạt / vô hiệu hóa chế độ thang độ xám trong bảng Trợ năng trong Tùy chọn hệ thống?

Tôi muốn chạy một tập lệnh đơn giản, bằng cách nhấp vào một ứng dụng trong Dock hoặc bằng lệnh Terminal và để nó chuyển từ chế độ thang độ xám sang chế độ thông thường.

Có ý kiến ​​gì không?

Câu trả lời:


4

Lưu ý: Ví dụ mã AppleScript đã được cập nhật để xử lý macOS mới nhất hiện tại (Mojave) và thêm các cải tiến mã bổ sung. Trên các phiên bản OS X / macOS trước đó, bạn có thể phải xóa of group 1khỏi hai dòng mã AppleScript có mã đó để mã hoạt động.


Nếu bạn muốn tạo một ứng dụng AppleScript để đặt vào Dock, bạn có thể sử dụng sau đây trong OS X Yosemite (và sau này, tôi tin).

if running of application "System Preferences" then
    try
        tell application "System Preferences" to quit
    on error
        do shell script "killall 'System Preferences'"
    end try
end if

repeat while running of application "System Preferences" is true
    delay 0.01
end repeat

tell application "System Preferences" to reveal anchor "Seeing_Display" of ¬
    pane id "com.apple.preference.universalaccess"

tell application "System Events" to tell process "System Preferences"
    repeat until exists checkbox "Use grayscale" of group 1 of ¬
        window "Accessibility"
        delay 0.01
    end repeat
    click the checkbox "Use grayscale" of group 1 of window "Accessibility"
end tell

tell application "System Preferences" to quit

Trong Script Editor, lưu nó dưới dạng Toggle Grayscale thay đổi Định dạng tệp: thành: Ứng dụng

Bạn có thể cung cấp cho Ứng dụng một biểu tượng khác thông qua sao chép và dán vào biểu tượng của trang Nhận thông tin của Ứng dụng, sau đó kéo và thả gói Ứng dụng vào Dock.

Bạn sẽ phải cấp quyền theo Trợ năng trên tab Quyền riêng tư của Bảo mật & Quyền riêng tư trong Tùy chọn hệ thống để chạy thành công.


Nếu bạn muốn sử dụng tập lệnh bash bằng do IconDaemon cung cấp, đoạn mã sau sẽ chuyển đổi giữa việc sử dụng màu và thang độ xám dựa trên cách đặt hiện tại.

#!/bin/bash

setGrayscale () {

    defaults write com.apple.universalaccess grayscale -bool $1
    defaults write com.apple.CoreGraphics DisplayUseForcedGray -bool $1
    launchctl unload /System/Library/LaunchAgents/com.apple.universalaccessd.plist
    launchctl load /System/Library/LaunchAgents/com.apple.universalaccessd.plist

    case "$1" in
        "NO")
            echo "  Changing Display to use color. This will take a moment..."
        ;;
        "YES")
            echo "  Changing Display to use grayscale. This will take a moment..."
        ;;
    esac

}

_bool="$(defaults read com.apple.universalaccess grayscale 2>/dev/null)"

case "$_bool" in
    "0")
        setGrayscale "YES"
    ;;
    "1")
        setGrayscale "NO"
    ;;
    *)
        setGrayscale "YES"
    ;;
esac

nhập mô tả hình ảnh ở đây


2
Nó hoạt động sau khi tôi thêm delay 1trước hộp kiểm bấm. Cảm ơn!
ArleyM

user3439894 Tôi gặp lỗi này: Sự kiện hệ thống gặp lỗi: Không thể có cửa sổ "Khả năng truy cập" của quy trình "Tùy chọn hệ thống". (-1728) Cố gắng khắc phục sự cố tôi đã sai ... cảm ơn!
Cory Snider

@Cory Snider, tôi đã cập nhật mã AppleScript mẫu để xử lý macOS mới nhất hiện tại (Mojave) và thêm các cải tiến mã bổ sung. Trên các phiên bản trước của OS X / macOS, bạn có thể phải xóa nhóm 1 khỏi hai dòng mã AppleScript có mã đó để mã hoạt động.
dùng3439894

6

Điều này đòi hỏi các công cụ phát triển để biên dịch một chương trình C khách quan. Chương trình dựa trên câu trả lời Stackoverflow này .

Tạo một tệp có tên grayscale.c với các nội dung sau:

// clang -g -O2 -std=c11 -Wall -framework ApplicationServices
// https://stackoverflow.com/questions/14163788/how-does-on-screen-color-inversion-work-in-os-x
#include <stdio.h>
#include <ApplicationServices/ApplicationServices.h>

CG_EXTERN bool CGDisplayUsesForceToGray(void);
CG_EXTERN void CGDisplayForceToGray(bool forceToGray);

int
main(int argc, char** argv)
{
    bool isGrayscale = CGDisplayUsesForceToGray();
    printf("isGrayscale = %d\n", isGrayscale);
    CGDisplayForceToGray(!isGrayscale);
    printf("Grayscale is now: %d\n", CGDisplayUsesForceToGray());

    return 0;
}

Sau đó chạy lệnh sau để biên dịch nó:

clang -g -O2 -std=c11 -Wall -framework ApplicationServices ./grayscale.c -o toggle-grayscale

Bây giờ chạy ./toggle-grayscaleĐiều này ngay lập tức làm cho màn hình thang độ xám hoặc không trên tất cả các ứng dụng, nhưng không cập nhật cài đặt trong Tùy chọn hệ thống.

Đã thử nghiệm trên MacOS High Sierra 10.13.6, phiên bản tiếng kêu Apple LLVM version 10.0.0 (clang-1000.10.44.4).


Tôi đồng ý nó không lý tưởng. Tôi không thể làm cho giải pháp tập lệnh apple hoạt động đáng tin cậy 100% và nó dẫn đến một cửa sổ bật lên khó chịu khi tập lệnh thực thi. Sử dụng launchctl sẽ yêu cầu vô hiệu hóa các biện pháp bảo vệ (IMO thực tế tồi tệ hơn nhiều) và chậm. Tất nhiên, không cần phải nói rằng sử dụng API C mục tiêu không có giấy tờ có thể không phải là cách lý tưởng để giải quyết vấn đề này, nhưng giải pháp này có lợi thế cho những người khác thiếu và dễ dàng hơn đối với những người quen thuộc với giao diện dòng lệnh UNIX.
Đệ quy

2
Thật đáng kinh ngạc. Tôi đã thực thi của bạn và làm cho nó một dịch vụ qua Automator, và sau đó gán một phím tắt để dịch vụ đó, về cơ bản lập bản đồ Cmd + Option + Ctrl + 9 để chuyển màu xám
hương thơm

4

Các tập tin .plist được sửa đổi bởi bảng Trợ năng được tìm thấy trong đó ~/Library/Preferencesvà chúng là com.apple.CoreGraphicscom.apple.universalaccess.

Không có thay đổi nào được thực hiện đối với bất kỳ tệp nào trong ~/Library/Preferences/ByHost

Thực hiện các lệnh:

defaults write com.apple.universalaccess grayscale -bool yes

defaults write com.apple.CoreGraphics DisplayUseForcedGray -bool yes

Sau đó, buộc thay đổi màu thành thang độ xám bằng cách dỡ và tải lại universalaccessdquá trình:

launchctl unload /System/Library/LaunchAgents/com.apple.universalaccessd.plist

launchctl load /System/Library/LaunchAgents/com.apple.universalaccessd.plist

Để chuyển về màu thực hiện các lệnh tương tự với các defaultstham số được đặt thành no.

Không giống như bảng Trợ năng, thay đổi màu sắc ngay lập tức, phương pháp này có thể mất vài giây để thực hiện chuyển đổi.


Thử nghiệm trên Intel Core i7 2,8 GHz và được gói trong tập lệnh bash, phải mất 10 giây sau khi tập lệnh được thực thi để thang độ xám hiển thị. Vì vậy, tôi phải nói rằng "một vài giây" là sai lệch, nhưng dù sao thì +1.
dùng3439894

Có lẽ có một lệnh launchctl khác nhau để làm cho nó thực thi nhanh hơn? Trên Intel Core i7 tốc độ 3,4 GHz của tôi, nó mất không quá 5-6 giây. Tôi chỉ hẹn giờ thôi.
IconDaemon

Tôi đã cung cấp các lệnh đầu cuối mà OP và những người khác có thể sử dụng để tự tạo một tập lệnh shell. Tôi thích sử dụng perl để tạo một tập lệnh với các lệnh này và gói nó trong Platypus . Cho một người một con cá - họ sẽ ăn trong một ngày. Dạy chúng cách câu cá, và chúng sẽ không bao giờ đói.
IconDaemon

1
Trên macOS 10.13.3 Beta, các launchctllệnh tạo ra thông báo lỗi này : Operation not permitted while System Integrity Protection is engaged. Bạn có thể vô hiệu hóa Bảo vệ toàn vẹn hệ thống (xem tại đây ), nhưng làm như vậy sẽ khiến bạn dễ bị phần mềm độc hại hơn.
Patrick Brinich-Langlois
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.