Vollbildanwendungen auf Dual-Monitor-Setup

9

Optimus unter Linux ist alles andere als perfekt, aber mit den nativen nVidiaTreibern werden die meisten Probleme, die ich in der Vergangenheit hatte, hauptsächlich gelöst, bis auf eines.

Immer wenn ich eine Vollbildanwendung ausführe, wie Kodioder bei einigen SteamSpielen, bei denen die Position deaktiviert ist, wird entweder der Bildschirm genau in der Mitte der beiden Bildschirme auf genau 1080p zentriert oder es wird nur die linke Hälfte auf einem Bildschirm angezeigt.

Ich denke, das liegt daran, wie ich das Multi-Monitor-Setup zum Laufen gebracht habe xrandr. Bei der sddmInitialisierung wird der folgende Befehl ausgeführt:

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

Es funktioniert jedoch einwandfrei, da Sie möglicherweise feststellen, dass der Container 3x1080p ist, da dies auf 3 Bildschirme (alle 1080p) zurückzuführen ist, die interne Anzeige deaktiviert und das Schwenken verwendet wird. Ich kann den Ausgang für 2 Monitore direkt nebeneinander verschieben.

Es scheint, dass ich das Verhalten im Vollbildmodus nicht steuern kann, weder in KDEnoch mit put. Wenn ich in den Anwendungseinstellungen herumspiele, kann ich auswählen, auf welchem ​​Monitor es gerendert werden soll, aber es wird trotzdem in der Mitte gerendert.

Zu klären:

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

Hier ist ein Link als visuelle Referenz

Um ehrlich zu sein, habe ich viele Dinge ausprobiert und bin hier ratlos. Ich bin kein Linux-Experte, ich benutze es seit ungefähr 4 Jahren als mein einziges Betriebssystem.

Da KDE unterstützt, Waylandbin ich bereit, dies zu versuchen. Aufgrund der vielen Probleme, die ich in der Vergangenheit mit Optimus hatte, möchte ich es nur ungern ausprobieren, da alles so reibungslos läuft und es nur wenige Informationen zur Optimus / Nvidia / Wayland-Kompatibilität gibt .

Gibt es etwas, das ich vielleicht verpasst habe, bevor ich etwas so Radikales getan habe, wie einen stabilen Display-Manager gegen einen neuen auszutauschen? Oder vielleicht ein vereinfachter Befehl vom Terminal zum Ausführen von Anwendungen, den ich komplett verpasst habe.

Jede Hilfe wird geschätzt.

Zusätzliche Information:

xorg.conf, xorg.conf.d ist leer.

Section "Module"
    Load "modesetting"
EndSection

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

Fordern Sie bei Bedarf weitere Informationen in den Kommentaren an.

Xorifelse
quelle
Derzeit ist Wayland mit den proprietären Treibern von NVIDIA unbrauchbar (funktioniert aber gut mit Nouveau). Keine Ahnung, wie sich Optimus darauf auswirkt.
Quixotic
@quixotic Wenig, ich brauche Anstand, um den HDMI-Anschluss auf der diskreten Grafikkarte zum Laufen zu bringen. Bumblebee geht nur so weit, den Port für eine bestimmte Anwendung zu aktivieren. Das heißt, wenn es stimmt, was Sie sagen, kann Nouveau nicht mehrere Monitore unterstützen. Aber ich habe gelesen , dass nvidiadaran gearbeitet mirund waylandunterstützt wurde, aber das war vor ein paar Monaten.
Xorifelse

Antworten:

1

Ich habe einige verwendet Skripte auf die xrandrnun schon seit einigen Jahren Seite an Seite einzurichten und (derzeit) T-förmigen Desktops auf Arch Linux. Es sollte eine einfache Aufgabe sein, side-by-side.sh an Ihre Bedürfnisse anzupassen:

#!/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

Hilfsskript 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

Laufen Sie side-by-side.shin Ihrem lokalen .xprofileoder einem anderen Bereich, kurz nachdem Sie X gestartet haben, und Sie sollten bereit sein, loszulegen.

Dieses Setup hat sowohl mit AMD- als auch mit nVidia-Grafikkarten funktioniert, wobei sowohl proprietäre als auch Open Source-Treiber verwendet wurden. Ich glaube nicht, dass ich es jemals mit Wayland anstelle von X versucht habe, aber ich vermute, dass das funktionieren sollte, wenn es xrandrmit Wayland funktioniert.

l0b0
quelle
Ich habe mit diesem Code mehrere Dinge getestet, geändert und ausprobiert und konnte ihn nicht zum Laufen bringen, was zu Bildschirmrissen, keinem Bildschirm oder einer Aktualisierung des Bildschirms (außer meiner Maus) führte (auf dem zweiten mit dem NVIDIA verbundenen Monitor) Chip). Es ist wirklich das Schwenken, das dies behebt, aber gleichzeitig wahrscheinlich die Ursache des Problems selbst.
Xorifelse
Tut mir leid das zu hören. Ich fürchte, dies ist die Grenze meines eigenen Wissens, da die Ermittlungen eingestellt wurden, sobald ich ein funktionierendes Setup hatte.
10b0