Intel Graphics 630 headless mode en macOS

Utilizar la tarjeta gráfica integrada Intel UHD Graphics 630 Coffee Lake (procesador i3 9100) en headless mode (modo sin cable, sin conexión con monitor) para ser utilizada por macOS Catalina en tareas de codificación de vídeo, llevando la imagen al monitor con Radeon RX 580, añadiendo codificación y descodificación de vídeo por hardware al sistema.

Nota: mi placa base es Z390 Aorus Elite que con BIOS F10c se cuelga al arrancar macOS inmediatamente después del menú de Clover cuando la tarjeta integrada está habilitada independientemente de que esté conectada a monitor o no, hay que permanecer en la versión F9 que funciona bien.

Nota: basado en el excelente artículo [GUIDE] General Framebuffer Patching Guide (HDMI Black Screen Problem) de CaseySJ y en la funcionalidad Framebuffer patch de la herramienta Hackintool de headkaze.

Nota: instrucciones con Clover r5122 y OpenCore 0.6.2.

En los Mac con tarjeta gráfica integrada (iGPU) y otra dedicada (dGPU) el sistema utiliza la integrada para codificación y descodificación de vídeo. Al construir un Hackintosh con ambos tipos de GPU podemos encontrarnos con que, aunque la dGPU sea mucho más potente que la iGPU, si esta no está bien instalada y reconocida por el sistema falla la codificación de vídeo. Cuando esto sucede pero no queremos tener la iGPU como tarjeta primaria hay que configurar la iGPU como headless mode (se llama así cuando está activa pero sin cable hacia display) para que sea la dGPU la que muestre la imagen pero la integrada esté disponible para codificar/descodificar vídeo.

La instalación de la iGPU depende de 2 factores:

  • placa base porque cada fabricante coloca 1-2-3 puerto/s de salida en la iGPU y la configuración ha de tener en cuenta este detalle
  • generación del procesador Intel, diferentes generaciones de procesador Intel llevan diferentes modelos de iGPU.

Mi PC tiene placa Z390 Aorus Elite + procesador i3 9100 (Coffee Lake Refresh, se configura como Coffee Lake) con Intel UHD Graphics 630 que está en PciRoot(0x0)/Pci(0x2,0x0) cuyo Plattorm ID es 3E9B0007 y su Device ID es 3E910000 + Radeon RX 580 como dGPU. En esta placa solamente hay un conector en la iGPU, es de tipo HDMI v1.4 y se corresponde con el índice 3 en la lista teórica de 3 conectores como máximo que puede llevar este modelo de iGPU:

  • Index 1, BusID 0x00, Type HDMI (el tipo no importa en este puerto)
  • Index 2, BusID 0x00, Type HDMI (el tipo no importa en este puerto)
  • Index 3, BusID 0x04, Type HDMI (este es el puerto activo, el único existente).

Esto tiene importancia al usar la iGPU como tarjeta primaria o única pero no al usarla como headless mode.

Headless mode

  • La iGPU y la dGPU han de estar habilitadas en BIOS con la dGPU como primaria
  • No ha de haber cable entre el puerto de la iGPU y cualquier tipo de display
  • Lilu y WhatEverGreen han de estar bien instaladas
  • SMBIOS iMac19,1
  • Hay que añadir unas propiedades en la sección Devices / DeviceProperties de Clover / OC:
        <key>Properties</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>AwCRPg==</data>  <!-- 0300913e -->
            </dict>
        </dict>
    <key>DeviceProperties</key>
    <dict>
        <key>Add</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>AwCRPg==</data>  <!-- 0300913e -->
            </dict>
        </dict>
        <key>Delete</key>
        <dict/>
    </dict>

Este código lleva los valores data en Base64, también pueden ser vistos como valores hexadecimales aunque con los bytes invertidos (reverse byte order), se puede comprobar con un conversor: AwCRPg== en Base64 (device-id) equivale a 0300913e en hexadecimal (3E910000).

Con estos cambios puedo arrancar desde la dGPU con la iGPU bien reconocida por macOS. Para comprobar si la función VDA Decoder está activada puedes verlo en Hackintool (Fully Suported o Failed en la primera pestaña System) o en la preferencias de la aplicación VideoProc (Aceleración por hardware> Opción> Habilitado o No disponible). En mi caso con la configuración propuesta ambas aplicaciones detectan codificación de vídeo por hardware.

iGPU como tarjeta principal

Como ya se ha comentado en diversos foros, también se puede configurar esta tarjeta para ser la principal de macOS, de manera que emite señal al monitor y también codifica vídeo. Esto es lo que hay que hacer para que funcione así.

  • Lilu y WhatEverGreen han de estar bien instaladas
  • SMBIOS iMac19,1
  • Añadir en config.plist: Boot > Boot Arguments > igfxonln=1
  • Añadir en config.plist: Devices / DeviceProperties de Clover / OC el código que hay debajo
  • Habilitarla en la placa como principal: Initial Display Output IGFX en lugar de PCIe 1 Slot (este sería el paso final).
	      <key>Properties</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x1F,0x3)</key>
            <dict>
                <key>layout-id</key>
                <data>CwAAAA==</data>
                <key>model</key>
                <string>Cannon Lake PCH HD Audio</string>
                <key>hda-gfx</key>
                <string>onboard-2</string>
                <key>AAPL,slot-name</key>
                <string>Internal@0,31,3</string>
                <key>device_type</key>
                <string>Audio device</string>
            </dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>device-id</key>
                <data>kT4AAA==</data>
                <key>AAPL,slot-name</key>
                <string>Internal@0,2,0</string>
                <key>AAPL,ig-platform-id</key>
                <data>BwCbPg==</data>
                <key>framebuffer-con0-busid</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con0-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con0-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con1-busid</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con1-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con1-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-busid</key>
                <data>BAAAAA==</data>
                <key>framebuffer-con2-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con2-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-patch-enable</key>
                <data>AQAAAA==</data>
                <key>device_type</key>
                <string>Display controller</string>
                <key>No-hda-gfx</key>
                <data>AAAAAAAAAAA=</data>
                <key>model</key>
                <string>9 Gen 4-core Desktop Processor</string>
                <key>name</key>
                <string>Intel UHD Graphics 630</string>
            </dict>
        </dict>
   <key>DeviceProperties</key>
    <dict>
        <key>Add</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>BwCbPg==</data>
                <key>device-id</key>
                <data>kT4AAA==</data>
                <key>AAPL,slot-name</key>
                <string>Internal@0,2,0</string>
                <key>framebuffer-con0-busid</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con0-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con0-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con1-busid</key>
                <data>AAAAAA==</data>
                <key>framebuffer-con1-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con1-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-busid</key>
                <data>BAAAAA==</data>
                <key>framebuffer-con2-type</key>
                <data>AAgAAA==</data>
                <key>framebuffer-con2-enable</key>
                <data>AQAAAA==</data>
                <key>framebuffer-con2-flags</key>
                <data>xwMAAA==</data>
                <key>framebuffer-patch-enable</key>
                <data>AQAAAA==</data>
                <key>device_type</key>
                <string>Display controller</string>
                <key>No-hda-gfx</key>
                <data>AAAAAAAAAAA=</data>
                <key>model</key>
                <string>9 Gen 4-core Desktop Processor</string>
                <key>name</key>
                <string>Intel UHD Graphics 630</string>
            </dict>
            <key>PciRoot(0x0)/Pci(0x1F,0x3)</key>
            <dict>
                <key>layout-id</key>
                <data>CwAAAA==</data>
                <key>model</key>
                <string>Cannon Lake PCH HD Audio</string>
                <key>hda-gfx</key>
                <string>onboard-2</string>
                <key>AAPL,slot-name</key>
                <string>Internal@0,31,3</string>
                <key>device_type</key>
                <string>Audio device</string>
            </dict>
        </dict>
        <key>Delete</key>
        <dict/>
    </dict>

Si tienes KP o pantalla negra al salir del reposo hay que reemplazar la propiedad hda-gfx por No-hda-gfx, con ello suelen arreglarse esos fallos al dejar el reposo pero se pierde el audio por HDMI. Reemplaza estas 2 líneas:

				<key>hda-gfx</key>
				<string>onboard-1</string>

por estas otras 2:

				<key>No-hda-gfx</key>
				<data>AAAAAAAAAAA=</data>

De esta forma en Perfil de Sistema se muestran las 2 tarjetas gráficas, iGPU u dGPU.

Cuando audio por HDMI no está desactivado con No-hda-gfx, el dispositivo de audio de la iGPU aparece en Perfil de Sistema tanto en PCI como en Audio y el sonido se transmite bien por el cable HDMI.

