Cara menjalankan perintah xrandr saat startup di Ubuntu


13

Bagaimana saya bisa menjalankan xrandrperintah berikut saat startup?

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
Hai Udhaya Kumar, apakah Anda memperhatikan ada jawaban? Tolong beri tahu saya jika Anda berhasil.
Jacob Vlijm

Jawaban:


21

Menambahkan perintah yang rumit ke Aplikasi Startup

Secara umum, Anda dapat menambahkan perintah untuk dijalankan saat start up (masuk) dengan memilih: Dash> Startup Applications> Add. Dalam hal ini, Anda memiliki perintah yang rumit untuk dijalankan.

Ada dua opsi untuk melakukan itu:

  1. tulis skrip terpisah:

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

    Salin skrip ke file kosong, simpan sebagai set_monitor.sh dan tambahkan perintah berikut untuk aplikasi startup seperti dijelaskan di atas.

    /bin/bash /path/to/set_monitor.sh
    
  2. Rangkai perintah ke satu (sangat panjang) perintah:

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

    Dalam hal ini, menggunakan &&antara perintah akan membuat setiap perintah berjalan segera (dan jika) yang sebelumnya dijalankan dengan sukses, sama seperti mereka berada di baris yang terpisah.

    Kemudian tambahkan perintah ke Startup Applications, seperti dijelaskan di atas.

Catatan penting: menambahkan perintah xrandr ke Aplikasi Startup

Menambahkan xrandrperintah ke startup bisa rumit; terkadang mereka rusak jika dijalankan terlalu dini, sebelum desktop terisi penuh. Oleh karena itu Anda mungkin (mungkin) perlu menambahkan sedikit break ke perintah untuk (menjalankan) skrip atau perintah, seperti (dalam kasus terakhir):

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

Anda mungkin perlu bermain sedikit dengan sleep 15untuk menemukan waktu yang optimal.

Catatan

Saya meninggalkan baris pertama:

xrandr

karena tidak ada tetapi menampilkan beberapa informasi pada pengaturan layar Anda :)


6
Anda tidak perlu memasukkan cvtperintah jika Anda sudah tahu modeline Anda.
thethakuri

1
The /bin/bash -c "..."pembungkus melakukan trik untuk saya :)
Superole

Pada Kubuntu 17.10, saya menambahkan perintah tanpa sleepbagian dalam 'Aplikasi startup' dengan memilih opsi "Sebelum Sesi startup".
pat-s

1
+1 untuk ditulis 3 tahun yang lalu # xrandr only works in X11 sessions, not Wayland. Pemeriksaan kedepan yang bagus saat itu.
WinEunuuchs2Unix

7

Menurut ini di bagian Now automate pada bagian login , saya telah membuat skrip saya sendiri 45custom_xrandr-settingsdan meletakkannya di /etc/X11/Xsession.d/. Ini berfungsi dengan baik untuk saya di bawah Ubuntu 14.04 LTS. Anda dapat menempatkan kode di bawah ini setelah caseperintah yang dijelaskan di bagian itu.

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;

Saya percaya bahwa di atas adalah apa yang Anda cari. Anda dapat melihat output yang tersedia hanya dengan menjalankan xrandrperintah. Output mungkin VGA, VGA-0, DVI-0, TMDS-1atau DisplayPort-0.

Berikut ini skrip lengkap yang saya buat.

# 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

Buat file ~/.xprofiledan masukkan baris Anda di dalamnya. Itu dijalankan pada awal sesi pengguna X.


3
ini tidak berhasil. perintah menyala terlalu dini.
Necktwi

@neckTwi Terima kasih, saya menemukan itu xrandr --output ...tidak berfungsi tetapi dua baris sebelumnya berfungsi. Semua ini bekerja untuk saya.
golopot
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.