วิธีรันคำสั่ง xrandr เมื่อเริ่มต้นใน Ubuntu


13

ฉันจะรันxrandrคำสั่งต่อไปนี้เมื่อเริ่มต้นได้อย่างไร

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
สวัสดี Udhaya Kumar คุณสังเกตเห็นว่าคุณมีคำตอบหรือไม่? โปรดแจ้งให้เราทราบหากคุณจัดการ
Jacob Vlijm

คำตอบ:


21

การเพิ่มคำสั่งที่ซับซ้อนลงในแอปพลิเคชันเริ่มต้น

โดยทั่วไปคุณสามารถเพิ่มคำสั่งเพื่อเริ่มทำงาน (เข้าสู่ระบบ) โดยเลือก: Dash> แอปพลิเคชันเริ่มต้น> เพิ่ม ในกรณีนี้คุณมีคำสั่งที่ซับซ้อนในการเรียกใช้

มีสองตัวเลือกในการทำเช่นนี้:

  1. เขียนสคริปต์แยกต่างหาก:

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

    คัดลอกสคริปต์ลงในไฟล์ว่างเปล่าบันทึกเป็นset_monitor.sh และเพิ่มคำสั่งต่อไปนี้ลงในแอปพลิเคชันเริ่มต้นตามที่อธิบายไว้ข้างต้น

    /bin/bash /path/to/set_monitor.sh
    
  2. เชื่อมคำสั่งเข้ากับคำสั่งเดียว (ยาวมาก):

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

    ในกรณีนี้การใช้&&ระหว่างคำสั่งจะทำให้แต่ละคำสั่งทำงานทันที (และถ้า) คำสั่งก่อนหน้านี้ทำงานได้อย่างประสบความสำเร็จเช่นเดียวกับที่พวกเขาอยู่บนบรรทัดแยกกัน

    จากนั้นเพิ่มคำสั่งลงในแอปพลิเคชันเริ่มต้นตามที่อธิบายไว้ข้างต้น

หมายเหตุสำคัญ: การเพิ่มคำสั่ง xrandr ให้กับ Startup Applications

การเพิ่มxrandrคำสั่งในการเริ่มต้นอาจเป็นเรื่องยาก บางครั้งมันอาจหยุดทำงานหากทำงานเร็วเกินไปก่อนที่เดสก์ท็อปจะโหลดเต็มที่ ดังนั้นคุณอาจ (อาจ) ต้องเพิ่มตัวแบ่งเล็กน้อยลงในคำสั่งเพื่อ (เรียกใช้) เรียกใช้สคริปต์หรือคำสั่งเช่น (ในกรณีสุดท้าย):

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

คุณอาจจำเป็นต้องเล่นนิดหน่อยsleep 15เพื่อหาเวลาที่เหมาะสม

บันทึก

ฉันออกจากบรรทัดแรก:

xrandr

เนื่องจากมันไม่ได้ทำอะไร แต่แสดงข้อมูลบางอย่างในการตั้งค่าหน้าจอของคุณ :)


6
คุณไม่จำเป็นต้องรวมcvtคำสั่งหากคุณรู้จักแบบจำลองของคุณอยู่แล้ว
thethakuri

1
การ/bin/bash -c "..."ห่อนั้นใช้กลอุบายสำหรับฉัน :)
Superole

บน Kubuntu 17.10 ฉันเพิ่มคำสั่งโดยไม่มีsleepส่วนใน 'Startup applications' โดยเลือกตัวเลือก "Before Session startup"
pat-s

1
+1 สำหรับการเขียน 3 # xrandr only works in X11 sessions, not Waylandปีที่แล้ว อนาคตที่ดีพิสูจน์อักษรกลับมาแล้ว
WinEunuuchs2Unix

7

ตามนี้ที่ตอนนี้มันได้โดยอัตโนมัติเมื่อเข้าสู่ระบบส่วนผมได้ทำสคริปต์ของตัวเองและวางมันลงไป45custom_xrandr-settings /etc/X11/Xsession.d/มันใช้งานได้ดีสำหรับฉันภายใต้ Ubuntu 14.04 LTS คุณสามารถวางรหัสด้านล่างหลังจากcaseคำสั่งที่อธิบายไว้ในส่วนนั้น

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;

ฉันเชื่อว่าสิ่งที่กล่าวมาเป็นสิ่งที่คุณกำลังมองหา คุณสามารถดูผลลัพธ์ที่มีอยู่ได้ง่ายๆเพียงรันxrandrคำสั่ง ผลที่อาจจะVGA, VGA-0, DVI-0, หรือTMDS-1DisplayPort-0

นี่คือสคริปต์ที่สมบูรณ์ที่ฉันทำ

# 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

สร้างไฟล์~/.xprofileและวางบรรทัดในไฟล์ มันรันตอนเริ่มต้นของเซสชันผู้ใช้ X


3
มันใช้งานไม่ได้ คำสั่งยิงเร็วเกินไป
Necktwi

@neckTwi ขอบคุณฉันพบว่าxrandr --output ...ใช้งานไม่ได้ แต่สองบรรทัดก่อนหน้านี้ใช้งานได้ ทั้งหมดนี้ใช้ได้สำหรับฉัน
golopot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.