Wie ändere ich den Hintergrund des Anmeldebildschirms in macOS Mojave?


21

Ich habe gerade auf macOS Mojave aktualisiert und sofort ein paar Dinge bemerkt:

  • Mein Hintergrundbild für den benutzerdefinierten Anmeldebildschirm ist verschwunden.
  • Wenn Sie im Anmeldebildschirm auf den Namen eines Benutzers klicken, wechselt dieser zu seinem persönlichen Hintergrund (das übliche Hintergrundbild für das erste Leerzeichen auf dem primären Monitor).

Ich nahm an, dass meine zwischengespeicherte Bilddatei gerade überschrieben wurde. Aber als ich es ersetzte, passierte nichts. Es stellt sich heraus, dass com.apple.desktop.admin.pngdas komplett weg ist!

No-Cache-Image

Gleich nachdem ich diesen Screenshot gemacht hatte, entschied ich mich, in Desktop Pictures zu stöbern und fand meinen persönlichen Hintergrund für den Anmeldebildschirm, der vielversprechend aussieht. Es enthält einen weiteren Ordner, der wahrscheinlich  (Bearbeiten: Bestätigt) enthält den Hintergrund des Anmeldebildschirms meines Administratorkontos.

Antworten:


16

Ich habe es behoben! Sie müssen jedoch das HEIC-Bild der Düne bearbeiten. Wenn Sie dazu bereit sind, gehen Sie folgendermaßen vor:

1) Gehen Sie zu: / Library / Desktop Pictures /

2) Suchen Sie die Datei "Mojave.heic"

3) Speichern Sie eine Kopie als Backup an einem anderen Ort

4) Wählen Sie stattdessen das gewünschte Bild aus

5) Bearbeiten Sie die Bildwerte (DPI, Größe usw.) entsprechend

6) Benennen Sie dieses bearbeitete Bild in Mojave.heic um


Gutes Denken, außer dass dies den Mojave-Hintergrund im Einstellungsbereich "Desktop-Hintergrund" "entfernt".
JuniorRubyist

Das könnte definitiv akzeptabel sein! Ich nehme an, SIP wird nicht ausgelöst, da es in ist /Library? Und es muss HEIF sein, oder? Die meisten meiner Bilder sind JPEGs, daher muss ich einen Weg finden, sie dafür zu konvertieren. Vielleicht sip.
SilverWolf - Monica

Sie können einfach eine ganze JPG-Datei in Mojave.heic umbenennen und es funktioniert einwandfrei.
Leonard

@ Leonard Interessant. Sie haben das getestet und es funktioniert? Ich bin ziemlich überrascht, aber das ist fantastisch!
SilverWolf - Stellen Sie Monica

@ BlackPearl hat dies versucht und es hat nicht funktioniert. Ich kenne jedoch nicht alle Einzelheiten des Versuchs.
SilverWolf - Stellen Sie Monica

6

Erweiterung der Antwort von Leonard :

Sie können dies tun, indem Sie den Mojave.heicStandard-Desktop-Hintergrund ersetzen . Dies erfordert keine Deaktivierung von SIP , da es sich in befindet /Library.

  • Sichern Sie /Library/Desktop Pictures/Mojave.heicdurch Kopieren in Mojave.heic.origoder ähnliches.
  • Holen Sie sich Ihr neues Bild und skalieren / zuschneiden Sie es genau auf das Display. Wenn Sie Ihre Bildschirmauflösung nicht kennen, können Sie zu > Über diesen Mac gehen.
  • Ersetzen Sie Mojave.heicdurch Ihre neue Datei. Machen Sie sich keine Sorgen, wenn es sich um JPG oder ähnliches handelt, es funktioniert auch nach dem Umbenennen in Mojave.heic. *

  • Wenn Sie FileVault aktiviert haben, ändern Sie eine Anmeldeoption in den Systemeinstellungen. Zum Beispiel, ob eine Liste von Benutzern oder Namens- und Kennwortfelder angezeigt werden soll. Ändern Sie es einfach zurück, wenn Sie nicht möchten, dass es geändert wird.

    Dies liegt daran, dass Ihr System beim Starten mit FileVault auf dem Anmeldebildschirm nicht wirklich vollständig gestartet wurde ! Auf Ihrer EFI-Partition wird tatsächlich ein winziges System ausgeführt, da Ihre Hauptpartition verschlüsselt ist. Durch Ändern einer Anmeldeoption werden in den Systemeinstellungen die Einstellungen des EFI-Systems geändert, einschließlich der Übernahme der Hintergrundbildänderung. Siehe diese Antwort .

  • Neustart und viel Spaß!

