Xubuntu сохранить конфигурацию нескольких мониторов

У меня есть настройка нескольких мониторов с двумя экранами (3 с самим ноутбуком T460s) на xubuntu 16.04 с KVM-переключателем DP. Ноутбук подключается через док-станцию ​​Dock-3 через 2 порта DP.

Каждый раз, когда я переключаюсь с рабочего стола на ноутбук, конфигурация монитора теряется, поэтому мне приходится настраивать ее с нуля, включая активацию отдельных мониторов. Есть ли способ сохранить эти настройки и восстановить их автоматически, если ноутбук подключен к док-станции?

(укороченный) выход xrandr с подключенными экранами:

Screen 0: minimum 8 x 8, current 6800 x 1440, maximum 32767 x 32767
eDP1 connected 2560x1440+4240+0 (normal left inverted right x axis y axis) 310mm x 170mm
   2560x1440     60.00*+  48.00  
   1920x1440     60.00  

   .........

DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP2-1 connected 1680x1050+2560+0 (normal left inverted right x axis y axis) 473mm x 296mm
   1680x1050     59.88*+  59.95  
   1920x1080     60.00    50.00    59.94  

   ..........

DP2-2 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
   2560x1440     59.95*+
   1920x1200     59.95  

   ..........

DP2-3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
2
задан 14 February 2018 в 19:35

3 ответа

Не 16,04 определенных

Проблема, с которой Вы сталкиваетесь, не эксклюзивна к 16,04, это происходит на многих версиях Ubuntu.

Как решить

Чтение вывода xrandr, и принятие меня не сделало опечатки, следующая команда должна расположить Ваши экраны путем, Вы настраиваете его:

xrandr --output DP2-2 --auto --pos 0x0 --output DP2-1 --auto --pos 2560x0 --output eDP1 --auto --pos 4240x0

Самое быстрое и самое легкое решение состоит в том, чтобы добавить его к сочетанию клавиш: Настройки> Клавиатура> Ярлыки Приложения. Затем нажмите ярлык после того, как экраны будут соединены.

Объяснение

От вывода xrandr, мы видим информацию о трех связанных экранах:

eDP1 connected 2560x1440+4240+0
DP2-1 connected 1680x1050+2560+0
DP2-2 connected primary 2560x1440+0+0

В последнем разделе (разделах): 2560x1440+4240+0, в части: +4240+0, мы видим положение экрана в целом изображении объединенных экранов (x, y). Слева направо экраны затем, очевидно, расположены как:

DP2-2 +0+0 | DP2-1 +2560+0 | eDP1 +4240+0

enter image description here

Если это расположение не помнят автоматически, мы можем настроить его с командой, которую я добавил в начале этого ответа.

Опция --auto Я добавил, так как Вы упомянули, что имели необходимость также активировать экраны.

Править

Согласно просьбе, маленький сценарий удара для выполнения в фоновом режиме для создания установки, если экраны соединены:

#!/bin/bash

let "target = 3"
swon=false

function nscreens {
    curr=$(xrandr | grep " connected" | wc -l)
}

function setup_scr {
    xrandr --output DP2-1 --auto --pos 0x0 \
    --output DP2-2 --auto --pos 2560x0 \
    --output eDP1 --auto --pos 4240x0
}

while true
do
  sleep 4
  nscreens
  if [ "$curr" -eq "$target" ] && [ "$swon" == false ]
  then
    setup_scr
    swon=true
  elif [ "$curr" -ne "$target" ] && [ "$swon" == true ]
  then
    swon=false
  fi
done
  • Скопируйте сценарий в пустой файл, сохраните его как setup_scr.sh, сделайте это исполняемым файлом
  • Тестовый прогон это в терминале с командой:

    /path/to/setup_scr.sh
    

    соедините/разъедините экраны

  • если это хорошо работает, добавьте его для запущения приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:

    /bin/bash -c "sleep 15 && /path/to/setup_scr.sh"
    

