Me pregunto cuál sería el proceso de habilitar/deshabilitar el modo de escala de grises en el panel de Accesibilidad en las Preferencias del Sistema.
Me gustaría ejecutar un script simple, ya sea haciendo clic en una aplicación en el Dock o mediante un comando de Terminal, y hacer que cambie de escala de grises a modo normal.
¿Algunas ideas?
Nota: El código AppleScript de ejemplo se actualizó para manejar la versión más reciente de macOS (Mojave) y agregar mejoras de código adicionales. En versiones anteriores de OS X/macOS, es posible que deba eliminar of group 1
de las dos líneas del código AppleScript de ejemplo que lo tienen, para que el código funcione.
Si desea crear una aplicación AppleScript para colocarla en el Dock, puede usar el siguiente código en OS X Yosemite (y más tarde, creo).
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
En el Editor de secuencias de comandos, guárdelo como Alternar escala de grises cambiando el Formato de archivo: a: Aplicación
Puede darle a la aplicación un ícono diferente copiando y pegando en el ícono de la hoja Obtener información de la aplicación y luego arrastrando y soltando el paquete de la aplicación en el Dock.
Deberá otorgar permiso en Accesibilidad en la pestaña Privacidad de Seguridad y privacidad en Preferencias del sistema para ejecutarlo correctamente.
Si desea utilizar un script bash utilizando el código proporcionado por IconDaemon, el siguiente código alternará entre el uso de color y escala de grises según la configuración actual.
#!/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
Esto requiere herramientas de desarrollador para compilar un programa C objetivo. El programa se basa en esta respuesta de Stackoverflow .
Cree un archivo llamado grayscale.c con el siguiente contenido:
// 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;
}
Luego ejecute el siguiente comando para compilarlo:
clang -g -O2 -std=c11 -Wall -framework ApplicationServices ./grayscale.c -o toggle-grayscale
Ahora ejecute ./toggle-grayscale
Esto instantáneamente convierte la pantalla en escala de grises o no en todas las aplicaciones, pero no actualiza la configuración en Preferencias del sistema.
Probado en MacOS High Sierra 10.13.6, versión clang Apple LLVM version 10.0.0 (clang-1000.10.44.4)
.
Los archivos .plist que son modificados por el panel de Accesibilidad se encuentran en ~/Library/Preferences
y son com.apple.CoreGraphics
y com.apple.universalaccess
.
No se realizan cambios en ningún archivo en~/Library/Preferences/ByHost
Ejecuta los comandos:
defaults write com.apple.universalaccess grayscale -bool yes
defaults write com.apple.CoreGraphics DisplayUseForcedGray -bool yes
Luego fuerce el cambio de color a escala de grises descargando y volviendo a cargar el universalaccessd
proceso:
launchctl unload /System/Library/LaunchAgents/com.apple.universalaccessd.plist
launchctl load /System/Library/LaunchAgents/com.apple.universalaccessd.plist
Para volver al color, ejecute los mismos comandos con los defaults
parámetros establecidos en no
.
A diferencia del panel de Accesibilidad, que cambia el color instantáneamente, este método puede tardar unos segundos en realizar la transición.
launchctl
comandos generan este mensaje de error: Operation not permitted while System Integrity Protection is engaged
. Puede deshabilitar la Protección de integridad del sistema (consulte aquí ), pero hacerlo lo vuelve más vulnerable al malware.Para Catalina y Big Sur, use este código AppleScript abriendo la aplicación Script Editor. Abra un nuevo documento y copie el código. Para que se pueda hacer doble clic (como una aplicación desde el escritorio, por ejemplo), haga clic en Archivo > Exportar y luego elija como Formato de archivo > Aplicación.
tell application "System Preferences"
set the current pane to pane id "com.apple.preference.universalaccess"
delay 1 #needs time to open universal access
tell application "System Events" to tell process "System Preferences" to tell window "Accessibility"
select row 5 of table 1 of scroll area 1 #open display preferences
click radio button "Color Filters" of tab group 1 of group 1
click checkbox "Enable Color Filters" of tab group 1 of group 1
end tell
end tell
tell application "System Preferences" to quit
Desde aquí: https://gist.github.com/silesky/2da3a6bef1703e38d901ec9c623eecbd
Puede instalar la aplicación Modo de escala de grises de código abierto que le permite activar o desactivar la escala de grises con un acceso directo personalizado o con un solo clic con el botón derecho en el icono de la barra de menú.
Instalar scriptisto
por
brew install --cask cargo
cargo install scriptisto
También necesita tener instaladas las herramientas Xcode CLI ( xcode-select --install
).
Luego guarde lo siguiente como gray_darwin.c
, y hágalo ejecutable ( chmod +x gray_darwin.c
).
#!/usr/bin/env scriptisto
// Self-contained, has no dependencies except Xcode CLI.
// scriptisto-begin
// script_src: main.c
// build_cmd: clang -g -O2 -std=c11 -Wall -framework ApplicationServices main.c -o ./script
// scriptisto-end
#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;
if (argc > 1) {
if (argv[1][0] == 'y') {
isGrayscale = false; // will toggle this to true
} else if (argv[1][0] == 's') {
printf("Grayscale is now: %d\n", CGDisplayUsesForceToGray());
return 0;
}
else {
isGrayscale = true;
}
} else {
isGrayscale = CGDisplayUsesForceToGray();
printf("isGrayscale = %d\n", isGrayscale);
}
CGDisplayForceToGray(!isGrayscale);
printf("Grayscale is now: %d\n", CGDisplayUsesForceToGray());
return 0;
}
Ahora puedes usarlo así:
function display-gray-is() {
[[ "$(gray_darwin.c s)" == "Grayscale is now: 1" ]]
}
function display-gray-toggle() {
gray_darwin.c
}
function display-gray-off() {
gray_darwin.c n
}
function display-gray-on() {
gray_darwin.c y
}
cargo
.cargo install scriptisto
brew install --cask cargo
de al menos no en el M1.
ArleyM
delay 1
antes de hacer clic en la casilla de verificación. ¡Gracias!cory snider
usuario3439894