* Ich habe dies nur mit JPEG-Bildern getestet, aber es kann für andere Typen funktionieren.


Völlig unnötige Zeitersparnis

Ich habe ein kleines Swift-Programm erstellt, das all dies für Sie erledigt (es erkennt die Betriebssystemversion und funktioniert sowohl mit Mojave als auch mit früheren Versionen). Sie benötigen Xcode, um es zu kompilieren.

Es sollte Ihr System nicht beschädigen, aber ich kann nichts garantieren - stellen Sie sicher, dass Sie zuerst Backups haben!

Dies ist jetzt auch auf GitHub verfügbar . Es kann hier in Zukunft aktualisiert werden oder nicht.

//
// 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/>.
//

Um die Bildschirmabmessungen zu erhalten, können Sie die NSScreen-Rahmeneigenschaft developer.apple.com/documentation/appkit/nsscreen/1388387-frame
Mateusz Szlosek

Das habe ich versucht. Es wird die für das Layout verwendete "falsche" Bildschirmgröße zurückgegeben, nicht die tatsächliche physische Bildschirmgröße.
SilverWolf - Stellen Sie Monica

Und das Multiplizieren mit dem Hintergrundskalierungsfaktor funktioniert auch nicht: Es gibt für mich eine flache 2 zurück, obwohl ich eine Skalierung mit höherer Dichte verwende. Abhängig von Ihren Skalierungseinstellungen kann es also größer oder kleiner als die physische Größe sein. (:
SilverWolf - Reinstate Monica

Ah OK, ich verstehe, was du meinst :)
Mateusz Szlosek

1
Leider hat das bei mir nicht funktioniert. Ich habe das Programm sogar ausprobiert, aber ohne Erfolg. Ich bekomme immer noch die Standarddüne anstelle meines Bildes. Ich habe FileVault aktiviert, aber die Anmeldeoption wie von Ihnen beschrieben geändert. Irgendwelche Ideen?
Artem M

1

Ich erhalte ein seltsames Bild, wenn ich die Datei einfach durch ein JPG ersetze und sie in HEIC umbenenne. Wenn ich jedoch das gewünschte Bild als Hintergrund nehme und es in der Vorschau im HEIC-Format exportiere, funktioniert alles hervorragend. Ich habe zunächst mit einem 5333 × 3333-Bild gearbeitet:

  1. Öffnen Sie das gewünschte Bild als Hintergrund in der Vorschau
  2. Wählen Sie in der Vorschau Datei> Exportieren ...
  3. Stellen Sie das Format auf HEIC und Qualität auf Best ein (ich habe ein völlig leeres Bild erhalten, als ich eine Qualität unter "Best" ausprobiert habe).
  4. Benennen Sie die exportierte Datei in Mojave um (die Erweiterung sollte bereits .heic sein).
  5. Kopieren Sie das exportierte Bild nach /Library/Desktop\ Pictures

Wenn Sie sich abmelden, sollten Sie Ihren neuen Hintergrund sehen. Versuchen Sie einen Neustart, wenn das Bild nicht sofort angezeigt wird.

Wenn beim Exportieren der Datei als .heic Probleme auftreten, passen Sie die Größe des Bildes mithilfe der Vorschau an: Extras> Größe anpassen. Stellen Sie es zunächst auf die Größe Ihres Bildschirms ein, wie unter Systeminformationen> Grafiken / Anzeigen angezeigt.


Danke, gut zu wissen! Außerdem habe ich ein kleines Programm geschrieben, um all dies automatisch zu erledigen, wenn Sie die Größe nicht mit der Vorschau ändern möchten, und es kann jetzt nach HEIF exportiert werden. Sie finden es auf GitHub .
SilverWolf - Monica
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.