22 votos

¿Cómo puedo cambiar el fondo de la pantalla de inicio de sesión en MacOS Mojave?

Acabo de actualizar a macOS Mojave y enseguida he notado un par de cosas:

  • Mi fondo de pantalla de inicio de sesión personalizado ha desaparecido.
  • Al hacer clic en el nombre de un usuario en la pantalla de inicio de sesión, se cambia a su fondo personal (su fondo de pantalla habitual para el primer espacio del monitor principal).

Supuse que simplemente había sobrescrito mi archivo de imagen en caché. Pero cuando fui a reemplazarlo, no ocurrió nada. Resulta que com.apple.desktop.admin.png ha desaparecido por completo.

no-cached-image

Justo después de tomar esa captura de pantalla, decidí hurgar en Imágenes de Escritorio y encontré mi fondo de pantalla de inicio de sesión personal, que parece prometedor. Contiene otra carpeta, que probablemente (edición: confirmado) contiene el fondo de la pantalla de inicio de sesión de mi cuenta de administrador.

17voto

Leonard Puntos 46

¡Lo he arreglado! Aunque tendrás que editar la foto de la duna HEIC. Si te animas, sigue estos pasos:

1) Ir a: /Biblioteca/Imágenes de escritorio/

2) Encuentre el archivo llamado "Mojave.heic"

3) Guarda una copia de seguridad en otro lugar

4) Selecciona la imagen que quieres tener en su lugar

5) Editar los valores de la imagen (DPI, tamaño, etc.) para que se ajuste

6) Cambia el nombre de esta imagen editada por Mojave.heic

0 votos

Bien pensado, excepto que esto "elimina" el fondo de Mojave en el panel de preferencias de Fondo de Escritorio.

0 votos

Eso sí que puede ser aceptable. Supongo que el SIP no se activará, ya que está en /Library ? Y tiene que ser HEIF, ¿no? La mayoría de mis imágenes son JPEG, así que tendré que buscar la manera de convertirlas para esto. Tal vez sip .

0 votos

Puedes simplemente renombrar un archivo jpg completo como Mojave.heic y funciona bien.

6voto

lamas Puntos 2252

Ampliación de La respuesta de Leonard :

Puede hacerlo sustituyendo el Mojave.heic fondo de escritorio por defecto. Este no requiere desactivar el SIP , ya que está en /Library .

  • Retroceder /Library/Desktop Pictures/Mojave.heic copiándolo en Mojave.heic.orig o similar.

  • Obtenga su nueva imagen y escale/recorte a exactamente se ajustan a la pantalla. Si no conoce la resolución de su pantalla, puede ir a ? > Acerca de este Mac.

  • Sustituir Mojave.heic con su nuevo archivo. No te preocupes si es JPG o similar, seguirá funcionando incluso después de cambiarle el nombre a Mojave.heic .*

  • Si tiene FileVault habilitado, cambie una opción de inicio de sesión en las Preferencias del Sistema. Por ejemplo, si desea mostrar una lista de usuarios o los campos de nombre y contraseña. Sólo tienes que volver a cambiarlo si no quieres que se cambie.

    Esto se debe a que cuando se arranca con FileVault, en la pantalla de inicio de sesión su sistema no ha arrancado del todo ¡! En realidad está ejecutando un pequeño sistema en su partición EFI, ya que su partición principal está encriptada. El cambio de una opción de inicio de sesión hará que Preferencias del Sistema cambie la configuración del sistema EFI, incluyendo la recogida del cambio de fondo de pantalla. Ver esta respuesta .

  • Reinicie y disfrute.

* Sólo he probado esto con imágenes JPEG, pero puede funcionar para otros tipos.


Ahorro de tiempo completamente innecesario

He hecho un pequeño programa en Swift que hace todo esto por ti (detecta la versión del SO y funciona tanto en Mojave como en versiones anteriores). Necesitarás Xcode para compilarlo.

No debería romper tu sistema, pero no puedo garantizar nada ¡asegúrese primero de tener copias de seguridad!

Ahora también está disponible <a href="https://github.com/SilverWolf32/loginwindowbgconverter" rel="nofollow noreferrer">en GitHub </a>. Puede o no actualizarse aquí en el futuro.

//
// loginwindowbgconverter
// by SilverWolf
// 2018-09-27
//

import Foundation
import AppKit

func printUsage() {
    print("""
    usage: \(CommandLine.arguments[0]) \u{1B}[4mimage-file\u{1B}[0m
    It needs to be run as root, as it saves to /Library/Desktop Pictures.
    """)
}

