Jak uruchamiać polecenia xrandr podczas uruchamiania w Ubuntu

13

Jak mogę uruchomić następujące xrandrpolecenie podczas uruchamiania?

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
źródło
1
Cześć Udhaya Kumar, czy zauważyłeś, że masz odpowiedź? Daj mi znać, jeśli dasz radę.
Jacob Vlijm,

Odpowiedzi:

22

Dodawanie skomplikowanych poleceń do aplikacji startowych

Ogólnie można dodawać polecenia uruchamiane podczas uruchamiania (logowanie), wybierając: Dash> Aplikacje startowe> Dodaj. W takim przypadku musisz wykonać skomplikowane polecenie.

Można to zrobić na dwa sposoby:

  1. napisz osobny skrypt:

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

    Skopiuj skrypt do pustego pliku, zapisz go jako set_monitor.sh i dodaj następujące polecenie do aplikacji startowych, jak opisano powyżej.

    /bin/bash /path/to/set_monitor.sh
    
  2. Połącz polecenia z jednym (bardzo długim) poleceniem:

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

    W takim przypadku użycie &&między poleceniami sprawi, że każde polecenie zostanie uruchomione jak najszybciej (a jeśli) poprzednie polecenie zostanie wykonane pomyślnie, tak jak w oddzielnych wierszach.

    Następnie dodaj polecenie do aplikacji startowych, jak opisano powyżej.

Ważna uwaga: dodawanie poleceń xrandr do aplikacji startowych

Dodawanie xrandrpoleceń do uruchamiania może być trudne; czasem się psują, jeśli są uruchamiane zbyt wcześnie, zanim komputer zostanie w pełni załadowany. Dlatego może być konieczne (prawdopodobnie) dodanie krótkiej przerwy w poleceniu, aby (albo) uruchomić skrypt lub polecenie, na przykład (w ostatnim przypadku):

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

Być może trzeba trochę pograć, sleep 15aby znaleźć optymalny czas.

Uwaga

Pominąłem pierwszą linię:

xrandr

ponieważ nic nie robi, ale wyświetla pewne informacje na ekranie :)

Jacob Vlijm
źródło
6
Nie musisz dołączać cvtpolecenia, jeśli znasz już swoją modelinę.
thethakuri
1
/bin/bash -c "..."Owijania wystarczyły dla mnie :)
Superole
Na Kubuntu 17.10 dodałem polecenie bez sleepczęści w „Aplikacjach startowych”, wybierając opcję „Przed uruchomieniem sesji”.
pat-s
1
+1 za pisanie 3 lata temu # xrandr only works in X11 sessions, not Wayland. Wówczas dobre zabezpieczenie na przyszłość.
WinEunuuchs2Unix
To rozwiązanie w końcu zadziałało w moim Debianie 10 z dwoma monitorami: Apple Thunderbolt 27 + LG 27MP59G. Natywnie LG obsługuje tylko 1920 x 1080. Z xrandrustawiłem go przy tej samej rozdzielczości Tunderbolt 2560x1440 z /bin/bash -c "sleep 3&&xrandr --output DP-2 --auto --scale-from 2560x1440".
f0nzie
7

Zgodnie z tym w sekcji Teraz automatyzuj przy logowaniu , stworzyłem własny skrypt 45custom_xrandr-settingsi umieściłem go /etc/X11/Xsession.d/. Działa dla mnie dobrze pod Ubuntu 14.04 LTS. Możesz umieścić kod poniżej po casepoleceniu opisanym w tej sekcji.

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;

Uważam, że tego właśnie szukasz. Możesz wyświetlić dostępne dane wyjściowe, po prostu uruchamiając xrandrpolecenie. Wyjścia mogą być VGA, VGA-0, DVI-0, TMDS-1i DisplayPort-0.

Oto kompletny skrypt, który stworzyłem.

# 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
źródło
2

Utwórz plik ~/.xprofilei umieść w nim swoje linie. Jest uruchamiany na początku sesji użytkownika X.

golopot
źródło
3
to nie działało. polecenia uruchamiają się zbyt wcześnie.
Necktwi
@neckTwi Dzięki, stwierdziłem, że xrandr --output ...to nie działa, ale poprzednie dwa wiersze działają. W sumie to działa dla mnie.
gołopot