Comment écrire un script bash pour configurer mes écrans lorsque HDMI est branché ou débranché

8

J'ai un ordinateur portable exécutant Kubuntu Precise (12.04) que j'utilise occasionnellement pour regarder des vidéos. Lorsque je le fais, je branche un câble HDMI connecté à un récepteur A / V avec un moniteur HDMI connecté.

Lorsque je regarde des vidéos de cette façon, j'ai toujours besoin d'utiliser l'écran du portable lorsque j'interagis avec le système pour contrôler la lecture, etc. Le texte sur le moniteur HDMI est difficile à lire d'où je suis assis.

Lorsque je branche le câble HDMI, Kubuntu le détecte, mais je dois passer par une séquence de danse étrange (qui fonctionne, mais est compliquée) pour la configurer correctement à chaque fois pour la vidéo et l'audio. Pour résoudre ce problème, j'essaie d'écrire un script bash avec xrandrpour le faire correctement la première fois.

J'ai eu l'idée de base de la réponse de Peoro à cette Q&R U&L intitulée: Un outil pour appliquer automatiquement la configuration RandR lorsqu'un écran externe est branché .

À propos de mon script

Mon script (inclus ci-dessous) fonctionne, mais doit être amélioré.

Il définit le mode vidéo correctement pour le moniteur HDMI, mais le moniteur LVDS1 (sur le portable) change pour afficher uniquement la partie supérieure gauche du bureau - ce qui est un problème car il coupe les barres de défilement de la fenêtre à droite et la barre des tâches sur le fond.

J'ai essayé de résoudre ce --scaleproblème avec , mais ma première tentative a suffisamment gâché les choses pour que je doive redémarrer pour récupérer un écran fonctionnel.

Existe-t-il un moyen de faire afficher le même contenu sur les deux écrans, mais chacun utilisant sa propre résolution préférée distincte?

Ou, au moins, un moyen de régler l'écran du portable de sorte que l'ensemble du bureau soit toujours accessible lorsque l'écran HDMI est utilisé?

Puisque je débogue le script, il n'est pas encore nettoyé. Je voudrais peut-être faire plus tard.

Mon script

#!/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

Sortie de xrandr

Voici ce que voit 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
la source

Réponses:

3

Vous devriez probablement simplement utiliser kscreen à la place, ce qui devrait résoudre tous vos problèmes. Il se souviendra des paramètres d'un écran précédemment connecté et les restaurera une fois que vous le reconnecterez.

Si vous rencontrez toujours de tels problèmes tout en utilisant kscreen, cela devrait valoir la peine de signaler un bogue .

Comme Kubuntu 12.04 est assez vieux, vous devriez probablement jeter un oeil à ce .

Elias Probst
la source
Bonté divine! Ce ppa m'a fait 347 mises à jour! Je ne sais pas pourquoi je ne l'avais pas installé auparavant. Et c'est avant d'installer kscreen. Maintenant, s'il suffit de basculer le son (phonon) vers et depuis HDMI également ... Je reviendrai ici une fois la mise à niveau terminée et je pourrai tester kscreen.
Joe
La commutation sonore dynamique fonctionne plutôt bien si vous configurez les priorités de l'appareil dans la configuration Phonon.
Elias Probst
kscreen est vraiment génial! Je vous remercie. Maintenant, je dois juste m'habituer ou réparer tout le reste qui a mis à jour ppa. Je suis entré dans Paramètres système-> Multimédia-> Paramètres audio et vidéo et j'ai déplacé la stéréo numérique audio (HDMI) intégrée au-dessus de la stéréo analogique analogique intégrée, mais aucune commutation audio ne se produit lorsque je branche / débranche mon câble HDMI. Que manque-t-il d'autre?
Joe
Quelles applications sont affectées / ne commutent pas la sortie?
Elias Probst
Je viens de passer de kubuntu 12.04 à 14.04.1. J'attendais de commenter car j'espérais que cela aiderait, mais rien n'a changé. Je dois encore changer d'audio manuellement. Je pense que je vais ouvrir une nouvelle question sur SE Ask Ubuntu. Je ne pense pas de commutateurs audio. Je viens d'essayer vlc, dragonplayer et amarok.
Joe