Solución al problema con los overlays en monitores secundarios

Alguna vez puede darse el caso de que necesitemos proyectar una película o jugar a algunos juegos en un monitor secundario (o proyector) que conectemos a un portátil. Puede haberos pasado (como a mi) que la ventana en el monitor secundario aparezca en negro. Veremos como solucionar el problema en esta micro-receta.

El problema


Cuando en el monitor secundario algunas ventanas nos aparezcan en negro puede significar lo siguiente: el contenido de dicha ventana es una capa overlay. El problema en este tipo de capas es que la aplicación dibuja directamente en ellas, esto hace que no se gestione por el servidor gráfico y por tanto no existe dos copias de estas capas (una para cada monitor).

Solución de emergencia


Si lo que queremos es reproducir una película y contamos con un reproductor como mplayer, podemos decir al reproductor que construya una capa que si esté gestionada por el servidor X, por ejemplo:

$ mplayer -vo xv [archivo_de_video]

Al seleccionar como salida xv creamos una capa que al estar gestionada por el servidor gráfico si se crean las copias de las capas necesarias.

Solución general


Si queremos una solución más general de forma que no sólo funcione con el mplayer, para ello tendríamos que encontrar una forma de seleccionar en que salida del servidor hay que volcar el overlay. Pues esa forma existe… instalemos xvattr:

# aptitude install xvattr

Si lo ejecutamos obtendremos algo parecido a:

Found Xv 2.2
Adaptor: 0
Name: ATI Radeon Video Overlay
 Port: 73
  Name: XV_DEVICE_ID
   Flags: XvGettable 
   Min value: 0
   Max value: -1
   Current value: 109
  Name: XV_LOCATION_ID
   Flags: XvGettable 
   Min value: 0
   Max value: -1
   Current value: 110
  Name: XV_INSTANCE_ID
   Flags: XvGettable 
   Min value: 0
   Max value: -1
   Current value: 111
  Name: XV_DUMP_STATUS
   Flags: XvSettable 
   Min value: 0
   Max value: 1
  Name: XV_SET_DEFAULTS
   Flags: XvSettable 
   Min value: 0
   Max value: 1
  Name: XV_AUTOPAINT_COLORKEY
   Flags: XvGettable XvSettable 
   Min value: 0
   Max value: 1
   Current value: 1
  Name: XV_COLORKEY
   Flags: XvGettable XvSettable 
   Min value: 0
   Max value: -1
   Current value: 30
  Name: XV_DOUBLE_BUFFER
   Flags: XvGettable XvSettable 
   Min value: 0
   Max value: 1
   Current value: 1
  Name: XV_OVERLAY_ALPHA
   Flags: XvGettable XvSettable 
   Min value: 0
   Max value: 255
   Current value: 255
  Name: XV_GRAPHICS_ALPHA
   Flags: XvGettable XvSettable 
   Min value: 0
   Max value: 255
   Current value: 255
  Name: XV_ALPHA_MODE
   Flags: XvGettable XvSettable 
   Min value: 0
   Max value: 1
   Current value: 0
  Name: XV_BRIGHTNESS
   Flags: XvGettable XvSettable 
   Min value: -1000
   Max value: 1000
   Current value: 0
  Name: XV_CONTRAST
   Flags: XvGettable XvSettable 
   Min value: -1000
   Max value: 1000
   Current value: 0
  Name: XV_SATURATION
   Flags: XvGettable XvSettable 
   Min value: -1000
   Max value: 1000
   Current value: 0
  Name: XV_COLOR
   Flags: XvGettable XvSettable 
   Min value: -1000
   Max value: 1000
   Current value: 0
  Name: XV_HUE
   Flags: XvGettable XvSettable 
   Min value: -1000
   Max value: 1000
   Current value: 0
  Name: XV_RED_INTENSITY
   Flags: XvGettable XvSettable 
   Min value: -1000
   Max value: 1000
   Current value: 0
  Name: XV_GREEN_INTENSITY
   Flags: XvGettable XvSettable 
   Min value: -1000
   Max value: 1000
   Current value: 0
  Name: XV_BLUE_INTENSITY
   Flags: XvGettable XvSettable 
   Min value: -1000
   Max value: 1000
   Current value: 0
  Name: XV_CRTC
   Flags: XvGettable XvSettable 
   Min value: -1
   Max value: 1
   Current value: -1
  Name: XV_GAMMA
   Flags: XvGettable XvSettable 
   Min value: 100
   Max value: 10000
   Current value: 1000
  Name: XV_COLORSPACE
   Flags: XvGettable XvSettable 
   Min value: 0
   Max value: 1
   Current value: 0

Son variables que controlan la visualización del video, una de ellas (XV_CRTC) indica dónde dibujar los overlays, si hacemos lo siguiente:

$ xvattr -a XV_CRTC -v 1

Tendremos lo que buscamos… si, todo este rollo de receta se resume en el título y en la línea de arriba. Sticking out tongue
Si queréis hacer más pruebas con xvattr, el formato es muy sencillo:

$ xvattr -a [atributo] -v [valor]