Gráficos Intercambiables en Linux

Como Manejar Gráficos Intercambiables en GNU/Linux

Si dispones de un portátil de reciente adquisición que disponga de gráficos híbridos, y te planteas utilizar alguna distribución GNU/Linux en él, esta guía te va a ayudar a sacar partido al sistema de gráficos intercambiables en Linux. Así pues, podrás aprender a conmutar entre las dos gráficas de igual modo que lo harías desde Windows.

Lo más habitual en estos escenarios es disponer de un sistema de gráficos compuesto por una GPU integrada, generalmente Intel, mas una GPU discreta o dedicada, de mayor potencia, y que suele ser AMD/ATI o NVIDIA. Las combinaciones pueden ser múltiples, y el modo de operar puede variar en función de la combinación que se presente.

Desde Windows, esto no suele suponer un problema, pues los drivers de la gráfica discreta ya se encargan de manejar el cambio de GPU en función de las preferencias del usuario, o de las necesidades momentáneas de rendimiento y ahorro energético. Además, la GPU que no se usa está apagada, hecho que en Linux no suele ocurrir.

Gestionar gráficos intercambiables en Linux utilizando la herramienta ‘vga_switcheroo’

En distribuciones GNU/Linux, sin embargo, la cosa puede ser más complicada, ya que normalmente el soporte oficial por parte del fabricante es mucho más limitado. Aún así, si que existen algunos mecanismos que nos permiten sacar más partido de aquellos portátiles que dispongan de gráficos híbridos.

Para este caso, voy a hacer uso de la herramienta ‘vga_switcheroo’, integrada por defecto en el kernel, y que nos permite manejar gráficos intercambiables en Linux. La idea es poder conmutar de gráficos en función de tus preferencias, y apagar la GPU que no da señal pero que por defecto sigue encendida.

El mecanismo viene integrado en el kernel Linux desde la versión 2.6.35. Es importante destacar que el método que expondré solo funciona cuando la GPU opera con los drivers open source integrados en el kernel, véase ‘radeon’ en el caso de gráficas AMD/ATI y ‘nouveau’ en el caso de NVIDIA.

Comprobar si el mecanismo ‘vga_switcheroo’ está habilitado

El primer paso es comprobar que el mecanismo esta habilitado. Para ello, el primer paso es loguearte como usuario administrador o root con el siguiente comando:

$ sudo su

A continuación, es conveniente verificar que el kernel está compilado con la opción ‘modeset=1’ en el arranque. Para ello, debes teclear la siguiente linea en la terminal:

 # grep -i switcheroo /boot/config-*

Finalmente, para saber si el mecanismo está habilitado, es recomendable comprobar que existe el fichero correspondiente con el siguiente comando:

# ls -l /sys/kernel/debug/vgaswitcheroo/switch

Si aparece el fichero, significa que, en principio, ya se puede emplear el mecanismo. Habiendo hecho esto, nada mejor que empezar comprobando el estado de las gráficas.

Comprobar el estado de la GPU

Para empezar, la siguiente linea te permitirá conocer el estado de los gráficos. Concretamente, muestra si la tarjeta gráfica está encendida o apagada (Pwr/Off), y si está activa o no (+/  ).

# cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :Pwr:0000:01:00.0

En este caso, podrás ver que tanto la GPU integrada (IGD) como la discreta (DIS) están ambas encendidas. Sin embargo, pero la gráfica integrada es la que está dando señal, mientras que la discreta está inactiva.

Conmutar los gráficos

Para realizar el conmuto de gráficos, es necesario que ambas tarjetas estén encendidas. En el caso que nos ocupa ya es así, pero en caso contrario, hace falta encender la tarjeta que no está dando señal.

# echo ON > /sys/kernel/debug/vgaswitcheroo/switch

A continuación, si lo que deseas es obtener un mayor rendimiento, te interesará establecer que la GPU discreta sea la encargada de dar la señal en pantalla. Para ello, puedes hacer uso de este comando:

# echo IGD > /sys/kernel/debug/vgaswitcheroo/switch

Por el contrario, si el portátil funciona con batería y lo que persigues es ahorrar energía, lo que te interesa es que sea la GPU integrada la encargada de dar señal por pantalla. En este caso, puedes utilizar la siguiente orden:

# echo DIS > /sys/kernel/debug/vgaswitcheroo/switch

Jugando con esos comandos, podrás conmutar de GPU fácilmente según tus preferencias. Paralelamente, siempre puede ser conveniente comprobar el estado de los gráficos para asegurarte que el resultado final es el esperado.

Apagar la GPU que no está dando señal

Tanto si has podido realizar el conmuto de gráficos de manera exitosa como si no, siempre es preferible que la GPU que no esta dando señal esté apagada. Esto repercutirá en una mayor eficiencia energética y en un menor calentamiento del hardware, lo cual siempre es positivo de cara a preservar la durabilidad de los componentes.

En Linux, a diferencia de lo que he observado que ocurre en Windows, es posible que tanto la GPU que da señal como la que no, estén ambas encendidas, por lo que es sumamente importante hacer la comprobación del estado de las gráficas, nada mas encender el equipo.

Para ello utilizaremos el siguiente comando ya conocido, el cual nos permitirá saber si las dos gráficas se encuentran encendidas, y cual de ellas es la que esta en funcionamiento.

# cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :Pwr:0000:01:00.0

Si las dos gráficas se encuentran encendidas, podemos usar la orden que muestro a continuación, que servirá para apagar la gráfica que no esta dando señal, y que por lo tanto, esta consumiendo energía y generando calor en vano.

# echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

Habiendo hecho esto, es importante volver a comprobar el estado de las gráficas. De este modo, podrás verificar si el proceso ha sido exitoso y la gráfica que no daba señal se encuentra ahora apagada.

# cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.2
1:DIS: :Off:0000:01:00.0

 Y ya para terminar…

En algunos casos, como por ejemplo tras reactivar el PC tras una suspensión, el comando cat /sys/kernel/debug/vgaswitcheroo/switch muestra un estado de las gráficas desactualizado. Para ello, una manera mucho más fiable de comprobar que gráficas están activas, es usando el siguiente comando:

# lshw -c video

Con estos sencillos pasos podrás ser capaz tanto de realizar el conmuto de gráficos, como, más importante aún, de apagar la GPU que no se encuentra dando señal, consiguiendo un menor calentamiento del hardware y una mayor duración de la batería.

Este proceso puedo constatar que me ha funcionado perfectamente en Ubuntu, concretamente en la versión 12.04 LTS, pero debería funcionar igualmente en cualquier otra distribución, mientras tenga habilitado vgaswitcheroo en el kernel (en Debian por ejemplo, no ocurre así).

En el caso de Debian, también lo probé….y funciona, pero no es tan fácil. En mi caso, tuve que hacer unos pasos adicionales al principio. Si te encuentras en el mismo caso, en este post cuento lo que hice para trabajar con gráficos intercambiables en Debian Wheezy.

Al ser algo que puede no funcionar en todos las distribuciones, o para todas las combinaciones de hardware, es de gran ayuda contar con la experiencia de otras personas que lo hayan probado.

En las versiones más recientes de Ubuntu  (concretamente me ha pasado en la 13.10 y la 14.04), el hecho de disponer de un sistema de gráficos híbridos es posible que origine un mal comportamiento del cursor, que se muestra constantemente parpadeante y muy impreciso.

Esto se debe a que el sistema detecta dos monitores, aun cuando físicamente solo hay uno. El problema se puede solucionar fácilmente deshabilitando el segundo monitor. Lo tienes explicado todo con más detalle en este post.

Finalmente, si deseas compartir tu experiencia de uso, o quieres mejorar algún punto de lo que he escrito, no dudes en comentar. Y si te ha parecido útil la guía, me será de gran ayuda si lo compartes en Twitter o Google+.

Anuncios

Publicado por

Oriol

Soy un chico de Barcelona. Estoy aquí para compartir mis Hobbies e intentar aportar mi granito de arena a todos aquellos usuarios interesados en el mundo de la informática, internet y las tecnologías de la información en general.

