Comment changer l'arrière-plan de l'écran de connexion dans macOS Mojave?


21

Je viens de passer à macOS Mojave et j'ai immédiatement remarqué deux ou trois choses:

  • Mon fond d'écran d'écran de connexion personnalisé a disparu.
  • Lorsque vous cliquez sur le nom d'un utilisateur dans l'écran de connexion, il passe à son arrière-plan personnel (son fond d'écran habituel pour le premier espace sur le moniteur principal).

J'ai supposé qu'il venait d'écraser mon fichier image en cache. Mais quand je suis allé le remplacer, il ne s'est rien passé. Il s'avère que tout a com.apple.desktop.admin.pngdisparu!

pas d'image en cache

Juste après avoir pris cette capture d'écran, j'ai décidé de fouiller dans Desktop Pictures et j'ai trouvé mon arrière-plan d'écran de connexion personnel, qui semble prometteur. Il contient un autre dossier, qui Probablement  (modifier: confirmé) contient l'arrière-plan de l'écran de connexion de mon compte administrateur.

Réponses:


16

Je l'ai réparé! Vous devrez cependant modifier l'image HEIC des dunes. Si vous le souhaitez, procédez comme suit:

1) Allez dans: / Bibliothèque / Images de bureau /

2) Trouvez le fichier appelé "Mojave.heic"

3) Enregistrez une copie comme sauvegarde ailleurs

4) Sélectionnez l'image que vous souhaitez avoir à la place

5) Modifiez les valeurs de l'image (DPI, taille, etc.) pour les adapter

6) Renommez cette image modifiée en Mojave.heic


Bonne réflexion, sauf que cela "supprime" l'arrière-plan Mojave dans le volet de préférences Arrière-plan du bureau.
juniorRubyist

Cela pourrait certainement être acceptable! Je suppose que SIP ne se déclenchera pas, car c'est le cas /Library? Et ce doit être HEIF, non? La plupart de mes images sont des fichiers JPEG, je vais donc devoir trouver un moyen de les convertir pour cela. Peut-être sip.
SilverWolf

Vous pouvez simplement renommer un fichier jpg entier en Mojave.heic et cela fonctionne très bien.
Leonard

@Leonard Intéressant. Vous l'avez testé et ça marche? Je suis assez surpris, mais c'est fantastique!
SilverWolf

@BlackPearl a essayé cela, mais cela n'a pas fonctionné. Je ne connais cependant pas tous les détails de la tentative.
SilverWolf

6

Développant la réponse de Leonard :

Vous pouvez le faire en remplaçant l' Mojave.heicarrière-plan du bureau par défaut. Cela ne nécessite pas de désactiver SIP , car il se trouve /Library.

  • Sauvegardez /Library/Desktop Pictures/Mojave.heicen le copiant Mojave.heic.origou similaire.
  • Obtenez votre nouvelle image et mettez-la à l'échelle / recadrez-la pour l' adapter exactement à l'écran. Si vous ne connaissez pas votre résolution d'écran, vous pouvez aller à to> À propos de ce Mac.
  • Remplacez Mojave.heicpar votre nouveau fichier. Ne vous inquiétez pas s'il s'agit de JPG ou similaire, cela fonctionnera toujours même après l'avoir renommé Mojave.heic. *

  • Si FileVault est activé, modifiez une option de connexion dans les Préférences Système. Par exemple, s'il faut afficher une liste d'utilisateurs ou des champs de nom et de mot de passe. Changez-le simplement si vous ne voulez pas vraiment qu'il soit changé.

    En effet, lorsque vous démarrez avec FileVault, à l'écran de connexion, votre système n'a pas vraiment démarré complètement ! Il exécute en fait un petit système sur votre partition EFI, car votre partition principale est cryptée. Si vous modifiez une option de connexion, les Préférences Système modifieront les paramètres du système EFI, y compris le changement de fond d'écran. Voir cette réponse .

  • Redémarrez et profitez-en!

* Je n'ai testé cela qu'avec des images JPEG, mais cela peut fonctionner pour d'autres types.


Gain de temps complètement inutile

J'ai créé un petit programme Swift qui fait tout cela pour vous (il détecte la version du système d'exploitation et fonctionne à la fois sur Mojave et les versions antérieures). Vous aurez besoin de Xcode pour le compiler.

Cela ne devrait pas casser votre système, mais je ne peux rien garantir - assurez-vous d'abord d'avoir des sauvegardes!

Ceci est désormais également disponible sur GitHub . Il peut ou non être mis à jour ici à l'avenir.

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

Pour obtenir les dimensions de l'écran, vous pouvez utiliser la propriété de cadre NSScreen developer.apple.com/documentation/appkit/nsscreen/1388387-frame
Mateusz Szlosek

J'ai essayé ça. Il renvoie la taille d'écran "fausse" utilisée pour la mise en page, et non la taille réelle de l'écran physique.
SilverWolf

Et le multiplier par le facteur d'échelle de support ne fonctionne pas non plus: il me renvoie un 2 plat, même si j'utilise une mise à l'échelle de densité plus élevée. Elle peut donc être plus grande ou plus petite que la taille physique, selon vos paramètres de mise à l'échelle. (:
SilverWolf

Ah OK, je comprends ce que vous voulez dire :)
Mateusz Szlosek

1
Malheureusement, cela n'a pas fonctionné pour moi. J'ai même essayé le programme mais sans succès. Je reçois toujours la dune par défaut au lieu de ma photo. J'ai FileVault activé mais j'ai changé l'option de connexion comme vous l'avez décrit. Des idées?
Artem M

1

Je reçois une image bizarre lorsque je remplace simplement le fichier par un JPG, en le renommant aussi HEIC. Cependant, lorsque je prends l'image que je veux comme arrière-plan et l'exporte au format HEIC dans Aperçu, tout fonctionne très bien. Je travaillais avec une image 5333 × 3333 pour commencer:

  1. Ouvrez l'image que vous voulez comme arrière-plan dans Aperçu
  2. Dans Aperçu, sélectionnez Fichier> Exporter ...
  3. Réglez le format sur HEIC et la qualité au mieux (j'ai obtenu une image complètement vierge lorsque j'ai essayé une qualité inférieure à "Best")
  4. Renommez le fichier exporté en Mojave (l'extension doit déjà être .heic)
  5. Copiez l'image exportée vers /Library/Desktop\ Pictures

Lorsque vous vous déconnectez, vous devriez voir votre nouveau fond. Essayez de redémarrer, si vous ne voyez pas l'image apparaître immédiatement.

Si vous rencontrez des problèmes lors de l'exportation du fichier au format .heic, essayez d'ajuster la taille de l'image à l'aide de Aperçu: Outils> Ajuster la taille. Pour commencer, réglez-le à la taille de votre écran, comme indiqué dans Informations système> Graphiques / Écrans.


Merci, bon à savoir! De plus, j'ai écrit un petit programme pour faire tout cela automatiquement si vous ne voulez pas le redimensionner avec Aperçu, et il peut maintenant exporter vers HEIF. Vous pouvez le retrouver sur GitHub .
SilverWolf
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.