Cách chạy các lệnh xrandr khi khởi động trong Ubuntu


13

Làm thế nào tôi có thể chạy xrandrlệnh sau khi khởi động?

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
Xin chào Udhaya Kumar bạn có nhận thấy bạn có câu trả lời không? Xin vui lòng cho tôi biết nếu bạn quản lý.
Jacob Vlijm

Câu trả lời:


21

Thêm các lệnh phức tạp vào Ứng dụng Khởi động

Nói chung, bạn có thể thêm các lệnh để chạy khi khởi động (đăng nhập) bằng cách chọn: Dash> Ứng dụng khởi động> Thêm. Trong trường hợp này, bạn có một lệnh phức tạp để chạy.

Có hai lựa chọn để làm điều đó:

  1. viết một kịch bản riêng:

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

    Sao chép tập lệnh vào một tệp trống, lưu nó dưới dạng set_monitor.sh và thêm lệnh sau vào các ứng dụng khởi động như mô tả ở trên.

    /bin/bash /path/to/set_monitor.sh
    
  2. Xâu chuỗi các lệnh thành một lệnh (rất dài):

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

    Trong trường hợp này, việc sử dụng &&giữa các lệnh sẽ làm cho mỗi lệnh chạy ngay sau đó (và nếu) lệnh trước đó được chạy thành công, giống như chúng nằm trên các dòng riêng biệt.

    Sau đó thêm lệnh vào Ứng dụng khởi động, như được mô tả ở trên.

Lưu ý quan trọng: thêm các lệnh xrandr vào Ứng dụng khởi động

Thêm xrandrlệnh để khởi động có thể khó khăn; đôi khi chúng bị hỏng nếu chúng chạy quá sớm, trước khi máy tính để bàn được tải đầy đủ. Do đó, bạn có thể (có thể) cần thêm một chút ngắt vào lệnh để (hoặc) chạy tập lệnh hoặc lệnh, như (trong trường hợp cuối):

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

Bạn có thể cần chơi một chút với sleep 15thời gian tối ưu.

Ghi chú

Tôi rời khỏi dòng đầu tiên:

xrandr

vì nó không có gì nhưng hiển thị một số thông tin về thiết lập màn hình của bạn :)


6
Bạn không cần bao gồm cvtlệnh nếu bạn đã biết modeline của mình.
thethakuri

1
Gói /bin/bash -c "..."đã lừa tôi :)
Superole

Trên Kubfox 17.10, tôi đã thêm lệnh mà không có sleepphần trong 'Ứng dụng khởi động' bằng cách chọn tùy chọn "Trước khi khởi động phiên".
pat-s

1
+1 để viết 3 năm trước # xrandr only works in X11 sessions, not Wayland. Tốt trong tương lai trở lại sau đó.
WinEunuuchs2Unix

7

Theo điều này tại phần Tự động hóa nó trên phần đăng nhập , tôi đã tạo tập lệnh của riêng mình 45custom_xrandr-settingsvà đặt nó vào /etc/X11/Xsession.d/. Nó hoạt động tốt với tôi theo Ubuntu 14.04 LTS. Bạn có thể đặt mã bên dưới sau khi caselệnh được mô tả trong phần đó.

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;

Tôi tin rằng ở trên là những gì bạn đang tìm kiếm. Bạn có thể thấy các đầu ra có sẵn chỉ bằng cách chạy xrandrlệnh. Các kết quả có thể VGA, VGA-0, DVI-0, TMDS-1hoặc DisplayPort-0.

Đây là kịch bản hoàn chỉnh mà tôi đã thực hiện.

# 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

Tạo tập tin ~/.xprofilevà đặt các dòng của bạn trong đó. Nó được chạy vào đầu phiên người dùng X.


3
điều này đã không làm việc. lệnh cháy lên quá sớm.
Necktwi

@neckTwi Cảm ơn, tôi thấy rằng xrandr --output ...nó không hoạt động nhưng hai dòng trước hoạt động. Tất cả trong tất cả điều này làm việc cho tôi.
golopot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.