Як запустити 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
Привіт Удхая Кумар, ти помітив, що ти маєш відповідь? Будь ласка, дайте мені знати, якщо вам вдасться.
Яків Влійм

Відповіді:


22

Додавання складних команд до програм запуску

Загалом, ви можете додати команди для запуску при запуску (увійти), вибравши: Dash> Startup Applications> Add. У цьому випадку у вас є складна команда для запуску.

Для цього є два варіанти:

  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 до програм запуску

Додавання 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участі у програмі "Запуск програм", вибравши опцію "Перед запуском сесії".
пат-с

1
+1 для написання 3 роки тому # xrandr only works in X11 sessions, not Wayland. Гарне майбутнє перевірка тоді.
WinEunuuchs2Unix

Це рішення, нарешті, спрацювало в моєму Debian 10 з двома моніторами: Apple Thunderbolt 27 + LG 27MP59G. Рідно LG підтримує лише 1920x1080. З ним xrandrя встановив його при тій же роздільній здатності Tunderbolt 2560x1440 с /bin/bash -c "sleep 3&&xrandr --output DP-2 --auto --scale-from 2560x1440".
f0nzie

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-1або DisplayPort-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 ...це не працює, але попередні два рядки працюють. В цілому це для мене працює.
голопот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.