23 comentarios sobre “Como Manejar Gráficos Intercambiables en GNU/Linux”

  1. ola, realmente agradezco este aporte, ya que es muy dificil encontrar ayuda sobre esto por ahi en la web, sobre todo en español; sin embargo no he podido hacerlo funcionar, los comandos:

    grep -i switcheroo /boot/config-*
    CONFIG_VGA_SWITCHEROO=y

    sudo ls -l /sys/kernel/debug/vgaswitcheroo/switch
    -rw-r–r– 1 root root 0 jun 8 05:20 /sys/kernel/debug/vgaswitcheroo/switch

    sudo cat /sys/kernel/debug/vgaswitcheroo/switch
    0:IGD:+:Pwr:0000:00:01.0
    1:DIS: :DynPwr:0000:01:00.0

    me devuelven esos resultados, que creo estan bien, pero cuando intento :

    # echo ON > /sys/kernel/debug/vgaswitcheroo/switch
    # echo IGD > /sys/kernel/debug/vgaswitcheroo/switch
    # echo DIS > /sys/kernel/debug/vgaswitcheroo/switch

    o el más importante:
    # echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

    sudo echo OFF > /sys/kernel/debug/vgaswitcheroo/switchbash: /sys/kernel/debug/vgaswitcheroo/switch: Permiso denegado

    todos esos me dicen permiso denegado, agradeceria mucho to ayuda, porque este probelmita, me tiene hecho un lio,
    estoy usando Elementary OS Loki, basado en ubuntu Xenial 16.04 kernel 4.8 de linux y mis dos tarjetas graficas son AMD una R5 integrada y una R7 m260 dedicada, gracias de antemano

    Me gusta

  2. Que tal amigo. Primero quiero agradecerte porque a mi me funcionó perfectamente en mi sony vaio con intel/ati. Pero tengo un problema, lo que pasa esq tengo q volver a hacer los pasos:
    echo DIS > /sys/kernel/debug/vgaswitcheroo/switch
    echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
    cat /sys/kernel/debug/vgaswitcheroo/switch

    cada vez que enciendo la compu xq la ATI se vuelve a encender (on)…
    quisiera saber si esto sera asi siempre o puedo hacer algo para que la ATI se mantenga en OFF.

    De antemano Gracias……

    Me gusta

    1. Hola,
      Gracias, me alegro de que te funcionara.
      Si, el problema de este método es que cuando vuelves a iniciar el sistema, se carga con la configuración por defecto, que es con las dos gráficas encendidas.
      Hace tiempo vi un script que servia para que en el inicio te guardase la configuración anterior, pero no se si sigue funcionando. Yo lo probé, y a mi no me funcionó, pero quizá en tu hardware si que funciona.
      Te paso el enlace con la explicación por si quieres probarlo:

      https://computernewage.com/guias/como-automatizar-el-manejo-de-graficos-intercambiables-en-linux/

      Gracias por el comentario, y saludos.

      Me gusta

    1. Hola,
      Perdona que haya tardado tanto en contestar, he estado fuera unos días y no he podido estar mucho por el blog.
      Siento que no te haya funcionado.
      ¿Tus gráficos son AMD/Intel?
      Si es así, puedes probar de usar la solución basada en gráficos propietarios de la web de AMD. En los comentarios, José Jacóme comentó una solución que le funciono bien. La explicación se encuentra en este link:

      http://askubuntu.com/questions/205112/how-do-i-get-amd-intel-hybrid-graphics-drivers-to-work

      Personalmente aún no lo he probado, pero tan pronto como lo haga lo comentaré.

      Saludos, y disculpa la tardanza.

      Me gusta

  3. Hola amigo de nuevo aqui, recibe un saludo.
    Tengo ubuntu, si puedo apagar la targeta discreta. Pero no puedo activarla para que funcione con la ATi.
    Ago los siguientes pasos.
    Mato las x /// killall Xorg
    termino el servicio de gdm /// service lightdm stop
    con las dos gpu encendidas activo la ati y se me apaga la pantalla por completo.
    pero si regreso a la integrada, me regresa la senial, de la pantalla.

    Me gusta

    1. Hola Abimael,
      a mi me pasa lo mismo con Ubuntu, y tampoco he podido llegar a activar la GPU discreta.
      Igualmente, puedes probar de dar permisos de ejecución al archivo de configuración de vgaswitcheroo mediante los siguientes comandos:

      # chown -R nombredeusuario:nombredeusuario /sys/kernel/debug
      # chown nombredeusuario:nombredeusuario /sys/kernel/debug/vgaswitcheroo/switch

      Y después de reiniciar el pc, volver a utilizar los comandos habituales:

      # echo ON > /sys/kernel/debug/vgaswitcheroo/switch
      # echo DIS > /sys/kernel/debug/vgaswitcheroo/switch

      Puedes probar a ver si con esto te funciona, si no dime algo.

      Saludos

      Me gusta

    1. Hola, vaya pues no conocía este grupo. Le he hecho una mirada y parece interesante. Esta noche me lo miraré bien y haré el registro. Por poco que sea, cuantas mas voces mas fácil será despertar el interés de las empresas.
      Gracias por compartirlo!;)

      Me gusta

  4. Hola: ¿Qué pasa si tenes en la línea de comandos del grub nomodeset=1 , pero no encuentra el fichero “switc” ¿Existe una forma de crearlo?

    Me gusta

    1. Hola, que tal,
      Si no se encuentra el fichero creo que no te dejará configurar los gráficos, y los comandos no te servirán.
      Manualmente, no sé si hay forma de crearlo, pero en todo caso, ¿que distribución utilizas? porqué si usas Debian puede ser que el problema sea que faltan unos paquetes del kernel que no vienen instalados por defecto.
      Por otra parte, si instalaste los drivers privativos antes, también puede ser que tengas algún rastro de ellos, y te hayan eliminado el fichero de configuración necesario para usar el mecanismo vgaswitcheroo (el cual solo se puede usar utilizando los driver libres que vienen en el kernel).
      ¿Que gráficos usas en tu pc?

      Me gusta

  5. Hola soy el de muylinux de la entrada de debian wheezy, en mi caso en este comando me da el error de que falta el archivo del comando:

    ls -l /sys/kernel/debug/vgaswitcheroo/switch

    El primer comando si me da una respuesta que es la siguiente:

    CONFIG_VGA_SWITCHEROO=y

    Saludos

    Me gusta

    1. Hola, si ya te recuerdo, gracias por comentar!
      ¿Has probado estos comandos desde Debian Wheezy o desde Ubuntu?
      Porque hoy he estado mirando lo del caso de Debian que comentabas, y creo que para poder utilizar vgaswitcheroo desde Debian hay que instalar el paquete firmware-linux-nonfree.
      Si lo has hecho desde Debian, puede que te diga que falta el archivo por culpa de este paquete.
      Saludos;)

      Me gusta

      1. Buenas, yo también tengo el mismo problema:

        ls -l /sys/kernel/debug/vgaswitcheroo/switch
        ls: cannot access /sys/kernel/debug/vgaswitcheroo/switch: No such file or directory

        Y yo ya tengo instalado el paquete que mencionan:

        firmware-linux-nonfree is already the newest version.

        y al tirar el comando:

        grep -i switcheroo /boot/config-*
        /boot/config-3.2.0-4-amd64:CONFIG_VGA_SWITCHEROO=y
        /boot/config-3.9-1-amd64:CONFIG_VGA_SWITCHEROO=y

        ¿Cómo puedo hacer para crear el vgaswitcheroo/switch? ¿Cómo activo “modeset=1”?

        Me gusta

        1. Hola, lo siento mucho que no apareciese tu comentario antes. Muchas veces se cuelan comentarios en la bandeja de spam, y como estoy pasando unos dias fuera no tengo mucho tiempo para entrar en el blog.

          Por la respuesta que te ha dado el comando ‘grep -i switcheroo/boot/config-*’ creo que ya tienes activado la opción ‘modeset=1’, el problema veo que es que el sistema no te detecta la carpeta necesaria.

          Que distro tienes instalada? Estas corriendo sobre Debian? Lo digo porqué normalmente en Debian es necesario montar el directorio debugfs para que te detecte la carpeta. Para hacerlo, puedes usar este comando:

          $ su
          # mountpoint -q /sys/kernel/debug || mount -t debugfs none /sys/kernel/debug

          Si te sigue sin funcionar dime algo por aqui, y siento no haberte podido responder antes.

          Saludos.

          Me gusta

  6. Gracias!!! Ya había perdido las esperanzas…
    Una pregunta este método sirve para siempre o toca hacerlo al iniciar Linux???
    Y el brillo se baja o no se baja con este método???

    Me gusta

    1. Hola, me alegro de que te haya servido. Pues en principio tienes que hacerlo cada vez que inicias, pero creo que hay algún script que te permite automatizarlo. Yo no lo he probado aún, pero tengo intención de hacerlo y comentar si me funciona.
      Respecto a lo del brillo, yo no noté diferencia.
      Para comprobar que sólo está encendido la gráfica activa, también puedes usar el comando ‘sudo lshw -c video’.
      Saludos;)

      Me gusta

    2. Posteas si sirve el Script por favor porque estos drivers son un dolor de cabeza!!!
      Mi laptop posee una Radeon HD 6770 y Intel 3000, ya había perdido la esperanza la verdad había usado Fedora, OpenSuse y ahora Ubuntu pero creo que esta es la única solución… Lo del brillo como te comentaba esta siempre al 100%(incluso al solo usar la gráfica Integrada), ese es el único problema que tengo, es casi una hora menos de batería pero espero alguna vez espero solucionarlo.
      Saludos!!! Gracias por todo…

      Me gusta

      1. Hola, pues tan pronto como lo haya probado lo postearé por aquí (hoy o mañana).
        Lo del brillo, a mi me ha funcionado con algunas distros si, y otras no. Con Ubuntu 12.04, por ejemplo, lo puedo variar, pero el rango de luz es más pequeño que desde Windows 7. Puede ser que con alguna nueva versión ya te funcione.
        Gracias por comentar;)

        Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s