Se puede tener la iGPU conectada a un monitor y la dGPU a otro monitor + una TV consiguiendo 3 pantallas utilizando ambas tarjetas simultáneamente.

10 respuestas a «Intel Graphics 630 headless mode en macOS»

    1. Hola. En realidad, para usar esta iGPU (Intel 630 Coffee Lake) en modo sin monitor (hedaless mode) solamente sería preciso añadir 3 propiedades aunque en mi artículo yo añado varias más pero el resto no son imprescindibles y ello debería valer tanto para Mojave desde 10.4.4 como para Catalina. Quedaría así:

      <key>AAPL,ig-platform-id</key>
      <data>BwCbPg==</data> <!– 07009b3e –>
      <key>framebuffer-patch-enable</key>
      <data>AQAAAA==</data> <!– 01000000 –>
      <key>framebuffer-stolenmem</key>
      <data>AAAwAQ==</data> <!– 00003001 –>

      Prueba con estas 3 nada más y, si no funciona bien, pruebas con AAPL,ig-platform-id=0x3E980003 que es otra opción manejada para Mojave 10.4.4 o superior. Recuerda que, si lo miras en modo texto, ves los valores en base64 y que se escriben en modo reverse byte order (3e9b0007 se ve como 07009b3e). 3E980003 sería 0300983e y en base64 es AwCYPg==.
      Yo utilizo SMBIOS de iMac19,1 que es la que mejor funciona incluido entrar y salir del reposo.
      Pero también te digo que hagas esta prueba: iGPU activada en BIOS, dGPU como tarjeta principal, no añadir nada en Devices Properties y SMBIOS de iMac19,1. Con Lilu y WhatEverGreen. He descubierto que con esa configuración tengo codificación y descodificación de vídeo H264 y HEVC porque macOS reconoce que hay una Intel Graphics 630 y la utiliza para esas tareas sin tener que añadir ninguna propiedad al dispositivo. Ya me contarás.

    2. Si lo haces en modo texto, abres config.plist con un editor de texto, el que uses pero para texto plano, sin formato, puede ser TextEdit a cambio de tener las Preferencias como en estas 2 imágenes:
      https://perez987.es/wp-content/dropbox/textedit1.png
      https://perez987.es/wp-content/dropbox/textedit2.png.

      Buscas la sección

      <key>Devices</key>

      y justo antes de

      <key>Audio</key>

      pegas el texto

      <key>Properties</key>
         <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
              <key>AAPL,ig-platform-id</key>
              <data>BwCbPg==</data> <!– 07009b3e –>
              <key>framebuffer-patch-enable</key>
              <data>AQAAAA==</data> <!– 01000000 –>
              <key>framebuffer-stolenmem</key>
              <data>AAAwAQ==</data> <!– 00003001 –>
            </dict>
         </dict>

      de forma que se vería como esto (no te fijes en si las claves que hay debajo de FakeID son idénticas a las tuyas, sólo asegúrate de que el texto que añades está entre el final de las FakeID y el inicio de Audio:

      <key>Devices</key>
         <dict>
            <key>FakeID</key>
            <dict>
               <key>ATI</key>
               <string>0x0</string>
               <key>NVidia</key>
               <string>0x0</string>
               <key>IMEI</key>
               <string>0x0</string>
               <key>LAN</key>
               <string>0x0</string>
               <key>SATA</key>
               <string>0x0</string>
               <key>IntelGFX</key>
               <string>0x0</string>
               <key>XHCI</key>
               <string>0x0</string>
               <key>WIFI</key>
               <string>0x0</string>
            </dict>
            <key>Properties</key>
            <dict>
               <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
               <dict>
                  <key>AAPL,ig-platform-id</key>
                  <data>BwCbPg==</data> <!– 07009b3e –>
                  <key>framebuffer-patch-enable</key>
                  <data>AQAAAA==</data> <!– 01000000 –>
                  <key>framebuffer-stolenmem</key>
                  <data>AAAwAQ==</data> <!– 00003001 –>
               </dict>
            </dict>
            <key>Audio</key>
            <dict>
               <key>ResetHDA</key>
               <false/>
               <key>Inject</key>
               <integer>13</integer>

      Dime qué hardware tienes: placa base, micro y tarjeta gráfica aparte de la integrada.
      Y recuerda lo que te dije antes, sin añadir nada en Clover, con la Intel habilitada en BIOS y SMBIOS de iMac19,1 ¿funciona bien?

      1. Gracias una vez más!
        Te comento mi hardware:

        Gigabyte Z390 Designare. Con la versión de Bios F8.
        Procesador Intel i9 9900k
        Gráfica Sapphire Radeon Pulse RX 580
        Ram 32 Gb Corsair

        Desde hace un año he tenido instalado SMBIOS iMacPro1,1, todo me ha funcionado genial, incluso «VideoProc» me reconoce la aceleración por hardware en la RX580 estando en iMacPro 1,1 tanto en H264 como en HEVC.

        El problema viene a raíz de nuevos trabajos que estoy haciendo con edición de video en Final Cut Pro X, estoy editando un video profesional cuya edición me ha llevado varias semanas y resulta que, durante la reproducción del video, de vez en cuando aparecen glitches o rayas negras de forma intermitente. No puedo entregar así este trabajo y quiero descartar que sea un problema de tarjeta gráfica en sí y no de una mala configuración de Hackintosh para edición de video.

        Entonces, buscando en internet he visto que el SMBIOS iMac19,1 es más estable para FCPX, me he decidido a exportar de nuevo el video desde esta configuración para ver si se solucionan dichos problemas…

        Ahora estoy en iMac19,1. Hice el cambio directamente desde Clover 5.16 desde el apartado SMBIOS. No poniendo nada en properties, activando la IGPU en la Bios pero arrancando con la GPU Slot1, el Hackintosh no me arranca, sí o sí tengo que desactivar la iGPU.

        ¿Qué puedo estar haciendo mal?

        Muchas Gracias una vez más.

  1. Hola, interesante tu post.
    Quería ver si podías ayudarme, tengo una placa Z390 Pro Wifi con un i7-8700K, uso la gráfica nativa y 2 monitores (Uno por HDMI y otro por DisplayPort).

    Cada vez que enciendo el hackintosh me aparecen franjas negras en ambas pantallas, si apago y enciendo una de las pantallas mágicamente todo se arregla y puedo seguir usándolo. Las granjas negras sólo aparecen en la ventana de login, nunca durante el boot (Si hago login las franjas no se van, sólo se van apagando y encendiendo una de las pantallas).

    Sabes qué podría ser?

    Saludos,

    1. Hola, Carlos, veo que estás utilizando la gráfica integrada Intel. No se me ocurren muchas cosas que decirte, en tu caso las normas son 2: tener la iGPU bien configurada en config.plist y tener versiones recientes de Lilu y WhateverGreen. La parte de la iGPU es la más conflictiva, cada modelo de placa base tiene diferente configuración de conectores, por ejemplo la tuya tiene al menos 2, HDMI y DP, pero la mía tiene sólo 1 HDMI. La placa es Gigabyte? Cuántos conectores tiene la iGPU? de qué tipo si son más de 2? Manda tu EFI en ZIP, si por email no te deja usa Wetransfer o algo similar. Mi dirección: eaperez arroba me punto com.

  2. Enhorabuena por el artículo, yo estoy empezando con hackintosh, tengo mi boot con open core, placa gigabyte aorus z390 i pro wifi (la mini itx) con i9 9900k y rx580 pulse de Saphire, ¿cómo sería el parche que tendría que ponerle para tener headless mode y así poder aprovechar la aceleración por hardware de la IGpu? (la placa sólo tiene una salida hdmi por si sirve de algo), gracias.

    1. Hola, Paco, el código para headless mode depende de la iGPU y de la generación del micro, el tuyo es 9ª generación igual que el mío por lo que has de probar el mismo código. No es diferente por ser distinta placa base.

      • iGPU activada en BIOS (ya la tienes)
      • dGPU como principal en BIOS
      • cable al monitor desde la dGPU
      • Lilu y WhateverGreen versiones recientes
      • SMBIOS de iMac19,1
      • en config.plist / DeviceProperties / Add añades el código que tengo más arriba en el artículo, en el apartado Headless Mode.

      Si tienes dudas, manda tu EFI en ZIP a eaperez arroba me punto com. A veces los programas de correo no aceptan adjuntar este tipo de archivos por email, en ese caso has de usar Wetransfer o similar.

Deja una respuesta

(La dirección de email no es necesaria)