Полноэкранные приложения на двух мониторах

9

Optimus в Linux далек от совершенства, однако при использовании встроенных nVidiaдрайверов большинство проблем, с которыми я сталкивался в прошлом, в основном решены, кроме одной.

Всякий раз, когда я запускаю полноэкранное приложение, например, Kodiили в некоторых Steamиграх, положение отключено, либо экран центрируется прямо посередине двух экранов точно на 1080p, либо отображается только левая половина на любом дисплее.

Я думаю, это связано с тем, как я настроил мультимониторный режим xrandr. При sddmинициализации запускается следующая команда:

xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --output HDMI-1-1 --mode 1920x1080 --pos 1920x0 --output HDMI-0 --primary --mode 1920x1080 --panning 3840x1080+0+0/0x0+0+0/0/0/-1920/0

Однако он работает отлично, так как вы можете заметить, что контейнер имеет размер 3x1080p, поскольку это связано с наличием 3 экранов (все по 1080p), отключением моего внутреннего дисплея и использованием панорамирования. Я могу сместить вывод для 2 мониторов рядом друг с другом.

Похоже, я не могу контролировать поведение в полноэкранном режиме, ни в, KDEни с помощью put. Играя в настройках приложений, я могу выбрать, на каком мониторе его рендерить, но он все равно рендерится в центре.

Чтобы уточнить:

xs on monitor left at 1920/2
ys on monitor left at 1080
xe on monitor right at (1920/2)+1920
ye on monitor right at 1080

Вот ссылка для визуальной ссылки

Если честно, я много чего перепробовал и тут растерялся. Я не эксперт по Linux, я использую его около 4 лет как свою единственную операционную систему.

Поскольку KDE поддерживает, Waylandя готов попробовать, однако из-за большого количества проблем, которые у меня были с Optimus в прошлом, я не хотел бы пробовать его, потому что все работает так гладко и мало информации о совместимости Optimus / Nvidia / Wayland ,

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

Любая помощь приветствуется.

Дополнительная информация:

xorg.conf, xorg.conf.d пуст.

Section "Module"
    Load "modesetting"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "PCI:1:0:0"
    Option "AllowEmptyInitialConfiguration"
EndSection

Запросите дополнительную информацию, если это необходимо в комментариях.

Xorifelse
источник
В настоящее время Wayland непригоден для проприетарных драйверов nvidia (но отлично работает с nouveau). не знаю, как оптимизус влияет на это.
донкихотский
@ quixotic Немного, мне нужно уместно, чтобы заставить порт HDMI работать на дискретной видеокарте. Шмель только заходит так далеко, что позволяет включить порт для конкретного приложения. То есть, если это правда, что вы говорите, nouveau не сможет поддерживать несколько мониторов. Но я читал, что nvidiaработал mirи waylandподдерживал, но это было пару месяцев назад.
Xorifelse

Ответы:

1

Я использовал некоторые сценарии на вершине в xrandrтечение нескольких лет , чтобы установить бок о бок и ( в настоящее время) тройник-образный десктопов на Arch Linux. Это должна быть простая работа по адаптации side-by-side.sh к вашим потребностям:

#!/bin/sh
eval `\`dirname -- "$0"\`/monitor_resolutions.sh`
expected_monitors=2
if [ "${monitor_count:-0}" -ne "$expected_monitors" ]
then
    echo "$0: Expected ${expected_monitors} monitors; found ${monitor_count:-0}." >&2
    exit 1
fi

xrandr \
    --output "$monitor1_name" \
        --mode ${monitor1_width}x${monitor1_height} \
        --rotate normal \
    --output "$monitor2_name" \
        --mode ${monitor2_width}x${monitor2_height} \
        --right-of "$monitor1_name" \
        --rotate normal

вспомогательный скрипт monitor_resolutions.sh :

#!/bin/sh
#
# NAME
#        monitor_resolutions.sh - Variables for monitor resolutions
#
# SYNOPSIS
#        eval `./monitor_resolutions.sh`
#
# DESCRIPTION
#        Prints a set of `eval`-able variable assignments with monitor name,
#        width and height for each monitor plus a monitor count.
#
# EXAMPLES
#        eval `./monitor_resolutions.sh`
#               Assign monitor1_name, monitor1_width, monitor1_height,
#               monitor2_name, etc. and monitor_count variables.
#
# BUGS
#        https://github.com/l0b0/tilde/issues
#
# COPYRIGHT
#        Copyright (C) 2013-2014 Victor Engmark
#
#        This program is free software: you can redistribute it and/or modify
#        it under the terms of the GNU General Public License as published by
#        the Free Software Foundation, either version 3 of the License, or
#        (at your option) any later version.
#
#        This program is distributed in the hope that it will be useful,
#        but WITHOUT ANY WARRANTY; without even the implied warranty of
#        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#        GNU General Public License for more details.
#
#        You should have received a copy of the GNU General Public License
#        along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
################################################################################

monitor_info() {
    xrandr --query | tee ~/.xsession-xrandr-query
}

monitor_resolutions() {
    # Input: XRandR monitor info
    # Output: Lines with monitor name, width and height separated by spaces
    while read -r word1 word2 _
    do
        if [ "${word2:-}" = 'connected' ]
        then
            IFS='xi ' read -r width height _
            printf '%s %d %d\n' "$word1" "$width" "$height"
        fi
    done
}

monitor_assignments() {
    # Input: Lines with monitor name, width and height separated by spaces
    # Output: eval-able variable assignments for each input value, including a final count
    count=0
    while read monitor width height
    do
        count=$(($count + 1))
        printf "monitor%d_name='%s'\n" "$count" "$monitor"
        printf "monitor%d_width='%s'\n" "$count" "$width"
        printf "monitor%d_height='%s'\n" "$count" "$height"
    done
    printf "monitor_count='%s'\n" "$count"
}

monitor_info | monitor_resolutions | monitor_assignments

Бегите side-by-side.shв своем локальном .xprofileили другом месте сразу после запуска X, и вы должны быть в порядке.

Эта установка работала как с видеокартами AMD, так и с видеокартами nVidia, используя как проприетарные драйверы, так и драйверы с открытым исходным кодом. Я не думаю, что я когда-либо пробовал с Wayland вместо X, но я подозреваю, что это должно работать, если xrandrработает с Wayland.

l0b0
источник
Я протестировал, изменил и попробовал несколько вещей с помощью этого кода и не смог заставить его работать, что приводило к разрыву экрана, отсутствию экрана или к тому, что экран просто не обновлялся (кроме моей мыши) (на втором мониторе, подключенном к nvidia чип). Это действительно панорамирование, которое исправляет это, но в то же время, вероятно, причина самой проблемы.
Xorifelse
Жаль это слышать. Боюсь, это предел моих собственных знаний, так как расследования прекратились, как только у меня была рабочая установка.
17