답변:
참고 : 예제 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
이를 위해서는 객관적인 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)
.
내게 필요한 옵션 패널에서 수정 한 .plist 파일 ~/Library/Preferences
은 com.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
.
색상을 즉시 변경하는 액세스 가능성 패널과 달리이 방법을 전환하는 데 몇 초가 걸릴 수 있습니다.
launchctl
명령은 다음과 같은 오류 메시지를 생성합니다 Operation not permitted while System Integrity Protection is engaged
. 시스템 무결성 보호를 비활성화 할 수 있지만 ( 여기 참조 ) 맬웨어에 더 취약합니다.
delay 1
클릭 확인란 앞에 추가 한 후에 작동했습니다 . 감사!