MacOS Mojave'de giriş ekranı arka planını nasıl değiştirebilirim?


21

Sadece macOS Mojave'ye güncelledim ve hemen birkaç şey fark ettim:

  • Özel giriş ekranı duvar kağıdım gitti.
  • Giriş ekranında bir kullanıcının adını tıkladığınızda, kişisel arka planına (birincil monitördeki ilk alan için normal duvar kağıdı) geçer.

Önbelleğe alınmış resim dosyamın üzerine yazdığını varsaydım. Ama yerine koymaya gittiğimde hiçbir şey olmadı. Tamamen com.apple.desktop.admin.pnggitti!

no-önbelleğe-görüntü

Bu ekran görüntüsünü aldıktan hemen sonra Masaüstü Resimleri'ne girmeye karar verdim ve umut verici görünen kişisel giriş ekranı arka planımı buldum. Bir klasör daha içerir. muhtemelen  (değiştir: onaylandı) yönetici hesabımın giriş ekranı arka planını içeriyor.

Yanıtlar:


16

Çözdüm! Dune HEIC resmini düzenlemelisiniz. İsterseniz şu adımları izleyin:

1) Git: / Kütüphane / Masaüstü Resimleri /

2) "Mojave.heic" adlı dosyayı bulun

3) Bir kopyayı başka bir yere yedek olarak kaydedin

4) Bunun yerine olmasını istediğiniz resmi seçin

5) Görüntü değerlerini (DPI, boyut vb.) Sığdırmak için düzenleyin

6) Bu düzenlenmiş resmi Mojave.heic olarak yeniden adlandırın


Bunun dışında Masaüstü Arka Planı tercih bölmesindeki Mojave arka planı "kaldırılır".
juniorRubyist

Bu kesinlikle kabul edilebilir! SIP'i tetikleyemeyeceğim, çünkü içeride /Librarymi? Ve HEIF olmalı, değil mi? Görüntülerimin çoğu JPEG'dir, bu yüzden bunları bunun için dönüştürmenin bir yolunu bulmam gerekecek. Belki sip.
SilverWolf - Monica'yı

Sadece bir jpg dosyasını Mojave.heic olarak yeniden adlandırabilirsiniz ve gayet iyi çalışıyor.
Leonard

@Leonard İlginç. Bunu test ettin ve işe yarıyor mu? Çok şaşırdım, ama bu harika!
SilverWolf - Monica'yı

@BlackPearl bunu denedi ve işe yaramadı. Yine de girişimin tüm özelliklerini bilmiyorum.
SilverWolf - Monica'yı

6

Leonard'ın cevabına genişleyen :

Bunu, Mojave.heicvarsayılan masaüstü arka planını değiştirerek yapabilirsiniz . Bu , olduğu gibi SIP'in devre dışı bırakılmasını gerektirmez/Library .

  • /Library/Desktop Pictures/Mojave.heicBirine Mojave.heic.origveya benzeri bir yere kopyalayarak yedekleyin .
  • Yeni görüntünüzü alın ve ekrana tam olarak uyacak şekilde ölçeklendirin / kırpın . Ekran çözünürlüğünüzü bilmiyorsanız, > Bu Mac Hakkında'ya gidebilirsiniz.
  • Mojave.heicYeni dosyanızla değiştirin . JPG veya benzeri ise endişelenmeyin, yeniden adlandırdıktan sonra bile çalışmaya devam edecektir Mojave.heic. *

  • Eğer varsa FileVault etkin, Sistem Tercihler bir giriş seçeneğini değiştirin. Örneğin, bir kullanıcı listesi veya ad ve şifre alanlarının gösterilip gösterilmeyeceği. Sadece değişmesini istemiyorsanız, geri değiştirin.

    Bunun nedeni, FileVault ile önyükleme yaptığınızda, giriş ekranında sisteminizin gerçekten önyükleme yapmadığıdır ! Ana bölümünüz şifreli olduğu için aslında EFI bölümünüzde küçük bir sistem çalıştırıyor. Bir oturum açma seçeneğinin değiştirilmesi, Sistem Tercihleri'nin duvar kağıdı değişikliğinin alınması da dahil olmak üzere EFI sisteminin ayarlarını değiştirmesini sağlar. Bu cevaba bakınız .

  • Yeniden başlatın ve tadını çıkarın!

