Comment exécuter les commandes xrandr au démarrage dans Ubuntu

13

Comment puis-je exécuter la xrandrcommande suivante au démarrage?

xrandr

cvt 1368 768 
xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
xrandr --addmode VGA1 1368x768_60.00
xrandr --output VGA1 --mode 1368x768_60.00 
Udhaya Kumar
la source
1
Salut Udhaya Kumar avez-vous remarqué que vous avez une réponse? Veuillez me faire savoir si vous y parvenez.
Jacob Vlijm

Réponses:

21

Ajout de commandes compliquées aux applications de démarrage

En général, vous pouvez ajouter des commandes à exécuter au démarrage (connexion) en choisissant: Dash> Startup Applications> Add. Dans ce cas, vous avez une commande compliquée à exécuter.

Il existe deux options pour ce faire:

  1. écrire un script distinct:

    #!/bin/bash
    
    cvt 1368 768 
    # xrandr only works in X11 sessions, not Wayland
    [ "$XDG_SESSION_TYPE" = x11 ] || exit 0
    xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync
    xrandr --addmode VGA1 1368x768_60.00
    xrandr --output VGA1 --mode 1368x768_60.00

    Copiez le script dans un fichier vide, enregistrez-le sous set_monitor.sh et ajoutez la commande suivante aux applications de démarrage comme décrit ci-dessus.

    /bin/bash /path/to/set_monitor.sh
    
  2. Enchaînez les commandes à une (très longue) commande:

     /bin/bash -c "cvt 1368 768&&xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync&&xrandr --addmode VGA1 1368x768_60.00&&xrandr --output VGA1 --mode 1368x768_60.00"
    

    Dans ce cas, l'utilisation &&entre les commandes fera exécuter chaque commande dès (et si) la précédente est exécutée avec succès, tout comme elles sont sur des lignes distinctes.

    Ajoutez ensuite la commande aux applications de démarrage, comme décrit ci-dessus.

Remarque importante: ajout de commandes xrandr aux applications de démarrage

L'ajout de xrandrcommandes au démarrage peut être délicat; parfois, ils se cassent s'ils sont exécutés trop tôt, avant que le bureau ne soit complètement chargé. Par conséquent, vous devrez peut-être (probablement) ajouter une petite pause dans la commande pour exécuter le script ou la commande, soit (dans le dernier cas)

/bin/bash -c "sleep 15&&cvt 1368 768&&xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync&&xrandr --addmode VGA1 1368x768_60.00&&xrandr --output VGA1 --mode 1368x768_60.00"

Vous devrez peut-être jouer un peu avec le sleep 15pour trouver le moment optimal.

Remarque

J'ai omis la première ligne:

xrandr

car il ne fait rien mais affiche des informations sur la configuration de votre écran :)

Jacob Vlijm
la source
6
Vous n'avez pas besoin d'inclure la cvtcommande si vous connaissez déjà votre modeline.
thethakuri
1
L' /bin/bash -c "..."emballage a fait l'affaire pour moi :)
Superole
Sur Kubuntu 17.10, j'ai ajouté la commande sans la sleeppartie «Applications de démarrage» en sélectionnant l'option «Avant le démarrage de la session».
pat-s
1
+1 pour avoir écrit il y a 3 ans # xrandr only works in X11 sessions, not Wayland. Bonne épreuve d'avenir à l'époque.
WinEunuuchs2Unix
7

Selon cela, dans la section Maintenant, automatisez-le à la connexion , j'ai créé mon propre script 45custom_xrandr-settingset l' ai placé dans /etc/X11/Xsession.d/. Cela fonctionne bien pour moi sous Ubuntu 14.04 LTS. Vous pouvez placer le code ci-dessous après la casecommande décrite dans cette section.

PRI_OUTPUT="DVI-0";
# Make and force resolution
myNewMode=$(cvt 1366 768 60 | grep -oP 'Modeline\K.*') &&                           #grep evrything after 'Modline'
myNewModeName=\"$(echo $myNewMode | grep -oP '"\K[^"\047]+(?=["\047])' )\" &&       #grep everything inside quotes
xrandr --newmode $myNewMode;
sleep 15;       
xrandr --addmode $PRI_OUTPUT $myNewModeName;

Je crois que ce qui précède est ce que vous recherchez. Vous pouvez voir les sorties disponibles simplement en exécutant la xrandrcommande. Les sorties peuvent être VGA, VGA-0, DVI-0, TMDS-1ou DisplayPort-0.

Voici le script complet que j'ai réalisé.

# To configure xrandr automatically during the first login, 
# save this script to your computer as /etc/X11/Xsession.d/45custom_xrandr-settings: 

# If an external monitor is connected, place it with xrandr
# External output may be "VGA" or "VGA-0" or "DVI-0" or "TMDS-1"

# More info at http://www.thinkwiki.org/wiki/Xorg_RandR_1.2


PRI_OUTPUT="DVI-0";
SEC_OUTPUT="DisplayPort-0";
SEC_LOCATION="left";    # SEC_LOCATION may be one of: left, right, above, or below

case "$SEC_LOCATION" in
       left|LEFT)
               SEC_LOCATION="--left-of $PRI_OUTPUT"
               ;;
       right|RIGHT)
               SEC_LOCATION="--right-of $PRI_OUTPUT"
               ;;
       top|TOP|above|ABOVE)
               SEC_LOCATION="--above $PRI_OUTPUT"
               ;;
       bottom|BOTTOM|below|BELOW)
               SEC_LOCATION="--below $PRI_OUTPUT"
               ;;
       *)
               SEC_LOCATION="--left-of $PRI_OUTPUT"
               ;;
esac

# Make and force resolution
myNewMode=$(cvt 1366 768 60 | grep -oP 'Modeline\K.*') &&                           #grep evrything after 'Modline'
myNewModeName=\"$(echo $myNewMode | grep -oP '"\K[^"\047]+(?=["\047])' )\" &&       #grep everything inside quotes
xrandr --newmode $myNewMode;
sleep 15;       
xrandr --addmode $PRI_OUTPUT $myNewModeName;


# Activate secondary out (display port)
xrandr | grep $SEC_OUTPUT | grep " connected "
if [ $? -eq 0 ]; then
#   xrandr --output $SEC_OUTPUT --auto $SEC_LOCATION
    xrandr --output $PRI_OUTPUT --mode $myNewModeName --output $SEC_OUTPUT --auto $SEC_LOCATION
else
    xrandr --output $PRI_OUTPUT --mode $myNewModeName --output $SEC_OUTPUT --off
fi
ioaniatr
la source
2

Créez le fichier ~/.xprofileet insérez-y vos lignes. Il est exécuté au début de la session utilisateur X.

golopot
la source
3
cela n'a pas fonctionné. les commandes se déclenchent trop tôt.
Necktwi
@neckTwi Merci, j'ai trouvé que xrandr --output ...cela ne fonctionne pas, mais les deux lignes précédentes fonctionnent. Dans l'ensemble, cela fonctionne pour moi.
golopot