guard CommandLine.arguments.indices.contains(1) else {
    printUsage()
    exit(1)
}
let inputFile = CommandLine.arguments[1]

guard let inputImage = NSImage(contentsOfFile: inputFile) else {
    print("\(CommandLine.arguments[0]): can't load image from \(inputFile)")
    exit(2)
}

let iw = inputImage.size.width
let ih = inputImage.size.height
let iaspect = Double(iw) / Double(ih)

// use System Profiler to get screen size

var sw = 0, sh = 0

enum ScreenSizeError: Error {
    case foundNil
}
do {
    let task = Process()
    if #available(macOS 10.13, *) {
        task.executableURL = URL(fileURLWithPath: "/bin/zsh")
    } else {
        task.launchPath = "/bin/zsh"
    }
    task.arguments = ["-f", "-c", "system_profiler SPDisplaysDataType | awk '/Resolution/{print $2, $4}' | head -n 1"]

    let stdoutPipe = Pipe()
    task.standardOutput = stdoutPipe

    if #available(macOS 10.13, *) {
        try task.run()
    } else {
        task.launch()
    }
    task.waitUntilExit()

    let data = stdoutPipe.fileHandleForReading.readDataToEndOfFile()
    guard let text = String(data: data, encoding: .utf8) else {
        throw ScreenSizeError.foundNil
    }
    let sizes = (text as NSString).replacingOccurrences(of: "\n", with: "").components(separatedBy: " ")
    sw = Int(sizes[0]) ?? 0
    sh = Int(sizes[1]) ?? 0
    guard sw != 0 && sh != 0 else {
        throw ScreenSizeError.foundNil
    }
} catch {
    print("\(CommandLine.arguments[0]): can't get screen resolution")
    exit(3)
}

print("Screen size: \(sw)x\(sh)")

var nw = 0, nh = 0
var x = 0, y = 0 // offsets

let saspect = Double(sw) / Double(sh)
if saspect > iaspect { // screen is wider
    nw = sw
    nh = Int(Double(sw) / iaspect) // keep input image aspect ratio
    y = -1 * (nh - sh) / 2 // half the difference
} else { // screen is narrower
    nh = sh
    nw = Int(Double(sh) * iaspect)
    x = -1 * (nw - sw) / 2
}

// draw into new image
guard let newImage = NSBitmapImageRep(bitmapDataPlanes: nil,
                                pixelsWide: Int(sw),
                                pixelsHigh: Int(sh),
                                bitsPerSample: 8,
                                samplesPerPixel: 4,
                                hasAlpha: true,
                                isPlanar: false,
                                colorSpaceName: .deviceRGB,
                                bytesPerRow: sw * 4,
                                bitsPerPixel: 32) else {
    print("\(CommandLine.arguments[0]): can't create bitmap image to draw into!")
    exit(2)
}

NSGraphicsContext.saveGraphicsState()
let graphicsContext = NSGraphicsContext(bitmapImageRep: newImage)
NSGraphicsContext.current = graphicsContext
graphicsContext?.imageInterpolation = .high
let r = NSMakeRect(CGFloat(x), CGFloat(y), CGFloat(nw), CGFloat(nh))
print("drawing rect: \(r)")
inputImage.draw(in: r)

graphicsContext?.flushGraphics()
NSGraphicsContext.restoreGraphicsState()

print("image size: \(newImage.size)")

// write to file
if #available(macOS 10.14, *) { // macOS Mojave has a completely different system
    let targetFile = "/Library/Desktop Pictures/Mojave.heic"
    let origFile =  "/Library/Desktop Pictures/Mojave.heic.orig"
    if !FileManager.default.fileExists(atPath: origFile) { // no backup of original Mojave.heic
        print("Backing up original Mojave.heic (this should only happen once)")
        do {
            try FileManager.default.copyItem(atPath: targetFile, toPath: origFile)
        } catch {
            print("\(CommandLine.arguments[0]): \u{1B}[1mbackup failed, aborting!\u{1B}[0m \(error.localizedDescription)")
            exit(1)
        }
    }

    print("Saving to \(targetFile)")
    // actual writing
    let imageData = newImage.representation(using: .jpeg, properties: [:])!
    do {
        try imageData.write(to: URL(fileURLWithPath: targetFile))
    } catch {
        print("\(CommandLine.arguments[0]): can't write image data: \(error)")
        print("(are you root?)")
        exit(1)
    }
} else {
    let targetFile = "/Library/Caches/com.apple.desktop.admin.png"
    print("Saving to \(targetFile)")
    let pngData = newImage.representation(using: .png, properties: [:])!
    do {
        try pngData.write(to: URL(fileURLWithPath: targetFile))
    } catch {
        print("\(CommandLine.arguments[0]): can't write image data: \(error)")
        print("(are you root?)")
        exit(1)
    }
}