* Bunu sadece JPEG görüntülerle test ettim, ancak diğer türler için de işe yarayabilir.


Tamamen Gereksiz Timesaver

Tüm bunları sizin için yapan küçük bir Swift programı yaptım (işletim sistemi sürümünü algılar ve hem Mojave hem de önceki sürümlerde çalışır). Derlemek için Xcode'a ihtiyacınız olacak.

Sisteminizi bozmamalıdır, ancak hiçbir şey garanti edemiyorum - önce yedekleriniz olduğundan emin olun!

Bu artık GitHub'da da mevcuttur . Gelecekte burada güncellenebilir veya güncellenmeyebilir.

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

Ekran boyutlarını almak için NSScreen çerçeve özelliğini geliştirebilirsiniz. Geliştirici.apple.com/
Mateusz Szlosek

Bunu denedim. Düzen için kullanılan "sahte" ekran boyutunu döndürür, gerçek fiziksel ekran boyutunu değil.
SilverWolf - Monica'yı

Ve destek ölçeği faktörü ile çarpmak da işe yaramıyor: daha yüksek yoğunluklu ölçekleme kullanmama rağmen benim için düz bir 2 döndürüyor. Bu nedenle, ölçekleme ayarlarınıza bağlı olarak fiziksel boyuttan daha büyük veya daha küçük olabilir. (:
SilverWolf - Monica'yı

Ah Tamam, ne demek istediğini anlıyorum :)
Mateusz Szlosek

1
Ne yazık ki, bu benim için işe yaramadı. Programı denedim ama başarılı olamadım. Hala resmim yerine varsayılan kumul alıyorum. FileVault'u etkinleştirdim ancak açıkladığınız gibi giriş seçeneğini değiştirdim. Herhangi bir fikir?
Artem M

1

Dosyayı bir JPG ile değiştirdiğimde çok HEIC olarak değiştirdiğimde garip bir resim alıyorum. Ancak, arka plan olarak istediğim görüntüyü çekip Önizleme'de HEIC formatında dışa aktardığımda her şey harika çalışıyor. Başlamak için 5333 × 3333 resimle çalışıyordum:

  1. Önizlemede istediğiniz görüntüyü önizlemede aç
  2. Önizleme'de Dosya> Dışa Aktar ... 'ı seçin.
  3. Biçimi HEIC ve Kaliteye en iyi şekilde ayarlayın ("En İyi" den daha düşük bir kaliteyi denediğimde tamamen boş bir görüntü elde ettim)
  4. Dışa aktarılan dosyayı Mojave olarak yeniden adlandırın (uzantı zaten .heic olmalıdır)
  5. Dışa aktarılan resmi şuraya kopyala /Library/Desktop\ Pictures

Çıkış yaptığınızda yeni arka planınızı görmelisiniz. Resmin hemen görünmediğini yeniden başlatmayı deneyin.

Dosyayı .heic olarak dışa aktarmayla ilgili sorun yaşarsanız Önizleme: Araçlar> Boyutu Ayarla'yı kullanarak görüntünün boyutunu ayarlamayı deneyin. Başlangıç ​​olarak, Sistem Bilgileri> Grafikler / Ekranlar'da görüldüğü gibi ekranınızın boyutuna ayarlayın.


Teşekkür ederim, bilmek güzel! Ayrıca, Önizleme ile yeniden boyutlandırmak istemiyorsanız tüm bunları otomatik olarak yapmak için küçük bir program yazdım ve şimdi HEIF'e dışa aktarabilir. GitHub'da bulabilirsiniz .
SilverWolf - Monica'yı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.