터미널 / 앱을 통한 접근성에서 그레이 스케일 모드를 활성화 / 비활성화하는 방법은 무엇입니까?


6

시스템 환경 설정의 접근성 패널에서 그레이 스케일 모드를 활성화 / 비활성화하는 프로세스가 무엇인지 궁금합니다.

Dock에서 응용 프로그램을 클릭하거나 터미널 명령으로 간단한 스크립트를 실행하고 그레이 스케일에서 일반 모드로 전환하고 싶습니다.

어떤 아이디어?

답변:


4

참고 : 예제 AppleScript 코드는 현재 최신 macOS (Mojave)를 처리하고 코드 개선 사항을 추가하도록 업데이트되었습니다. 이전 버전의 OS X / macOS of group 1에서는 코드가 작동하기 위해 AppleScript 코드가있는 두 줄의 예제 를 제거해야 할 수도 있습니다 .


Dock에 넣을 AppleScript 응용 프로그램을 만들려면 OS X Yosemite에서 다음 코드 를 사용할 수 있습니다 .

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

스크립트 편집기에서 파일 형식을 다음으로 변경하여 Toggle Grayscale로 저장합니다.

앱 정보 입수 시트의 아이콘에 복사하여 붙여 넣기를 통해 앱에 다른 아이콘을 부여한 다음 앱 번들을 Dock으로 끌어다 놓을 수 있습니다.

성공적으로 실행하려면 시스템 환경 설정의 보안 및 개인 정보 보호에있는 개인 정보 탭에있는 접근성에서 권한을 부여해야합니다.


IconDaemon에서 제공 한 코드 를 사용하여 bash 스크립트를 사용하려는 경우 다음 코드 는 현재 설정되어있는 방식에 따라 색상 및 회색조 사용 간을 전환합니다.

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

여기에 이미지 설명을 입력하십시오


2
delay 1클릭 확인란 앞에 추가 한 후에 작동했습니다 . 감사!
ArleyM

user3439894이 오류가 발생합니다. 시스템 이벤트에 오류가 발생했습니다 : "시스템 환경 설정"프로세스의 "접근성"창을 가져올 수 없습니다. (-1728) 내가 잘못한 곳의 문제를 해결하려고 시도하는 중 ... 감사합니다!
코리 스나이더

@Cory Snider, 현재 최신 macOS (Mojave)를 처리하고 코드 개선 사항을 추가하기 위해 예제 AppleScript 코드를 업데이트했습니다. 이전 버전의 OS X / macOS에서는 코드가 작동하기 위해 두 줄의 예제 AppleScript 코드에서 그룹 1을 제거해야 할 수 있습니다.
user3439894

6

이를 위해서는 객관적인 C 프로그램을 컴파일하기 위해 개발자 도구가 필요합니다. 이 프로그램은 이 Stackoverflow 답변을 기반으로 합니다 .

다음 내용으로 grayscale.c라는 파일을 만듭니다.

// 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;
}

그런 다음 다음 명령을 실행하여 컴파일하십시오.

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

지금 실행 ./toggle-grayscale이것은 모든 응용 프로그램에서 화면을 즉시 회색조로 만들거나 표시하지 않지만 시스템 환경 설정의 설정을 업데이트하지는 않습니다.

MacOS High Sierra 10.13.6, clang 버전에서 테스트되었습니다 Apple LLVM version 10.0.0 (clang-1000.10.44.4).


이상적이지 않다는 데 동의합니다. 애플 스크립트 솔루션을 100 % 안정적으로 작동시킬 수 없었으며 스크립트가 실행될 때 성가신 팝업으로 이어집니다. launchctl을 사용하려면 보안 보호를 해제해야하며 (실제 IMO가 훨씬 더 나빠짐) 속도가 느립니다. 물론 문서화되지 않은 객관적인 C API를 사용하는 것이 이상적인 방법은 아니지만,이 솔루션에는 다른 것들이없고 UNIX 명령 줄 인터페이스에 익숙한 사람들을 위해 스크립팅하기가 더 쉽다는 장점이 있습니다.
재귀 적으로 Ironic

2
이것은 놀랍다. 나는 기본적으로 Ctrl 키 + 9 그레이 스케일 전환 할 수 + Cmd를 + 옵션 매핑, 해당 서비스에 할당 된 다음 키보드 단축키를 실행 파일을 가져다 자동화를 통해 그것에게 서비스를 만들고,
연상

4

내게 필요한 옵션 패널에서 수정 한 .plist 파일 ~/Library/Preferencescom.apple.CoreGraphics및에 com.apple.universalaccess있습니다.

파일이 변경되지 않습니다 ~/Library/Preferences/ByHost

다음 명령을 실행하십시오 :

defaults write com.apple.universalaccess grayscale -bool yes

defaults write com.apple.CoreGraphics DisplayUseForcedGray -bool yes

그런 다음 universalaccessd프로세스를 언로드하고 다시로드하여 색상을 강제로 그레이 스케일로 변경하십시오 .

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

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

색상으로 다시 전환하려면 defaults매개 변수를로 설정 하여 동일한 명령을 실행하십시오 no.

색상을 즉시 변경하는 액세스 가능성 패널과 달리이 방법을 전환하는 데 몇 초가 걸릴 수 있습니다.


2.8GHz Intel Core i7에서 테스트하고 bash 스크립트로 래핑하면 스크립트가 실행되어 회색조가 표시되는 데 10 초가 걸렸습니다. "몇 초"라고 오해의 소지가 있지만 어쨌든 +1해야합니다.
user3439894

아마도 더 빠른 실행을 만드는 다른 launchctl 명령이 있습니까? 3.4GHz Intel Core i7에서는 5-6 초를 넘지 않았습니다. 방금 시간을.어요
IconDaemon 2016 년

OP와 다른 사람들이 스스로 쉘 스크립트를 만드는 데 사용할 수있는 터미널 명령을 제공하고있었습니다. perl을 사용하여 이러한 명령으로 스크립트를 작성하고 Platypus로 랩핑하는 것을 선호합니다 . 사람에게 물고기를 주면 하루 동안 먹을 것입니다. 그들 에게 낚시 하는 을 가르쳐 주면 결코 배가 고프지 않을 것입니다.
IconDaemon 2016 년

1
macOS 10.13.3 Beta에서 launchctl명령은 다음과 같은 오류 메시지를 생성합니다 Operation not permitted while System Integrity Protection is engaged. 시스템 무결성 보호를 비활성화 할 수 있지만 ( 여기 참조 ) 맬웨어에 더 취약합니다.
Patrick Brinich-Langlois
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.