Come eseguire i comandi xrandr all'avvio in Ubuntu


13

Come posso eseguire il seguente xrandrcomando all'avvio?

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 

1
Ciao Udhaya Kumar hai notato di avere una risposta? Per favore fatemi sapere se ci riuscite.
Jacob Vlijm,

Risposte:


21

Aggiunta di comandi complicati alle applicazioni di avvio

In generale, è possibile aggiungere comandi da eseguire all'avvio (accesso) selezionando: Dash> Applicazioni di avvio> Aggiungi. In questo caso, hai un comando complicato da eseguire.

Ci sono due opzioni per farlo:

  1. scrivere uno script separato:

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

    Copia lo script in un file vuoto, salvalo come set_monitor.sh e aggiungi il seguente comando alle applicazioni di avvio come descritto sopra.

    /bin/bash /path/to/set_monitor.sh
    
  2. Incatenare i comandi su un comando (molto lungo):

     /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"
    

    In questo caso, l'utilizzo &&tra i comandi farà eseguire ogni comando non appena (e se) il precedente viene eseguito correttamente, proprio come se fossero su linee separate.

    Quindi aggiungere il comando alle applicazioni di avvio, come descritto sopra.

Nota importante: aggiunta di comandi xrandr alle applicazioni di avvio

Aggiungere xrandrcomandi all'avvio può essere complicato; a volte si rompono se vengono eseguiti troppo presto, prima che il desktop sia completamente caricato. Pertanto potrebbe essere necessario (probabilmente) aggiungere una piccola interruzione al comando per (o) eseguire lo script o il comando, come (nell'ultimo caso):

/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"

Potrebbe essere necessario giocare un po 'con il sleep 15per trovare il momento ottimale.

Nota

Ho lasciato fuori la prima riga:

xrandr

poiché non fa altro che visualizzare alcune informazioni sulla configurazione dello schermo :)


6
Non è necessario includere il cvtcomando se si conosce già la modeline.
thethakuri,

1
Il /bin/bash -c "..."wrapping ha funzionato per me :)
Superole,

Su Kubuntu 17.10, ho aggiunto il comando senza la sleepparte in "Applicazioni di avvio" selezionando l'opzione "Prima dell'avvio della sessione".
pat-s

1
+1 per la scrittura 3 anni fa # xrandr only works in X11 sessions, not Wayland. Buona prova di futuro allora.
WinEunuuchs2Unix

7

Secondo questo nella sezione Ora automatizzalo al login , ho creato il mio script 45custom_xrandr-settingse l'ho inserito /etc/X11/Xsession.d/. Funziona bene per me con Ubuntu 14.04 LTS. È possibile inserire il codice in basso dopo il casecomando descritto in quella sezione.

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;

Credo che quanto sopra sia quello che stai cercando. Puoi vedere gli output disponibili semplicemente eseguendo il xrandrcomando. Le uscite possono essere VGA, VGA-0, DVI-0, TMDS-1o DisplayPort-0.

Ecco la sceneggiatura completa che ho realizzato.

# 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

2

Crea il file ~/.xprofilee inseriscici le linee. Viene eseguito all'inizio della sessione utente X.


3
questo non ha funzionato. i comandi si accendono troppo presto.
Necktwi,

@neckTwi Grazie, ho scoperto che xrandr --output ...non funziona ma le due righe precedenti funzionano. Tutto sommato, questo funziona per me.
golopot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.