Laptop parlaklık ayarı | AppleBacklightFixup.kext

  • Konuyu başlatan MF
  • Başlangıç Tarihi
  • Mesaj 5
  • Görüntüleme 2B
Ön bilgilendirme

macOS ve OS X'te dizüstü bilgisayarların dahili ekranları için arka ışık kontrolünün nasıl uygulanacağı konusunda hızlı bir rehber olacaktır.

Not: Eski yöntem parlaklık kısayollarını etkinleştirmek için hala kullanışlı. SysPrefs -> Displays ile parlaklığı çalıştırdıktan sonra, parlaklık kısayollarını etkinleştirmek için eski rehbere başvurabilirsiniz.

Yalnız, IntelBacklight.kext ve ACPIBacklight.kext çözümleri 10.12.4 güncellemesiyle birlikte etkisini yitirdi.

Bu rehber yeni başlayanlar için biraz karmaşık olabilir. Rehberi basitleştirmek adına birlikte çalışarak çözümü oluşturan şu ilk bileşeni kullanacağız:
  • Bir adet önceden hazırlanmış AppleBacklightFixup.kext
  • AppleBacklight.kext'i aktifleştirmek için SSDT-PNLF.aml
Gereksinimler
  • Bu rehber sadece Intel GPU'ya sahip laptoplar içindir.
  • Arrandale, Sandy Bridge, Ivy Bridge, Haswell, Broadwell, Skylake ve Kaby Lake işlemcilerde çalışacaktır.
  • Coffee Lake grafik/parlaklık kontrolü için çalışmalar devam etmektedir.
Hazırlık

En son AppleBacklightFixup.kext sürümünü ve SSDT-PNLF.aml dosyasını buradan indirin:

  • AppleBacklightFixup.kext dosyasını ZIP dosyası içindeki Release klasöründe bulabilirsiniz.
  • SSDT-PNLF.aml dosyasını da kök dizin (root) içinde bulacaksınız.

Not: AppleBacklightFixup.kext, Lilu.kext gerektirmektedir. Clover kurulumdaysanız buna muhtemelen sahipsinizdir.

Kurulum

Bu yöntem için üç bileşen gerekmektedir.
  • ACPI/patched içindeki SSDT-PNLF.aml dosyası
  • /L/E altına kurulan AppleBacklightFixup.kext
Not: Halihazırda Parlaklık (PNLF) yaması ile DSDT veya SSDT yamaladıysanız bunu kaldırmanız şart! Aynısı Clover'ın AddPNLF_1000000 veya AddPNLF (config.plist/ACPI/DSDT/Fixes altındaki) yamalarını kullanmanız durumunda da geçerlidir.

Diğer Not: SSDT-PNLF.aml dosyası, GFX0'ın (Thinkpad cihazlarda VID) IGPU olarak isimlendirildiğini varsaymaktadır. Eğer IGPU _SB.PCI0.IGPU altında değilse çalışmayacaktır.


SSDT-PNLF.aml dosyasını diskin EFI bölümündeki EFI/Clover/ACPI/patched dizinine kopyalayın. config.plist içinde SortedOrder kullanıyorsanız SSDT-PNLF.aml'yi eklediğinizden emin olun. SSDT-PNLF.aml, OEM SSDT'den sonra yüklenmeli. Birçok laptop için IGPU (eski adıyla GFX0) SSDT içinde tanımlıdır, DSDT içinde değil! SSDT-PNLF bunun halihazırda tanımlı olmasına bağlı olduğundan IGPU'yu tanımlayan OEM SSDT'den sonra yüklenmelidir.


ZIP dosyasını çıkardıktan sonra AppleBacklightFixup.kext'i \L\E dizinine yükleyin. Bu örnek dosyanın ~/Downloads dizine indirilip çıkarıldığını varsaymaktadır:
Kod:
sudo cp -R ~/Downloads/RehabMan-BacklightFixup*/Release/AppleBacklightFixup.kext /Library/Extensions
IntelBacklight.kext ve ACPIBacklight.kext'i nereye yüklediyseniz kaldırın.

Kurulum sonrası kernel cache kontrolü yapmanızda fayda var:
Kod:
sudo kextcache -i /
Sonra yeniden başlatın.

Özelleştirme

Bazı durumlarda, framebuffer özelliklerinizi eşlemekte kullanılan PWMMax değerini değiştirmek isteyebilirsiniz. Bu özellikle tipik bir IG-Platform-ID kullanmadığınızda ve bu IG-Platform-ID'nin farklı bir PWMMax değeri kullandığı durumlarda gereklidir.

Örnek olarak şu Haswell IG-Platform-ID'yi ele alalım: 0xa2e0008
Bu ID, 0xad9 yerine 0x56c kullanmaktadır, burada da olduğu gibi: 0xa260006

İşte bu durumda, Device-ID'ye göre belirlenen PWMMax değeri IG-Platform-ID'niz ile uyuşmayacağından dolayı özel bir LMAX değeri belirtmeniz gerekecektir.