//
// This is free and unencumbered software released into the public domain.
//
// Anyone is free to copy, modify, publish, use, compile, sell, or
// distribute this software, either in source code form or as a compiled
// binary, for any purpose, commercial or non-commercial, and by any
// means.
//
// In jurisdictions that recognize copyright laws, the author or authors
// of this software dedicate any and all copyright interest in the
// software to the public domain. We make this dedication for the benefit
// of the public at large and to the detriment of our heirs and
// successors. We intend this dedication to be an overt act of
// relinquishment in perpetuity of all present and future rights to this
// software under copyright law.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
// For more information, please refer to <https://unlicense.org/>.
//

0 votos

Para obtener las dimensiones de la pantalla puedes utilizar la propiedad NSScreen frame developer.apple.com/documentation/appkit/nsscreen/1388387-frame

0 votos

Lo he intentado. Devuelve el tamaño de pantalla "falso" utilizado para el diseño, no el tamaño real de la pantalla física.

0 votos

Y multiplicarlo por el factor de escala de respaldo tampoco funciona: me devuelve un 2 plano, aunque estoy usando un escalado de mayor densidad. Así que puede ser más grande o más pequeño que el tamaño físico, dependiendo de su configuración de escala. (:

1voto

splemp Puntos 36

Recibo una imagen extraña cuando simplemente reemplazo el archivo con un JPG, renombrándolo también HEIC. Sin embargo, cuando tomo la imagen que quiero como fondo y la exporto en el formato HEIC en Vista Previa, todo funciona de maravilla. Estaba trabajando con una imagen de 5333×3333 para empezar:

  1. Abra la imagen que desea como fondo en la vista previa
  2. En la vista previa, seleccione Archivo > Exportar...
  3. Poner el Formato a HEIC y la Calidad a la mejor (obtuve una imagen completamente en blanco cuando intenté una calidad inferior a la "Mejor")
  4. Renombrar el archivo exportado como Mojave (la extensión debe ser ya .heic)
  5. Copiar la imagen exportada a /Library/Desktop\ Pictures

Cuando cierres la sesión, deberías ver tu nuevo fondo. Intenta reiniciar, si no ves la imagen de inmediato.

Si tiene problemas al exportar el archivo como .heic, pruebe a ajustar el tamaño de la imagen mediante Vista previa: Herramientas > Ajustar tamaño. Para empezar, ajústelo al tamaño de su pantalla, tal y como se ve en Información del sistema > Gráficos/Pantallas.

0 votos

Gracias, es bueno saberlo. Además, escribí un pequeño programa para hacer todo esto automáticamente si no quieres cambiar el tamaño con Vista Previa, y ahora puede exportar a HEIF. Puedes encontrarlo en en GitHub .

-1voto

Oliver Völke Puntos 17

Este problema me está volviendo loco desde hace meses.

Esta es mi solución

(sin FileVault activado)

Mi mujer y yo trabajamos juntos en la oficina de casa desde Corona. Ambos tenemos MacBooks. Me he dado cuenta de que su Mac muestra inmediatamente su fondo de pantalla para el inicio de sesión, pero no en mi Mac. ¿Cuál es la diferencia?

Después de mirar la solución en los diversos foros, me di cuenta de que la pantalla de inicio de sesión de MacOS cambiaría inmediatamente el fondo de pantalla por defecto cuando se selecciona un usuario de los múltiples usuarios. así que si sólo hay un usuario en el Mac -> su fondo se muestra inmediatamente.

Así que debe haber algo en su Mac que falta en el mío. :-|

Al parecer, se trataba de una carpeta que probablemente MacOS no puede (o no quiere) crear por sí mismo cuando se borra de la caché (Library/Cache/Desktop Pictures)

TLDR: user settings

  • Copie el UUID de su ID de usuario.
  • Vaya a "/Library/Caches/Desktop Pictures"
  • Cree una nueva carpeta con su UUID. library folder
  • ahora debe ajustar los permisos de la carpeta para que MacOS tenga permisos de escritura allí enter image description here
  • Si cambias el fondo ahora, MacOS debería ser capaz de crear un archivo "lockscreen.png" aquí.

enter image description here

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