Cómo ejecutar comandos xrandr al inicio en Ubuntu

13

¿Cómo puedo ejecutar el siguiente xrandrcomando al inicio?

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
fuente
1
Hola Udhaya Kumar, ¿notaste que tienes una respuesta? Avísame si te las arreglas.
Jacob Vlijm

Respuestas:

21

Agregar comandos complicados a las aplicaciones de inicio

En General, puede agregar comandos para ejecutar al inicio (iniciar sesión) seleccionando: Tablero> Aplicaciones de inicio> Agregar. En este caso, tiene un comando complicado para ejecutar.

Hay dos opciones para hacer eso:

  1. escribe un guión separado:

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

    Copie el script en un archivo vacío, guárdelo como set_monitor.sh y agregue el siguiente comando a las aplicaciones de inicio como se describe anteriormente.

    /bin/bash /path/to/set_monitor.sh
    
  2. Encadena los comandos a un comando (muy largo):

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

    En este caso, el uso &&entre los comandos hará que cada comando se ejecute tan pronto (y si) el anterior se ejecuta con éxito, al igual que en líneas separadas.

    Luego agregue el comando a las Aplicaciones de inicio, como se describe anteriormente.

Nota importante: agregar comandos xrandr a las aplicaciones de inicio

Agregar xrandrcomandos al inicio puede ser complicado; a veces se rompen si se ejecutan demasiado pronto, antes de que el escritorio se cargue por completo. Por lo tanto, es posible que (probablemente) necesite agregar un pequeño descanso en el comando para (ejecutar) el script o el comando, como (en el último 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"

Es posible que deba jugar un poco con el sleep 15para encontrar el momento óptimo.

Nota

Dejé la primera línea:

xrandr

ya que no hace nada, pero muestra información en la configuración de la pantalla :)

Jacob Vlijm
fuente
66
No necesita incluir el cvtcomando si ya conoce su línea de modelo.
thethakuri
1
La /bin/bash -c "..."envoltura me
funcionó
En Kubuntu 17.10, agregué el comando sin la sleepparte en 'Aplicaciones de inicio' seleccionando la opción "Antes del inicio de sesión".
pat-s
1
+1 por escribir hace 3 años # xrandr only works in X11 sessions, not Wayland. Buenas pruebas futuras en ese entonces.
WinEunuuchs2Unix
7

De acuerdo con esto en la sección Automatizar ahora al iniciar sesión , he creado mi propio script 45custom_xrandr-settingsy lo he colocado /etc/X11/Xsession.d/. Funciona bien para mí en Ubuntu 14.04 LTS. Puede colocar el código a continuación después del casecomando descrito en esa sección.

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;

Creo que lo anterior es lo que estás buscando. Puede ver las salidas disponibles simplemente ejecutando el xrandrcomando. Las salidas pueden ser VGA, VGA-0, DVI-0, TMDS-1o DisplayPort-0.

Aquí está el guión completo que hice.

# 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
fuente
2

Crea el archivo ~/.xprofiley pon tus líneas en él. Se ejecuta al comienzo de la sesión de usuario X.

golopot
fuente
3
Esto no funcionó. los comandos se disparan demasiado temprano.
Necktwi
@neckTwi Gracias, descubrí que xrandr --output ...no funciona, pero las dos líneas anteriores funcionan. En general, esto funciona para mí.
Golopot