У меня есть настройка нескольких мониторов с двумя экранами (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)
Проблема, с которой Вы сталкиваетесь, не эксклюзивна к 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
Если это расположение не помнят автоматически, мы можем настроить его с командой, которую я добавил в начале этого ответа.
Опция --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
снова, и так далее.
Я протестировал сценарий на своих двух - экранная установка, и это хорошо работало, однако, всегда существует возможность, я сделал опечатку где-нибудь, и очевидно я не мог протестировать его в Вашей системе. В случае ошибки упомяните.
Я попробовал метод, предложенный 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 для того, чтобы сделать эту установку реальной простой с его хорошим объяснением
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
восстановить текущее состояние.