Cómo escribir un script bash para configurar mis pantallas cuando HDMI está enchufado o desenchufado

8

Tengo un portátil con Kubuntu Precise (12.04) que ocasionalmente uso para mirar videos. Cuando lo hago, enchufo un cable HDMI conectado a un receptor de A / V con un monitor HDMI conectado.

Cuando veo videos de esta manera, todavía necesito usar la pantalla del portátil cuando estoy interactuando con el sistema para controlar la reproducción, etc. El texto en el monitor HDMI es difícil de leer desde donde estoy sentado.

Cuando conecto el cable HDMI, Kubuntu lo detecta, pero tengo que pasar por una secuencia de baile extraña (que funciona, pero es complicada) para configurarlo correctamente cada vez para video y audio. Para solucionar esto, estoy tratando de escribir un script bash xrandrpara hacerlo bien la primera vez.

Tengo la idea básica de la respuesta de Peoro a esta pregunta y respuesta de U&L titulada: Una herramienta para aplicar automáticamente la configuración RandR cuando se conecta la pantalla externa .

Sobre mi guion

Mi script (incluido a continuación) funciona, pero necesita mejoras.

Establece el modo de video correctamente para el monitor HDMI, pero el monitor LVDS1 (en la computadora portátil) cambia para mostrar solo la parte superior izquierda del escritorio, lo cual es un problema porque corta las barras de desplazamiento de la ventana a la derecha y la barra de tareas en El fondo.

Traté de arreglar esto --scale, pero mi primer intento desordenó las cosas lo suficiente como para tener que reiniciar para recuperar una pantalla que funcionara.

¿Hay alguna manera de hacer que ambas pantallas muestren el mismo contenido, pero con cada una utilizando su propia resolución preferida?

¿O, al menos, una forma de configurar la pantalla del portátil de modo que todavía se pueda acceder a todo el escritorio cuando la pantalla HDMI está en uso?

Como estoy depurando el script, aún no se ha limpiado. Es posible que quiera hacerlo más tarde.

Mi guion

#!/bin/bash
## hdmi_set
## Copyleft 11/13/2013 JPmicrosystems
## Adapted from
## /unix/4489/a-tool-for-automatically-applying-randr-configuration-when-external-display-is-p
## Answer by peoro

# setting up new mode for my VGA
##xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
##xrandr --addmode VGA1 1920x1080

##source $HOME/bin/bash_trace
# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to HDMI and vice versa
function ActivateHDMI {
    echo "Switching to HDMI"
    ##xrandr --output HDMI1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
    ##xrandr --output HDMI1 --same-as LVDS1
    xrandr --output HDMI1 --mode 1920x1080
    xrandr --output LVDS1 --mode 1366x768
    MONITOR=HDMI1
}
function DeactivateHDMI {
    echo "Switching to LVDS1"
    xrandr --output HDMI1 --off --output LVDS1 --auto
    MONITOR=LVDS1
}

# functions to check if VGA is connected and in use
function HDMIActive {
    [ $MONITOR = "HDMI1" ]
}
function HDMIConnected {
    ! xrandr | grep "^HDMI1" | grep disconnected
}

## MONITOR doesn't do anything because it's not preserved between script executions
# actual script
##while true
##do
    if HDMIConnected
    then
        ActivateHDMI
    fi

    if ! HDMIConnected
    then
        DeactivateHDMI
    fi

    ##sleep 1s
##done

Salida de xrandr

Esto es lo que ve xrandr:

bigbird@ramdass:~$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
   1366x768       60.0*+
   1360x768       59.8     60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected (normal left inverted right x axis y axis)
   1920x1080      60.0 +
   1680x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x720       60.0  
   1024x768       60.0  
   800x600        60.3  
   720x480        59.9  
   640x480        60.0  
   720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)
Joe
fuente

Respuestas:

3

Probablemente deberías usar simplemente kscreen , que debería resolver todos tus problemas. Recordará la configuración de una pantalla conectada previamente y la restaurará, una vez que la vuelva a conectar.

Si todavía tiene estos problemas mientras usa kscreen, debería valer la pena un informe de error .

Como Kubuntu 12.04 es bastante antiguo, probablemente deberías echarle un vistazo a esto .

Elias Probst
fuente
¡Santos humos! ¡Ese ppa me consiguió 347 actualizaciones! No sé por qué no lo tenía instalado antes. Y eso es antes de instalar kscreen. Ahora, si solo cambiara el sonido (fonón) hacia y desde HDMI también ... Regresaré aquí una vez que finalice la actualización y pueda probar kscreen.
Joe
El cambio dinámico de sonido funciona bastante bien si configura las prioridades del dispositivo en la configuración de Phonon.
Elias Probst
kscreen totalmente rocas! Gracias. Ahora solo tengo que acostumbrarme o arreglar todo lo demás que ppa actualizó. Entré en Configuración del sistema-> Multimedia-> Configuración de audio y video y moví el Audio estéreo digital incorporado (HDMI) por encima del Audio estéreo estéreo incorporado, pero no ocurre ningún cambio de audio cuando enchufo / desconecto mi cable HDMI. ¿Qué más me estoy perdiendo?
Joe
¿Qué aplicaciones se ven afectadas / no cambian la salida?
Elias Probst
Acabo de actualizar de kubuntu 12.04 a 14.04.1. Estaba esperando comentar porque esperaba que eso ayudara, pero nada ha cambiado. Todavía tengo que cambiar el audio manualmente. Creo que abriré una nueva pregunta sobre SE Ask Ubuntu. No creo que haya interruptores de audio. Acabo de probar vlc, dragonplayer y amarok.
Joe