Uso de tarjeta gráfica híbrida INTEL-AMD en Arch Linux

En este tutorial, le mostraré cómo configurar dos tarjetas gráficas, Intel y AMD, en la mayoría de las computadoras portátiles que usan controladores propietarios y de código abierto y cómo cambiar entre ellos.

Visión de conjunto

La mayoría de las computadoras portátiles actuales incluyen dos tarjetas gráficas con diferentes capacidades y consumos de energía, a menudo conocidas como gráfico híbrido.

El primero – IDG – Gráfico integrado: permite ahorrar energía para proteger nuestra batería y la representación 3D de gama baja. A menudo se utiliza para el trabajo diario.
El segundo – GDD – gráfico dedicado: mayor consumo de energía con alto rendimiento de renderizado 3D, generalmente adecuado para juegos, gráficos 3D, renderizado, etc.
Este modelo le da al usuario la posibilidad de elegir la tarjeta gráfica que necesita. ….doplnit
En este artículo, le mostraré cómo instalar con éxito INTEL / ATI controladores propietarios y de código abierto.

Controladores de código abierto

La mejor y más fácil manera es usar controladores de código abierto. No necesita ninguna invención. Solo si desea especificar algunos detalles del dispositivo.
Así que instale los controladores ati e intel y listo.

# pacman -Sy xf86-video-ati xf86-video-intel

De forma predeterminada, sin ningún archivo xorg.conf, el sistema se inicia con el controlador Intel. Para utilizar la tarjeta radeon tienes dos posibilidades:

1. Usando el archivo conf

Si desea una configuración manual, cree

/etc/X11/xorg.conf.d/20-radeon.conf

y agregue lo siguiente:

Section "Device"
    Identifier "Radeon"
    Driver "radeon"
EndSection

A este archivo puede especificar más opciones, por supuesto.

2. Usando PRIME

PRIME es uno de los métodos para cambiar entre IDG y DDG. Para mí funciona bien, así que esta es mi elección.
Primero necesitamos encontrar nuestra tarjeta gráfica:

$ xrandr --listproviders

puedes ver dos tarjetas gráficas

Providers: number : 2
Provider 0: id: 0x7d cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 3 outputs: 4 associated providers: 1 name:Intel
Provider 1: id: 0x56 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 6 outputs: 1 associated providers: 1 name:radeon

El comando

xrandr –setprovideroffloadsink sumidero de proveedor

se puede usar para hacer que un proveedor de descarga de procesamiento envíe su salida al proveedor receptor (el proveedor que tiene una pantalla conectada). Los identificadores de proveedor y sumidero pueden ser numéricos (0x7d, 0x56) o un nombre que distingue entre mayúsculas y minúsculas (Intel, radeon).

$ xrandr --setprovideroutputsource radeon Intel
or
$ xrandr --setprovideroutputsource 0x7d 0x56

Ahora, puede elegir su tarjeta discreta para las aplicaciones que más la necesitan (modeladores 3D, juegos…) anteponiendo el

DRI_PRIME = 1

Variable ambiental:

$ DRI_PRIME=1 your_progam

Para example:

$ DRI_PRIME=1 glxinfo | grep "OpenGL renderer"

da la salida:

OpenGL renderer string: Gallium 0.4 on AMD TURKS

Comparar con

$ glxinfo | grep "OpenGL renderer"
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile

Supongo que es trivial ejecutar xrandr –setprovideroutputsourceradeon Intel
durante los inicios de DE – KDE, GNOME, XFCE4….

Controladores propietarios

Este método es más difícil y necesita más inventos de los usuarios. Los controladores del catalizador, debido a su lento desarrollo, no están en el repositorio oficial, tenemos que construirlos desde AUR.
La mejor manera es instalar el paquete catalyst-total que incluye el controlador, las utilidades del kernel y las utilidades del kernel de 32 bits.

$ yaourt -S catalyst-total

El segundo problema que tenemos que resolver: los controladores de catalizador necesitan xorg hasta la versión 1.17, por lo que tenemos que degradar el servidor xorg.
Usar el repositorio de Vi0L0 es fácil. Agregar el repositorio por encima de todos los demás repositorios en

pacman.conf

[xorg117]
Server = https://catalyst.wirephire.com/repo/xorg117/$arch
## Mirrors, if the primary server does not work or is too slow:
#Server = https://mirror.hactar.bz/Vi0L0/xorg117/$arch

Actualice el sistema, no tenga miedo de eliminar todos los paquetes conflictivos

# pacman -Syuu

Luego de esto es necesario configurar Xorg – crear /etc/X11/xorg.conf expediente. Para esto podemos usar aticonfig:

# aticonfig --initial

Podemos comprobar y corregir el archivo de configuración. Para example:

Section "ServerLayout"
    Identifier     "aticonfig Layout"
    Screen      0  "aticonfig-Screen[0]-0" 0 0
EndSection

Section "Module"
# This loads the DRI/GLX modules
    Load  "glx"
    Load  "dri"
    Load  "dri3"
    Load  "GLcore"
    Load  "dbe"
    Load  "extmod"
EndSection

Section "ServerFlags"
#     Option "AutoAddDevices" "False"
    Option        "AllowEmptyInput" "no"
EndSection

Section "Monitor"
    Identifier   "aticonfig-Monitor[0]-0"
    Option        "VendorName" "ATI Proprietary Driver"
    Option        "ModelName" "Generic Autodetecting Monitor"
    Option        "DPMS" "true"
EndSection

Section "Device"
    Identifier  "aticonfig-Device[0]-0"
    Driver      "fglrx"
    Option        "TexturedXrender" "true"
    Option        "UseFastTLS" "0"
    Option        "OpenGLOverlay" "0"
    Option        "XaaNoOffscreenPixmaps" "false"
    BusID       "PCI:1:0:0"      // sometimes this parametr need to be corrected - try check with lspci

EndSection

Section "Screen"
    Identifier "aticonfig-Screen[0]-0"
    Device     "aticonfig-Device[0]-0"
    Monitor    "aticonfig-Monitor[0]-0"
    DefaultDepth     24
EndSection

Section "DRI"                                   
    Mode         0666    # May help enable direct rendering.
EndSection

Para cambiar entre tarjetas gráficas podemos usar Soporte PowerXpress.
La tecnología PowerXpress permite cambiar las computadoras portátiles con capacidad de gráficos duales de gráficos integrados (IGP) a gráficos discretos, ya sea para aumentar la duración de la batería o para lograr mejores capacidades de representación 3D.

La forma más fácil es usar

pxp_switch_catalizador

script de cambio que realizará algunas operaciones útiles adicionales:

  • Cambiando xorg.conf

    – se renombrará

    xorg.conf

    dentro

    xorg.conf.cat

    (si hay fglrx adentro) o

    xorg.conf.oth

    (si hay información dentro) y luego creará un enlace simbólico a

    xorg.conf

    dependiendo de lo que elijas.

  • Ejecutando aticonfig –px-Xgpu

    .

  • Ejecutando switchlibGL

    .

  • Agregar/eliminar fglrx

    en/desde

    /etc/modules-load.d/catalyst.conf

    .

Uso:

# pxp_switch_catalyst amd
# pxp_switch_catalyst intel

y reiniciar el servidor X

Otra posibilidad es tener un servidor X ejecutándose con IDG (Intel) y más programas consumibles ejecutándose en el segundo servidor X. Inicie su DE con la configuración de ATI y luego cambie el nombre de xorg.conf

# mv /etc/X11/xorg.xonf /etc/X11/xorg.conf.ati

y reinicie el servidor X. Tt utilizará el controlador Intel de forma predeterminada en lugar de fglrx. Para iniciar el segundo servidor X con el controlador fglrx (ATI):

  1. método: para iniciar el segundo servidor X usando fglrx, simplemente mueva xorg.conf

    volver al lugar adecuado (

    /etc/X11/xorg.conf

    ) antes de iniciar la segunda sesión X.

    # mv /etc/X11/xorg.xonf.ati /etc/X11/xorg.conf

    Este método incluso le permite cambiar entre ejecutar X sesiones. Cuando haya terminado de usar fglrx, mueva

    xorg.conf

    otra vez.

  2. método – usando xrun xscript
    este método es casi el mismo que el primero, pero en lugar de copiar xorg.conf de vuelta al lugar correcto, es posible ejecutar un script y dentro de él especificar la ubicación del archivo xorg.conf

– hacer script ejecutable – para example xrun

# nano /usr/bin/xrun
#!/bin/bash
# calculate first available VT
LVT=`fgconsole --next-available`
# calculate first usable display
XNUM="-1"
SOCK="something"
while [ ! -z "$SOCK" ]
do
XNUM=$(( $XNUM + 1 ))
SOCK=$(ls -A -1 /tmp/.X11-unix | grep "X$XNUM" )
done
NEWDISP=":$XNUM"
if [ ! -z "$*" ]
# generate exec line if arguments are given
then
# test if executable exists
 if [ ! -x "$(which $1 2> /dev/null)" ] 
then
echo "$1: No such executable!"
# if running from X, display zenity dialog:
[ -z "$DISPLAY" ] || zenity --error --text="$1: No such executable!" 2> /dev/null
exit 127
fi
# generate exec line
EXECL="$(which $1)"
shift 1
EXECL="$EXECL $*"
EXECPH=""
# prepare to start new X sessions if no arguments passed
else
EXECL=""
EXECPH="New X session"
fi
# if runing from X, display zenity dialog:
[ -z "$DISPLAY" ] || zenity --question --title "Launch?" --text="Will launch "$EXECL$EXECPH"
tty$LVT
X display $NEWDISP
Continue?" 2> /dev/null || exit 1
echo "Will launch "$EXECL$EXECPH" on tty$LVT, X display $NEWDISP..."
[ -z "$DISPLAY" ] && sleep 1s
# This flag is used for indication of unaccessible or broken DRI.
# It is set, for example, when using fglrx+compiz-manager.
# Some games will refuse to start if it is set.
# Unsetting it should not do any harm, and can be useful.
unset LIBGL_ALWAYS_INDIRECT
##########################################################
# main execution
xinit $EXECL  -- $NEWDISP vt$LVT -config xorg1.conf -nolisten tcp -br &
##########################################################
# set our new dislplay
DISPLAY=$NEWDISP
# wait some time for X to load
sleep 4s
# then we set useful parameters
# disable non-linear mouse acceleration
xset m 1 0
# disable hard-coded default 10m screensaver
xset s 0 0
# while X is running, persistently do something useful
# i.e. prevent apps from enabling mouse acceleration and screensaver
while xset -q > /dev/null
do 
xset m 1 0
xset s 0 0
sleep 3s
done
wait
sleep 5

Hazlo ejecutable

# chmod +x /usr/bin/xrun

Para la segunda sesión X, estoy usando un archivo de configuración separado:xorg1.conf porque tuve problema con el teclado y el mouse en la segunda pantalla:

Section "ServerLayout"
    Identifier     "aticonfig Layout"
    Screen      0  "aticonfig-Screen[0]-0" 0 0
EndSection

Section "Module"

# This loads the DRI/GLX modules
    Load  "glx"
    Load  "dri"
    Load  "dri3"
    Load  "GLcore"
    Load  "dbe"
    Load  "extmod"
EndSection

Section "Monitor"
    Identifier   "aticonfig-Monitor[0]-0"
    Option        "VendorName" "ATI Proprietary Driver"
    Option        "ModelName" "Generic Autodetecting Monitor"
    Option        "DPMS" "true"
EndSection

Section "Device"
    Identifier  "aticonfig-Device[0]-0"
    Driver      "fglrx"
    Option        "TexturedXrender" "true"
    Option        "UseFastTLS" "0"
    Option        "OpenGLOverlay" "0"
    Option        "XaaNoOffscreenPixmaps" "false"
    BusID       "PCI:1:0:0"
EndSection

Section "Screen"
    Identifier "aticonfig-Screen[0]-0"
    Device     "aticonfig-Device[0]-0"
    Monitor    "aticonfig-Monitor[0]-0"
    DefaultDepth     24
EndSection

Section "DRI"             # May help enable direct rendering.
    Mode         0666
EndSection

Section "ServerFlags"                # enable keyboard and mouse
    Option "AutoAddDevices" "False"
     Option "AllowEmptyInput" "no" 
EndSection

El uso de esto es bastante simple: si desea ejecutar el programa con una tarjeta gráfica potente (fglrx), simplemente ejecútelo en la segunda pantalla usando xrun

$ xrun glxgears
Usando tarjeta gráfica híbrida INTEL-AMD en Arch Linux – xrun

La única desventaja de estos dos métodos es no tener aceleración 3D usando el controlador Intel. La aceleración 2D, sin embargo, es completamente funcional.

Conclusión

En este tutorial, le mostré posibles formas de usar una tarjeta gráfica híbrida en su computadora portátil. He usado ambos métodos. Hoy estoy usando controladores patentados debido a un mejor rendimiento del juego, por lo que todo está probado y funciona bien.

Referencias

AMD – catalizador en Arch Wiki
https://wiki.archlinux.org/index.php/AMD_Catalyst

AMD – controladores de código abierto – Arch Wiki
https://wiki.archlinux.org/index.php/ATI

Tarjeta gráfica híbrida – Arch wiki
https://wiki.archlinux.org/index.php/hybrid_graphics

Tarjeta gráfica Intel – Arch Wiki
https://wiki.archlinux.org/index.php/Intel_graphics

Related Posts