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