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:
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:
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:
Tendremos lo que buscamos… si, todo este rollo de receta se resume en el título y en la línea de arriba. :P
Si queréis hacer más pruebas con xvattr, el formato es muy sencillo: