Как запускать команды 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
Привет, Удхайя Кумар, ты заметил, что у тебя есть ответ? Пожалуйста, дайте мне знать, если вам удастся.
Джейкоб Влейм

Ответы:

21

Добавление сложных команд в автозагрузку приложений

В общем, вы можете добавить команды для запуска при входе в систему (войти в систему), выбрав: 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"
    

    В этом случае использование &&между командами приведет к выполнению каждой команды, как только (и если) предыдущая будет выполнена успешно, точно так же, как они находятся в отдельных строках.

    Затем добавьте команду в Startup Applications, как описано выше.

Важное примечание: добавление команд 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части в «Запуск приложений», выбрав опцию «Перед запуском сеанса».
Пат-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-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
ioaniatr
источник
2

Создайте файл ~/.xprofileи вставьте в него свои строки. Он запускается в начале сеанса X пользователя.

golopot
источник
3
это не сработало. команды запускаются слишком рано.
Necktwi
@neckTwi Спасибо, я обнаружил, что xrandr --output ...это не работает, но предыдущие две строки работают. В целом, это работает для меня.
Голопот