Bagaimana cara mengubah latar belakang layar masuk di macOS Mojave?


21

Saya baru saja memperbarui ke macOS Mojave, dan segera melihat beberapa hal:

  • Wallpaper layar masuk kustom saya hilang.
  • Ketika Anda mengklik nama pengguna di layar login, itu beralih ke latar belakang pribadi mereka (wallpaper yang biasa digunakan untuk ruang pertama pada monitor utama).

Saya berasumsi itu baru saja menimpa file gambar cache saya. Tetapi ketika saya pergi untuk menggantinya, tidak ada yang terjadi. Ternyata itu com.apple.desktop.admin.pnghilang sama sekali!

gambar tanpa cache

Tepat setelah mengambil tangkapan layar itu, saya memutuskan untuk melihat-lihat Gambar Desktop dan menemukan latar belakang layar masuk pribadi saya, yang terlihat menjanjikan. Ini berisi satu folder lain, yang mungkin  (edit: dikonfirmasi) berisi latar belakang layar masuk akun administrator saya.

Jawaban:


16

Saya sudah memperbaikinya! Anda harus mengedit gambar HEIC gundukan. Jika Anda mau, ikuti langkah-langkah ini:

1) Pergi Ke: / Perpustakaan / Gambar Desktop /

2) Temukan file yang disebut "Mojave.heic"

3) Simpan salinan sebagai cadangan di tempat lain

4) Pilih gambar yang ingin Anda miliki sebagai gantinya

5) Edit nilai gambar (DPI, ukuran, dll.) Agar sesuai

6) Ubah nama gambar yang diedit ini sebagai Mojave.heic


Pemikiran yang bagus, kecuali ini "menghapus" latar belakang Mojave di panel preferensi Latar Belakang Desktop.
juniorRubyist

Itu pasti bisa diterima! Saya mengambilnya SIP tidak akan memicu, karena sudah masuk /Library? Dan itu harus HEIF, kan? Sebagian besar gambar saya adalah JPEG, jadi saya harus mencari cara untuk mengonversinya untuk ini. Mungkin sip.
SilverWolf - Pasang kembali Monica

Anda bisa mengganti nama seluruh file jpg sebagai Mojave.heic dan berfungsi dengan baik.
Leonard

@ Leonard menarik. Anda sudah mengujinya, dan itu berhasil? Saya cukup terkejut, tapi itu luar biasa!
SilverWolf - Pasang kembali Monica

@ BlackPearl mencoba ini, dan itu tidak berhasil. Saya tidak tahu semua detail dari upaya ini.
SilverWolf - Pasang kembali Monica

6

Memperluas jawaban Leonard :

Anda dapat melakukan ini dengan mengganti Mojave.heiclatar belakang desktop default. Ini tidak memerlukan menonaktifkan SIP , seperti di /Library.

  • Cadangkan /Library/Desktop Pictures/Mojave.heicdengan menyalinnya Mojave.heic.origatau serupa.
  • Dapatkan gambar baru Anda dan skala / tanaman itu untuk persis sesuai layar. Jika Anda tidak tahu resolusi layar Anda, Anda bisa pergi ke > About Mac ini.
  • Ganti Mojave.heicdengan file baru Anda. Jangan khawatir apakah itu JPG atau sejenisnya, masih akan berfungsi bahkan setelah Anda menamainya kembali Mojave.heic. *

  • Jika FileVault Anda diaktifkan, ubah opsi login di System Preferences. Misalnya, apakah akan menampilkan daftar pengguna atau bidang nama dan kata sandi. Ganti saja jika Anda tidak ingin itu diubah.

    Ini karena ketika Anda boot dengan FileVault, pada layar login sistem Anda belum benar-benar melakukan booting sepenuhnya ! Ini sebenarnya menjalankan sistem kecil pada partisi EFI Anda, karena partisi utama Anda dienkripsi. Mengubah opsi masuk akan membuat Preferensi Sistem mengubah pengaturan sistem EFI, termasuk mengambil perubahan wallpaper. Lihat jawaban ini .

  • Reboot dan nikmatilah!

* Saya hanya menguji ini dengan gambar JPEG, tetapi mungkin bisa digunakan untuk jenis lain.


Penghemat waktu yang sama sekali tidak perlu

Saya telah membuat program Swift kecil yang melakukan semua ini untuk Anda (ia mendeteksi versi OS dan berfungsi baik pada Mojave dan versi sebelumnya). Anda perlu Xcode untuk mengompilasinya.

Seharusnya tidak merusak sistem Anda, tapi saya tidak bisa menjamin apa pun - pastikan Anda memiliki cadangan terlebih dahulu!

Ini sekarang juga tersedia di GitHub . Itu mungkin atau mungkin tidak diperbarui di sini di masa depan.

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

Untuk mendapatkan dimensi layar Anda dapat menggunakan NSScreen bingkai properti developer.apple.com/documentation/appkit/nsscreen/1388387-frame
Mateusz Szlosek

Saya mencobanya. Ini mengembalikan ukuran layar "palsu" yang digunakan untuk tata letak, bukan ukuran layar fisik yang sebenarnya.
SilverWolf - Reinstate Monica

Dan mengalikannya dengan faktor skala dukungan tidak berfungsi baik: itu mengembalikan 2 flat untuk saya, meskipun saya menggunakan penskalaan kepadatan yang lebih tinggi. Jadi itu bisa lebih besar atau lebih kecil dari ukuran fisik, tergantung pada pengaturan penskalaan Anda. (:
SilverWolf - Reinstate Monica

Ah OK, saya mengerti maksud Anda :)
Mateusz Szlosek

1
Sayangnya, ini tidak berhasil untuk saya. Saya bahkan mencoba programnya tetapi tidak berhasil. Saya masih mendapatkan gundukan default, bukan gambar saya. Saya memiliki FileVault diaktifkan tetapi saya mengubah opsi masuk seperti yang Anda jelaskan. Ada ide?
Artem M

1

Saya menerima gambar aneh ketika saya baru saja mengganti file dengan JPG, menamainya juga HEIC. Namun, ketika saya mengambil gambar yang saya inginkan sebagai latar belakang dan mengekspornya dalam format HEIC di Pratinjau, semuanya berfungsi dengan baik. Saya bekerja dengan gambar 5333 × 3333 untuk memulai dengan:

  1. Buka gambar yang Anda inginkan sebagai latar belakang Anda di Pratinjau
  2. Dalam Pratinjau, pilih File> Ekspor ...
  3. Atur Format ke HEIC dan Kualitas menjadi yang terbaik (saya mendapatkan gambar yang benar-benar kosong ketika saya mencoba kualitas yang kurang dari "Terbaik")
  4. Ganti nama file yang diekspor sebagai Mojave (ekstensi seharusnya sudah .heic)
  5. Salin gambar yang diekspor ke /Library/Desktop\ Pictures

Saat Anda keluar, Anda akan melihat latar belakang baru Anda. Coba mulai ulang, jika tidak melihat gambar segera muncul.

Jika Anda mengalami masalah dengan mengekspor file sebagai .heic, coba sesuaikan ukuran gambar menggunakan Pratinjau: Alat> Sesuaikan Ukuran. Sebagai permulaan, atur ke ukuran layar Anda seperti yang terlihat di Informasi Sistem> Grafik / Layar.


Terima kasih, senang tahu! Juga, saya menulis sebuah program kecil untuk melakukan semua ini secara otomatis jika Anda tidak ingin mengubah ukurannya dengan Pratinjau, dan sekarang dapat mengekspor ke HEIF. Anda dapat menemukannya di GitHub .
SilverWolf - Pasang kembali Monica
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.