4 votos

Cambie sin problemas el fondo de pantalla de todos los espacios del escritorio en Mac sin matar el Dock

Me gustaría cambiar el fondo de pantalla en TODOS los escritorios incluyendo los espacios en Mac pero sin necesidad de llamar a killall Dock cada minuto. (El reinicio del muelle fuerza la actualización del fondo de pantalla).

Tengo un AppleScript que cambia el fondo de pantalla al instante:

tell application "System Events" to tell every desktop to set picture to wallpaperPath

pero eso sólo cambia el fondo de pantalla en el espacio activo (lo que significa que si el escritorio principal no está activo, su fondo no cambiará).

He encontrado esta pregunta https://stackoverflow.com/questions/36185506/how-to-loop-through-all-mac-desktop-spaces que sugiere actualizar los valores de la ruta del papel tapiz en la base de datos SQLite ubicada en ~/Library/Application Support/Dock/desktoppicture.db . Esto cambia el fondo de pantalla en cada espacio que es grande, pero requiere reiniciar el muelle utilizando killall Dock lo que no es deseable, ya que interrumpe el flujo de trabajo.

Mi pregunta es: ¿hay alguna manera de combinar estos dos enfoques? ¿Cambiar sin problemas los fondos de pantalla en cada espacio del escritorio?

Se agradecerá cualquier sugerencia. No tengo ningún lenguaje preferido, puede ser en C, Swift, Python, Bash, AppleScript, etc.

2voto

Vojta Böhm Puntos 9

Lo he descubierto.

Estoy recorriendo todas las pantallas disponibles y configurando el fondo de pantalla con setDesktopImageURL:forPantalla:opciones:error: (basado en la respuesta de Graham Miln):

for screen in NSScreen.screens {
    try! NSWorkspace.shared.setDesktopImageURL(url, for: screen, options: [:])
}

Esto cambia los fondos de pantalla a la perfección, sin necesidad de killall Dock en todas las pantallas, pero sólo si el escritorio es el espacio activo.

Para asegurarme de que el fondo de pantalla se cambia cuando estoy en otro espacio (normalmente una aplicación a pantalla completa), he añadido un observador para NSWorkspace.activeSpaceDidChangeNotification en el NSWorkspace.shared.notificationCenter que establece las imágenes de escritorio de nuevo (utilizando el código anterior). Así, cada vez que vuelvo al escritorio, se invoca esta notificación y el fondo de pantalla se actualiza sin problemas.

Incluso fui un paso más allá y añadí el mismo observador también para el NSWorkspace.didWakeNotification que actualiza el fondo de pantalla en cuanto el dispositivo se despierta, ¡lo cual es genial!

1voto

Steve Evans Puntos 155

Utilice NSWorkspace y el setDesktopImageURL:forScreen:options:error: método:

setDesktopImageURL:forScreen:options:error:

Establece la imagen del escritorio para la pantalla dada a la imagen en la URL especificada.

Esta API es accesible a través de Objective-C y Swift. Supongo que los puentes de scripting para python también puede acceder a estos métodos.

Consulte los siguientes enlaces para ver otros enfoques que utilizan AppleScript:

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X