macOS Mojave에서 로그인 화면 배경을 어떻게 변경합니까?


21

방금 macOS Mojave로 업데이트하고 즉시 몇 가지 사항을 발견했습니다.

  • 사용자 정의 로그인 화면 배경 무늬가 사라졌습니다.
  • 로그인 화면에서 사용자 이름을 클릭하면 개인 배경 (기본 모니터의 첫 번째 공간에 대한 일반적인 배경 화면)으로 전환됩니다.

캐시 된 이미지 파일을 덮어 쓴 것으로 가정했습니다. 그러나 교체하려고했을 때 아무 일도 일어나지 않았습니다. 그것은 com.apple.desktop.admin.png완전히 사라졌습니다!

캐시되지 않은 이미지

스크린 샷을 찍 자마자 데스크톱 사진을보고 개인 로그인 화면 배경을 찾았습니다. 하나의 다른 폴더가 포함되어 있습니다. 아마  (편집 : 확인 됨) 내 관리자 계정의 로그인 화면 배경이 포함되어 있습니다.

답변:


16

내가 고쳤다! 모래 언덕 HEIC 사진을 편집해야합니다. 원한다면 다음 단계를 따르십시오.

1) 이동 : / Library / Desktop Pictures /

2) "Mojave.heic"파일을 찾으십시오

3) 사본을 다른 곳에 백업으로 저장

4) 대신에 원하는 사진을 선택하십시오

5) 이미지 값 (DPI, 크기 등)을 맞게 편집

6)이 편집 된 사진의 이름을 Mojave.heic로 바꿉니다.


데스크톱 배경 환경 설정 패널에서 Mojave 배경을 "제거"한다는 점을 제외하고는 좋은 생각입니다.
juniorRubyist

확실히 받아 들일 수 있습니다! SIP가 있기 때문에 SIP가 트리거되지 않습니다 /Library. 그리고 HEIF 여야합니다. 내 이미지의 대부분은 JPEG이므로이를 변환하는 방법을 찾아야합니다. 아마 sip.
SilverWolf-복 직원 모니카

전체 jpg 파일의 이름을 Mojave.heic으로 바꿀 수 있으며 정상적으로 작동합니다.
레너드

@Leonard 흥미로운. 당신은 그것을 테스트하고 작동합니까? 나는 놀랐다. 그러나 그것은 훌륭하다!
SilverWolf-복원 모니카

@BlackPearl이 시도했지만 작동하지 않았습니다. 그러나 시도의 모든 세부 사항을 모릅니다.
SilverWolf-복원 모니카

6

Leonard의 답변을 확장 :

Mojave.heic기본 바탕 화면 배경 을 바꾸면 됩니다. 이 SIP을 사용하지 않도록 설정이 필요하지 않습니다 가에 있어요 같이 /Library.

  • /Library/Desktop Pictures/Mojave.heic복사 Mojave.heic.orig하거나 이와 유사한 방식으로 백업하십시오 .
  • 새 이미지를 가져 와서 디스플레이 에 정확하게 맞게 크기를 조정하거나 자릅니다 . 화면 해상도를 모르면 >이 매킨토시에 관하여로 ​​이동하십시오.
  • Mojave.heic새 파일로 교체하십시오 . JPG 또는 이와 유사한 경우 걱정하지 마십시오 Mojave.heic. 이름을으로 바꾸어도 여전히 작동합니다 . *

  • FileVault를 활성화 한 경우 시스템 환경 설정에서 로그인 옵션을 변경하십시오. 예를 들어, 사용자 목록을 표시할지, 이름 및 비밀번호 필드를 표시할지 여부입니다. 실제로 변경하지 않으려면 다시 변경하십시오.

    FileVault로 부팅 할 때 로그인 화면에서 시스템이 완전히 부팅되지 않았기 때문입니다 ! 기본 파티션이 암호화되어 있기 때문에 실제로 EFI 파티션에서 작은 시스템을 실행하고 있습니다. 로그인 옵션을 변경하면 시스템 환경 설정이 배경 화면 변경 선택을 포함하여 EFI 시스템 설정을 변경합니다. 이 답변을 참조하십시오 .

  • 재부팅하고 즐기십시오!

* JPEG 이미지로만 테스트했지만 다른 유형에서는 작동 할 수 있습니다.


완전히 불필요한 타임 세이버

나는 당신을 위해이 모든 것을하는 작은 Swift 프로그램을 만들었습니다 (OS 버전을 감지하고 Mojave 및 이전 버전 모두에서 작동합니다). 컴파일하려면 Xcode가 필요합니다.

시스템을 망가뜨릴 수는 없지만 보장 할 수는 없습니다 . 먼저 백업이 있는지 확인하십시오!

이것은 이제 GitHub 에서도 사용할 수 있습니다 . 나중에 여기에서 업데이트되거나 업데이트되지 않을 수 있습니다.

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

화면 크기를 얻으려면 NSScreen 프레임 속성 사용할 수 있습니다 developer.apple.com/documentation/appkit/nsscreen/1388387-frame을
마테우스 Szlosek

나는 그것을 시도했다. 실제 실제 화면 크기가 아니라 레이아웃에 사용 된 "가짜"화면 크기를 반환합니다.
SilverWolf-복원 Monica Monica

백킹 스케일 팩터를 곱해도 작동하지 않습니다. 높은 밀도 스케일링을 사용하더라도 플랫 2를 반환합니다. 따라서 스케일링 설정에 따라 실제 크기보다 크거나 작을 수 있습니다. (:
SilverWolf-복원 Monica Monica

아 좋아, 나는 당신이 의미하는 것을 얻는다 :)
Mateusz Szlosek

1
불행히도, 이것은 나를 위해 작동하지 않았습니다. 나는 프로그램을 시도했지만 성공하지 못했습니다. 여전히 내 사진 대신 기본 모래 언덕이 나타납니다. FileVault를 활성화했지만 설명대로 로그인 옵션을 변경했습니다. 어떤 아이디어?
Artem M

1

파일을 JPG로 바꾸어 너무 HEIC로 바꾸면 이상한 이미지가 나타납니다. 그러나 이미지를 배경으로 사용하고 미리보기에서 HEIC 형식으로 내 보내면 모두 훌륭하게 작동합니다. 5333 × 3333 이미지로 작업하면서 시작했습니다.

  1. 미리보기에서 배경으로 원하는 이미지 열기
  2. 미리보기에서 파일> 내보내기 ...를 선택하십시오.
  3. 형식을 HEIC으로 설정하고 품질을 최상으로 설정하십시오 ( "최고"보다 낮은 품질을 시도했을 때 완전히 빈 이미지가 나타남)
  4. 내 보낸 파일의 이름을 Mojave로 바꿉니다 (확장자는 .heic이어야합니다).
  5. 내 보낸 이미지를에 복사 /Library/Desktop\ Pictures

로그 아웃하면 새로운 배경이 나타납니다. 이미지가 바로 표시되지 않으면 다시 시작하십시오.

파일을 .heic으로 내보내는 데 문제가 발생하면 미리보기 : 도구> 크기 조정을 사용하여 이미지 크기를 조정하십시오. 시작으로 시스템 정보> 그래픽 / 디스플레이에 표시된대로 화면 크기로 설정하십시오.


알고 감사합니다! 또한 미리보기로 크기를 조정하지 않으려는 경우 자동 으로이 모든 작업을 수행하는 작은 프로그램을 작성했으며 이제는 HEIF로 내보낼 수 있습니다. GitHub에서 찾을 수 있습니다 .
SilverWolf-복원 Monica Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.