22 votes

Comment modifier l'arrière-plan de l'écran de connexion dans MacOS Mojave ?

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

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

J'ai supposé qu'il avait simplement écrasé mon fichier image en cache. Mais quand j'ai voulu le remplacer, rien ne s'est passé. Il s'avère que com.apple.desktop.admin.png a entièrement disparu !

no-cached-image

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

17voto

Leonard Points 186

Je l'ai réparé ! Vous devrez cependant éditer l'image HEIC de la dune. Si vous êtes prêt, suivez ces étapes :

1) Allez à : /Bibliothèque/Photos de bureau/

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

3) Enregistrez une copie comme sauvegarde quelque part ailleurs.

4) Sélectionnez la photo que vous voulez avoir à la place.

5) Modifier les valeurs des images (DPI, taille, etc.) pour les adapter

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

6voto

lamas Points 2252

Élargir le champ d'action Réponse de Leonard :

Vous pouvez le faire en remplaçant le Mojave.heic fond d'écran par défaut. Ce site ne nécessite pas la désactivation de SIP comme c'est dans /Library .

  • Retourner /Library/Desktop Pictures/Mojave.heic en le copiant dans Mojave.heic.orig ou similaire.

  • Récupérez votre nouvelle image et mettez-la à l'échelle/coupez-la à exactement s'adapter à l'écran. Si vous ne connaissez pas la résolution de votre écran, vous pouvez aller dans > À propos de ce Mac.

  • Remplacer Mojave.heic avec votre nouveau fichier. Ne vous inquiétez pas s'il s'agit d'un fichier JPG ou similaire, il fonctionnera même après avoir été renommé en Mojave.heic .*

  • Si vous avez FileVault activé, modifiez une option de connexion dans les Préférences système. Par exemple, si vous souhaitez afficher une liste d'utilisateurs ou les champs de nom et de mot de passe. Il vous suffit de la modifier à nouveau si vous ne voulez pas la changer.

    C'est parce que lorsque vous démarrez avec FileVault, à l'écran de connexion votre système n'a pas vraiment démarré. ! Il exécute en fait un petit système sur votre partition EFI, puisque votre partition principale est cryptée. En changeant 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é ceci qu'avec des images JPEG, mais cela peut fonctionner pour d'autres types.


Un gain de temps totalement inutile

J'ai créé un petit programme Swift qui fait tout cela pour vous (il détecte la version de l'OS et fonctionne aussi bien sur Mojave que sur les versions antérieures). Vous aurez besoin de Xcode pour le compiler.

Ça ne devrait pas casser votre système, mais je ne peux rien garantir assurez-vous d'avoir des sauvegardes avant tout !

Ceci est maintenant également disponible <a href="https://github.com/SilverWolf32/loginwindowbgconverter" rel="nofollow noreferrer">sur GitHub </a>. 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 TH 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/>.
//

1voto

splemp Points 56

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 que je l'exporte au format HEIC dans Aperçu, tout fonctionne parfaitement. Je travaillais avec une image de 5333×3333 pour commencer :

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

Lorsque vous vous déconnectez, vous devriez voir votre nouveau fond d'écran. Essayez de redémarrer, si l'image ne s'affiche pas tout de suite.

Si vous rencontrez des problèmes lors de l'exportation du fichier au format .heic, essayez d'ajuster la taille de l'image en utilisant l'aperçu : Outils > Ajuster la taille. Pour commencer, réglez-la à la taille de votre écran telle qu'elle apparaît dans Informations système > Graphiques/Affichages.

-1voto

vivek.m Points 741

Ce problème me rend fou depuis des mois !

Voici ma solution

(pas de FileVault activé)

Ma femme et moi travaillons ensemble dans le bureau à domicile depuis Corona. Nous avons tous deux des MacBooks. J'ai remarqué que son Mac affiche immédiatement son arrière-plan comme fond d'écran pour la connexion - mais pas sur mon Mac. Quelle était donc la différence ?

Après avoir regardé la solution dans les différents forums, j'ai remarqué que l'écran de connexion de MacOS changeait immédiatement le fond d'écran par défaut lors de la sélection d'un utilisateur parmi plusieurs. Ainsi, s'il n'y a qu'un seul utilisateur sur le Mac -> son fond d'écran s'affiche immédiatement.

Il doit donc y avoir quelque chose sur son Mac qui manque sur le mien ! :-|

Apparemment, il s'agissait d'un dossier que MacOS ne peut (ou ne veut) probablement pas créer lui-même lorsqu'il est supprimé du cache (Library/Cache/Desktop Pictures).

TLDR : user settings

  • Copiez l'UUID de votre User-ID.
  • Allez dans "/Library/Caches/Desktop Pictures".
  • Créez un nouveau dossier avec votre UUID. library folder
  • Vous devez maintenant ajuster les autorisations pour le dossier afin que MacOS ait les droits d'écriture à cet endroit. enter image description here
  • Si vous changez votre arrière-plan maintenant, MacOS devrait pouvoir créer un fichier "lockscreen.png" ici.

enter image description here

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X