Ausführen von xrandr-Befehlen beim Start in Ubuntu

13

Wie kann ich den folgenden xrandrBefehl beim Start ausführen ?

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
quelle
1
Hallo Udhaya Kumar, hast du bemerkt, dass du eine Antwort hast? Bitte lassen Sie mich wissen, wenn Sie es schaffen.
Jacob Vlijm

Antworten:

21

Komplizierte Befehle zu Startup Applications hinzufügen

Im Allgemeinen können Sie Befehle hinzufügen, die beim Starten (Anmelden) ausgeführt werden sollen, indem Sie Folgendes auswählen: Dash> Startanwendungen> Hinzufügen. In diesem Fall müssen Sie einen komplizierten Befehl ausführen.

Dafür gibt es zwei Möglichkeiten:

  1. Schreiben Sie ein separates Skript:

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

    Kopieren Sie das Skript in eine leere Datei, speichern Sie es unter set_monitor.sh und fügen Sie den Startanwendungen wie oben beschrieben den folgenden Befehl hinzu.

    /bin/bash /path/to/set_monitor.sh
    
  2. Verketten Sie die Befehle zu einem (sehr langen) Befehl:

     /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 diesem Fall bewirkt &&die Verwendung zwischen den Befehlen, dass jeder Befehl ausgeführt wird, sobald (und wenn) der vorherige erfolgreich ausgeführt wurde, genau wie in separaten Zeilen.

    Fügen Sie dann den Befehl wie oben beschrieben zu Startup Applications hinzu.

Wichtiger Hinweis: Hinzufügen von xrandr-Befehlen zu Startup Applications

Das Hinzufügen von xrandrBefehlen zum Start kann schwierig sein. Manchmal brechen sie ab, wenn sie zu früh ausgeführt werden, bevor der Desktop vollständig geladen ist. Aus diesem Grund müssen Sie möglicherweise (wahrscheinlich) eine kleine Unterbrechung in den Befehl einfügen, um das Skript oder den Befehl (entweder) auszuführen, beispielsweise (im letzten Fall):

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

Möglicherweise müssen Sie ein wenig mit dem spielen sleep 15, um den optimalen Zeitpunkt zu finden.

Hinweis

Ich habe die erste Zeile weggelassen:

xrandr

da es nichts anderes tut, als ein paar Informationen auf deinem Bildschirm anzuzeigen :)

Jacob Vlijm
quelle
5
Sie müssen den cvtBefehl nicht einfügen, wenn Sie Ihre Modeline bereits kennen.
Thethakuri
1
Die /bin/bash -c "..."Verpackung hat den Trick für mich :)
Superole
Unter Kubuntu 17.10 habe ich den Befehl ohne den sleepTeil in 'Startup applications' hinzugefügt , indem ich die Option "Before Session startup" ausgewählt habe.
pat-s
1
+1 für das Schreiben vor 3 Jahren # xrandr only works in X11 sessions, not Wayland. Gute Zukunftssicherung damals.
WinEunuuchs2Unix
7

Bis nach diesem bei der Automatisierung es jetzt auf Login Abschnitt, ich habe mein eigenes Skript gemacht 45custom_xrandr-settingsund legte sie in /etc/X11/Xsession.d/. Es funktioniert gut für mich unter Ubuntu 14.04 LTS. Sie können den folgenden Code nach dem casein diesem Abschnitt beschriebenen Befehl einfügen .

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;

Ich glaube, dass das oben Genannte das ist, wonach Sie suchen. Sie können die verfügbaren Ausgaben einfach anzeigen, indem Sie den xrandrBefehl ausführen. Die Ausgänge können VGA, VGA-0, DVI-0, TMDS-1oder DisplayPort-0.

Hier ist das vollständige Skript, das ich erstellt habe.

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

Erstellen Sie die Datei ~/.xprofileund fügen Sie Ihre Zeilen ein. Es wird zu Beginn der X-Benutzersitzung ausgeführt.

Golopot
quelle
3
das hat nicht funktioniert. Befehle werden zu früh ausgelöst.
Necktwi
@neckTwi Danke, ich fand, dass xrandr --output ...das nicht funktioniert, aber die vorherigen beiden Zeilen funktionieren. Alles in allem funktioniert das für mich.
Golopot