Como executar comandos xrandr na inicialização no Ubuntu

13

Como posso executar o seguinte xrandrcomando na inicialização?

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
fonte
1
Oi Udhaya Kumar, você percebeu que tem uma resposta? Entre em contato se você conseguir.
Jacob Vlijm

Respostas:

21

Adicionando comandos complicados aos aplicativos de inicialização

Em geral, você pode adicionar comandos para executar na inicialização (login) escolhendo: Dash> Startup Applications> Add. Nesse caso, você tem um comando complicado para executar.

Existem duas opções para fazer isso:

  1. escreva um script 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 o script em um arquivo vazio, salve-o como set_monitor.sh e adicione o seguinte comando aos aplicativos de inicialização, conforme descrito acima.

    /bin/bash /path/to/set_monitor.sh
    
  2. Encadear os comandos para um comando (muito longo):

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

    Nesse caso, o uso &&entre os comandos fará com que cada comando seja executado assim que (e se) o anterior for executado com êxito, assim como em linhas separadas.

    Em seguida, adicione o comando aos aplicativos de inicialização, conforme descrito acima.

Nota importante: adicionando comandos xrandr aos aplicativos de inicialização

Adicionar xrandrcomandos à inicialização pode ser complicado; Às vezes, eles quebram se forem executados muito cedo, antes que a área de trabalho esteja totalmente carregada. Portanto, você pode (provavelmente) precisar adicionar uma pequena pausa no comando para (executar) o script ou o comando, como (no ú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"

Pode ser necessário brincar um pouco com o sleep 15para encontrar o momento ideal.

Nota

Eu deixei de fora a primeira linha:

xrandr

uma vez que nada, mas exibe algumas informações na configuração da tela :)

Jacob Vlijm
fonte
6
Você não precisa incluir o cvtcomando se já conhece sua modelagem.
Thethakuri
1
O /bin/bash -c "..."embrulho fez o truque para mim :)
Superole
No Kubuntu 17.10, adicionei o comando sem a sleepparte em 'Aplicativos de inicialização' selecionando a opção "Antes da inicialização da sessão".
pat-s
1
+1 por escrever há 3 anos # xrandr only works in X11 sessions, not Wayland. Bom futuro à prova naquela época.
WinEunuuchs2Unix
7

De acordo com isso na seção Agora automatizar no login , criei meu próprio script 45custom_xrandr-settingse o coloquei /etc/X11/Xsession.d/. Funciona bem para mim no Ubuntu 14.04 LTS. Você pode colocar o código abaixo após o casecomando descrito nessa seção.

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;

Eu acredito que o acima é o que você está procurando. Você pode ver as saídas disponíveis simplesmente executando o xrandrcomando As saídas podem ser VGA, VGA-0, DVI-0, TMDS-1ou DisplayPort-0.

Aqui está o script completo que eu fiz.

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

Crie o arquivo ~/.xprofilee coloque suas linhas nele. É executado no início da sessão do usuário X.

golopot
fonte
3
isso não funcionou. Os comandos são ativados muito cedo.
Necktwi 27/05
@neckTwi Obrigado, descobri que xrandr --output ...não funciona, mas as duas linhas anteriores funcionam. Tudo isso funciona para mim.
golopot 28/05