Дополнительный дисплей всегда добавляется на неправильной стороне

У меня есть настольный компьютер с Radeon R7 360 и драйверами FOS. Мой основной дисплей, который я использую всегда, подключен к порту DVI, и мое ТВ подключено к HDMI, в случае, если я хочу поставить любые видео или фильмы или просто нуждаться в дополнительном дисплее.

Однако, когда я включаю свое ТВ, и оно распознано Ubuntu, дополнительное пространство всегда добавляется к неправильной стороне. Я обычно принимаю решение "развернуть рабочий стол до правой стороны", но что на самом деле происходит, мой основной рабочий стол, затем отображен по телевизору, и мой обычный монитор "добавляется" к своему пространству. Я затем всегда должен входить в настройки и перетаскивать дисплеи в правильном порядке, эта установка также не сохраняется, так как я должен восстановить эту процедуру каждый раз, когда я включаю свое ТВ для расширения моего рабочего стола.

Есть ли какое-либо решение для этого, или у кого-то есть идея о том, где настроить фиксированную конфигурацию для моих двух дисплеев?

Я в настоящее время использую Ubuntu Studio 15.10 с Xfce.

Править: Это - вывод xrandr:

Screen 0: minimum 320 x 200, current 4480 x 1080, maximum 16384 x 16384
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1080+2560+0 (normal left inverted right x axis y axis) 160mm x 90mm
   1920x1080     60.00*+  50.00    59.94    30.00    25.00    24.00    29.97    23.98  
   1920x1080i    60.00    50.00    59.94  
   1280x1024     60.02  
   1360x768      60.02  
   1152x864      59.97  
   1280x720      60.00    50.00    59.94  
   1024x768      60.00  
   800x600       60.32  
   720x576       50.00  
   720x576i      50.00  
   720x480       60.00    59.94  
   640x480       60.00    59.94  
   720x400       70.08  
DVI-0 connected primary 2560x1080+0+0 (normal left inverted right x axis y axis) 673mm x 284mm
   2560x1080     60.00*+
   1920x1080     60.00  
   1680x1050     59.88  
   1280x1024     75.02    60.02  
   1280x800      59.91  
   1152x864      75.00  
   1024x768      75.08    60.00  
   800x600       75.00    60.32  
   640x480       75.00    60.00  
   720x400       70.08  
0
задан 13 February 2016 в 21:34

2 ответа

Кажется, что Ваше ТВ физически разъединяется при выключении его еще это возможно не проиграет сет. Ниже двух опций решить проблему, которая наиболее вероятна результат ошибки:

  1. (Фон) сценарий ниже (опция [1.] должен автоматически переместить экран телевизора (в Вашем случае: HDMI-0) направо от Вашего основного экрана, если это было соединено, будучи разъединенным.
  2. Сочетание клавиш делает то же, но вручную после соединения (включения) ТВ.

1. Фоновый сценарий, автоматически устанавливая второй экран

Сценарий записан таким способом, которым он берет экран, Вы хотите появиться справа (тот, который разъединяется время от времени) как аргумент (см. объяснение ниже). Поэтому это работает с любой комбинацией экранов, только необходимо ввести имя правильного экрана в команду. Сценарий найдет разрешение левого экрана для корректного расположения.

Сценарий

#!/usr/bin/env python3
import subprocess
import time
import sys

"""
This script is a fix for what is presumably a bug, causing the secundary screen
to appear on the left side instead of the right side of the "main" screen.
Run it in the background.
"""

#--- set your secundary (right) screen below
sec = sys.argv[1]
#---

scr_id = sec+" connected"

def get_xrandr():
    return subprocess.check_output("xrandr").decode("utf-8")

def get_setup():
    # returns output of xrandr if secundary monitor was connected (else None)
    get_xr = subprocess.check_output("xrandr").decode("utf-8")
    if scr_id in get_xr:
        return get_xr

def get_xshift(xr):
    # find connected screens (lines)
    mons = [l for l in xr.splitlines() if " connected" in l]
    # get name and x-size of main screen
    left = [l.split() for l in mons if not l.startswith(scr_id)][0]
    return [(left[0], s.split("x")[0]) for s in left if s.count("+") == 2][0]

check1 = []
while True:
    time.sleep(4)
    check2 = get_setup()
    if check1 != check2:
        # on change in monitor setup:
        if check2 != None:
            # if secundary monitor was just connected
            print("run setup")
            x_shiftdata = get_xshift(check2)
            cmd1 = ["xrandr",  "--output", x_shiftdata[0], "--pos", "0x0"]
            cmd2 = ["xrandr",  "--output", sec, "--pos", x_shiftdata[1]+"x0"]
            for cmd in [cmd1, cmd2]:
                subprocess.call(cmd)
    check1 = check2

Как использовать

  1. Скопируйте сценарий в пустой файл, сохраните его как screen_set.py
  2. Тестовый прогон это со вторичным экраном как спор с командой:

    python3 /path/to/screen_set.py HDMI-0
    

    (так как HDMI-0 Ваш вторичный экран), Разъединение (выключает) ТВ и соединяет его снова, это должно появиться на правой стороне.

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

     /bin/bash -c "sleep 15 && python3 /path/to/screen_set.py HDMI-0"
    

Теперь это должно быть решено.

2. Кроме того; сочетание клавиш

Фоновый сценарий практически ничего не добавляет к загрузке процессора и не будет замечен что. Если Вы однако предпочли бы сочетание клавиш (автоматически работающий) фоновый сценарий, добавьте команду:

/bin/bash -c "xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0"

который сделает то же, но вручную: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:

/bin/bash -c "xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0"

Объяснение; фоновый сценарий

  • Однажды в четыре секунды, сценарий проверяет, соединено ли ТВ путем проверки если строка HDMI-0 connected находится в выводе команды xrandr.
  • (Только), если существует изменение в состоянии: False -> True, сценарий выполняет команду (в Вашем случае):

    xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0
    

    который располагает Ваши экраны слева направо, как объяснено здесь. Если Ваши разрешения экранов отличаются однако, сценарий ищет корректные числа и название основного экрана. Пока Вы используете вторичный экран в качестве аргумента, он хорошо работает.

3
ответ дан 29 September 2019 в 12:14

У меня есть карта ATI R5, которая никогда не сохраняет мое графическое расположение для моих трех мониторов с помощью xfce4-display-settings. ARandR должен решить Вашу проблему. Установка путем ввода следующего в терминале:

sudo apt-get install arandr

Использование ARandR для конфигурирования экранов сохраните его к сценарию (Расположение> Сохраняют как), и установите его для выполнения как Сессия и Запуск> объект Автоматического запуска Приложения. (Вы, возможно, должны установить его для сна 5 сначала прежде, чем запустить скрипт расположения.)

, Если у Вас есть две различных разметки, которые Вы используете, можно настроить каждого из тех, которые имеют ARandR. Затем можно запустить один скрипт или другой, в зависимости от которого расположения Вы хотите. Или еще лучше Вы могли присвоить каждого их собственному сочетанию клавиш, раз так желаемому.

2
ответ дан 29 September 2019 в 12:14

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

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