Bunu da ACPI/patched dizinine SSDT-RMCF.aml dosyası atarak yapabilirsiniz. Bu dosyayı hotpatch klasöründe bulabilirsiniz: RehabMan/OS-X-Clover-Laptop-Config

ACPI .dsl kodunu değiştirmek meşakkatli olduğundan bunu halihazırda bildiğinizi varsayacağız. MaciASL size tanıdık gelmiyorsa buraya bakın:


Örneğin arka ışık için PWMMax bu şekilde ayarlanıyor:

Bunu:
Kod:
  // LMAX: Backlight PWM MAX.  Must match framebuffer in use.
        //
        // Ones: Default will be used (0x710 for Ivy/Sandy, 0xad9 for Haswell/Broadwell)
        // Other values: must match framebuffer
        Name(LMAX, Ones)
Bununla değiştirerek:
Kod:
// LMAX: Backlight PWM MAX.  Must match framebuffer in use.
        //
        // Ones: Default will be used (0x710 for Ivy/Sandy, 0xad9 for Haswell/Broadwell)
        // Other values: must match framebuffer
        Name(LMAX, 0x56c)

Display ID bağımlılıkları (dependencies)

EDID içerisindeki bazı product/display-ID'leri problem yaratıyor. Buna karşın bu rehberde kullanılan yamalar AppleBacklight içindeki FxxTxxxx profil seçimini doğru bir şekilde yapmayı başaracaktır. Belirli ID'lerin bazı yerlerinde arka ışığın çalışmamasına neden olan özel durum kodu bulunuyor.

Bunu çözmek için yamalanmış bir EDID enjekte etmeniz gerekiyor...

Eğer Clover otomatik olarak EDID tespiti yapabiliyorsa en kolay çözüm Clover'ın özel EDID'i yamalanmış product-id ile birlikte otomatik olarak enjekte edebileceği biçimde config.plist'i değiştirmek olacaktır. Çalıştığı bilinen product-id: 0x9c7c

Yapılacak değişiklikler:
  1. config.plist/Graphics/EDID/Inject=true
  2. config.plist/Graphics/EDID/ProductID=0x9c7c
Not: EDID/ProductID seçeneği ile özel EDID'inizi yamalayamazsınız! config.plist/Graphics/CustomEDID ya da config.plist/Graphics/EDID/Custom ile EDID tanımlamaya çalıştığınızda o ayar görmezden gelinir. Bu yüzden EDID verisinin doğrudan kendisini yamalamalısınız.

Not: WhateverGreen.kext kullanıldığında tüm IGPU özellikleri, config.plist/Devices/Properties kullanılarak enjekte edilir.

Not: IGPU altında EDID enjeksiyonu, AAPL00,override-no-connect bileşeni enjekte edilerek yapıldığından config.plist/Devices/Properties kullanıldığında config.plist/Graphics tabanlı enjeksiyon (config.plist/Graphics/EDID da dahil) çalışmamaktadır. Dolayısıyla EDID'i sadece config.plist/Devices/Properties kullanarak enjekte etmeniz gerekiyor.

Bu sorun bitbucket üzerindeki Clover_v2.4k_r4701.RM-4961.695d25a4.zip ile "çözülmüştür". Aynı çözüm gelecekteki resmi Clover sürümlerinde yer almalıdır. Devices/Properties/PciRoot(0)/Pci(0x02,0) kısmındaki "AAPL00,override-no-connect" bileşenini etkinleştirmeyi unutmayın. (Clover EDID'i tanıdığı sürece EDID'i doldurmaya gerek yok ama EDID'in hazır ve boş olması önemli.)

Örnek:

1588020359909.png

1588020368165.png


Bazı laptoplarda (Sony, Fujitsu gibi birkaç tanesinden bahsetmek gerekirse) Clover EDID'i tespit edemeyebilir. Bunu Clover bootlog altındaki EDID boyutunun 0 olup olmadığına bakarak anlayacaksınız. Eğer 0 ise tespit edememiştir. Bu durumda muhtemelen halihazırda çıkarılmış bir EDID enjeksiyonu yapıyorsunuz demektir çünkü diğer türlü dahili ekranınız çalışmazdı.

Bu durumda EDID verileri arasından product-id'yi 0x9c7c olarak değiştirin. Ayrıca macOS/OS X bunu kontrol etmiyor gibi görünse de yamalama sonrası EDID checksum bilgisini yeni checksum ile uyuşacak şekilde güncelleyin.

tonymacx86 kullanıcısı @tosbaha, 0x9c7c product-id ile EDID'inizi sizin için yamalayacak bir Ruby scripti hazırladı. Detaylar için: Fixing Brightness with Custom EDID

Yeniden başlatmalar arasında arka ışık seviyesini kaydetme ve geri yükleme

AppleBacklight.kext, anlık parlaklık seviyesini yeniden başlatmalar arasında geri yükleme için NVRAM'de tutmaktadır. Bunu tam olarak 'backlight-level' adlı NVRAM değişkeninde saklıyor.

Kaydet/geri yükle sisteminin çalışması için NVRAM'e düzgün bir şekilde entegre olmanız gerekiyor. Bazı laptoplarda yerleşik NVRAM çalışmayabiliyor, bu durumda EmuVariableUefi-64.efi'ye ihtiyacınız var. Eğer drivers64UEFI dizininde EmuVariableUefi-64.efi dosyası olmazsa yerleşik NVRAM çalışır, eğer olursa emüle edilen NVRAM kullanılır, kapanışta diske kaydedilir (nvram.plist) ve açılışta yüklenir. Emüle edilen VRAM'in çalışabilmesi için Clover yükleyicisi içindeki "RC scripts" bileşenini yüklemiş olmanız gerekir. "RC scripts" yüklenmemiş olduğunda drivers64UEFI klasöründe EmuVariableUefi-64.efi varsa NVRAM ayarları hiçbir zaman nvram.plist'e kaydedilemeyecektir.


AptioMemoryFix.efi yerine OsxAptioFix*.efi kullanırsanız bazı bilgisayarda EmuVariableUefi-64.efi olmadan da yerleşik NVRAM'i çalıştırmayı başarmanız mümkün. Bu yüzden AptioMemoryFix.efi denemeye değer. Yalnız AptioMemoryFix.efi'nin daha yeni olduğunu göz önünde bulundurun. Herkeste beklenen sonucu veremeyebilir.

Ayrıca, config.plist dosyanızda config.plist/SystemParameters/BacklightLevel adlı bir girdinin bulunmadığından emin olun! Clover'ın arka ışık seviyesini NVRAM değerinden farklı bir değere çekmesini istemezsiniz ;)

Son olarak, Clover Options -> Graphics Injector yolunu ziyaret ederseniz Backlight Level değerinin 0xFFFF olduğunu görebilirsiniz. Eğer o menüden çıkış yaparsanız Clover o değeri enjekte edecek ve NVRAM'i geçersiz kılacaktır! Bunu da doğal olarak istemezsiniz. O yüzden Options -> Graphics Injector menüsünden çıkış yaparken Backlight Level değerini silin.

Ortam Işık Sensörü

Bazı laptopların DSDT yapısında tanımlı bir ortam ışık sensörü bulunmaktadır. Bu, çoğu zaman macOS/OS X ortam ışık sensör sürücüsü (bu sürücülerin Mac SMC bağımlılıkları vardır) ile uyumlu olmadığından arka ışık geri yüklemesinde çakışmaya neden olacaktır.

Bu tür aygıtlar _STA'nın 0 döndürecek şekilde ayarlanmasıyla devre dışı bırakılmalıdır.

DSDT'nizi (SSDT de olur) ortam ışık sensörü için kontrol edebilirsiniz. Bunun için _HID tanımlayıcısına bakmanız yeterli: ACPI0008

Örneğin:

Kod:
Device (ALSD)
    {
        Name (_HID, "ACPI0008")  // _HID: Hardware ID
        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            If ((ALSE == 0x02))
            {
                Return (0x0B)
            }

            Return (Zero)
        }
...

_STA metodunu 0 döndürmesi için düzenleyebilirsiniz:

Kod:
Device (ALSD)
    {
        Name (_HID, "ACPI0008")  // _HID: Hardware ID
        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            Return (0)
        }
...

Bazı sistemlerde Fake ALS cihazına (hiç değişmeyen) ve uyumlu FakeSMS sürümüne sahip olmanız gerekebilir:

Hiç değişmeyen, sahte ALS için çalışacak küçük bir SSDT-ALS0.dsl:

Kod:
// Fake ambient light sensor device
DefinitionBlock("", "SSDT", 2, "hack", "ALS0", 0)
{
Device(_SB.ALS0)
{
Name(_HID, "ACPI0008")
Name(_CID, "smc-als")
Name(_ALI, 300)
Name(_ALR, Package()
{
//Package() { 70, 0 },
//Package() { 73, 10 },
//Package() { 85, 80 },
Package() { 100, 300 },
//Package() { 150, 1000 },
})
}
}
//EOF
Gördüğünüz gibi yukarıdaki sürüm _ALI için her zaman 300 döndürecek ve _ALR için sadece bir adet haritalamaya sahiptir: a neutral mapping (100) for 300 lux)​
Bu, Sistem->Ekran altındaki "Parlaklığı otomatik ayarla" seçeneğini devreye sokuyor. Belki parlaklık geri yüklemesini çözmek için de yeterlidir (ve hiçbir yerleşik ACPI'nin hiçbir detayına gerek duymadan).​
Kaynak: [Guide] Laptop backlight control using AppleBacklightFixup.kext
 
Son düzenleme:

Geri
Yukarı