Объяснение

  • Однажды в 4 секунды, сценарий считает количество связанных экранов. Если это равняется 3, это выполняет установку единственное время, помня, что это действительно устанавливало экраны путем переключения значения "swon" (включенного) к true.

    Затем, если количество экранов больше не равно 3, "swon" установлен на false снова, и так далее.

Примечание:

Я протестировал сценарий на своих двух - экранная установка, и это хорошо работало, однако, всегда существует возможность, я сделал опечатку где-нибудь, и очевидно я не мог протестировать его в Вашей системе. В случае ошибки упомяните.

4
ответ дан 15 February 2018 в 05:35

Я попробовал метод, предложенный Jacob Vlijm, которого я, конечно, отредактировал для своего сценария. Это действительно не совсем работало и по некоторым причинам любая команда xrand, которая имела - автоматический, или - на месте продажи в нем разрушил мою машину (Im с помощью Xubuntu 16.04)

Вот мое решение этого

xrandr --output HDMI1 --mode 1920x1080 --pos 0x0 --rate 60.00 --output eDP1 --off

, это берет мой вторичный дисплей, который я подключил по HDMI, и устанавливает его на 1 080 пунктов 60 Гц при отключении моего дисплея портативного компьютера

xrandr --output eDP1 --mode 1366x768 --pos 0x0 --rate 60.00

, это устанавливает мой дисплей портативного компьютера на его родное разрешение 1366x768 60 Гц

, я использую первую установку, когда я подключен к 2 дисплеям, и я использую вторую установку, когда я подключен только к своему дисплею портативного компьютера.

Вот мой setup_scr.sh файл:

#!/bin/bash

let "target = 2"
swon=false

function nscreens 
{
        curr=$(xrandr | grep " connected" | wc -l)
}

function setup_dubai 
{
    xrandr --output HDMI1 --mode 1920x1080 --pos 0x0 --rate 60.00 --output eDP1 --off
}

function setup_normal 
{
    xrandr --output eDP1 --mode 1366x768 --pos 0x0 --rate 60.00
}

while true
do
  sleep 4
    nscreens
  if [ "$curr" -eq "$target" ] && [ "$swon" == false ]
  then
    setup_dubai
    swon=true
  elif [ "$curr" -ne "$target" ] && [ "$swon" == true ]
  then
    swon=false
    setup_normal
  fi
done

Спасибо Jacob Vlijm для того, чтобы сделать эту установку реальной простой с его хорошим объяснением

0
ответ дан 15 February 2018 в 05:35
  • 1
    I' ll пробуют это. Но я хотел команду удара, вероятно udevadm с некоторыми параметрическими усилителями, который получает этот файл. Это находится где-нибудь в по левую сторону судна код. – Pilot6 22 August 2017 в 18:17

они отвечают, только о восстановлении. Для "сохранения" текущего состояния, Вы могли использовать этот документ на получение (dump_randr.sh)

#!/bin/bash
fileName="$1"
while read -r line; do
    IFS=" "
    entry=( $line )
    display=${entry[0]}
    IFS="x+"
    if [[ "${entry[2]}" == primary ]]; then
        primary=1
        measurement=( ${entry[3]} )
    else
        primary=0
        measurement=( ${entry[2]} )
    fi
    unset IFS
    width=${measurement[0]}
    height=${measurement[1]}
    left=${measurement[2]}
    top=${measurement[3]}

    xrandrOpt="$xrandrOpt --output $display --mode ${width}x${height} --pos ${left}x${top}"
    ((primary)) && xrandrOpt="$xrandrOpt --primary"

done < <(xrandr | grep " connected")

echo "#!/bin/bash" > "$fileName"
echo "xrandr $xrandrOpt" > "$fileName"
chmod +x "$fileName"

Это выведет текущие xrandr опции использовать их снова. Можно сделать что-то вроде этого для хранения текущей установки:

dump_randr.sh 2_monitors_home.sh

который создает 2_monitors_home.sh восстановить текущее состояние.

2
ответ дан 17 April 2019 в 05:52

Другие вопросы по тегам:

Похожие вопросы: