Aplikacje pełnoekranowe w konfiguracji z dwoma monitorami


9

Optimus w Linuksie nie jest doskonały, jednak przy użyciu natywnych nVidiasterowników większość problemów, które miałem w przeszłości, zostały głównie rozwiązane, z wyjątkiem jednego.

Ilekroć uruchamiam aplikację pełnoekranową, na przykład Kodilub w niektórych Steamgrach, pozycja jest wyłączona, albo ekran jest wyśrodkowany na środku 2 ekranów dokładnie na 1080p lub jest renderowany z pokazaniem tylko lewej połowy na dowolnym ekranie.

Myślę, że wynika to z tego, jak sprawiłem, że konfiguracja wielu monitorów działała xrandr. Podczas sddminicjalizacji uruchamia następujące polecenie:

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

Działa to jednak doskonale, ponieważ można zauważyć, że pojemnik ma wymiary 3x1080p, ponieważ wynika to z posiadania 3 ekranów (wszystkie to 1080p), wyłączenia mojego wewnętrznego wyświetlacza i przesuwania obrazu. Jestem w stanie przesunąć wyjście dla 2 monitorów obok siebie.

Wygląda na to, że nie jestem w stanie kontrolować zachowania na pełnym ekranie, KDEani za pomocą ani za pomocą put. Grając w ustawieniach aplikacji, mogę wybrać monitor, na którym ma być renderowany, ale i tak renderuje się w środku.

Wyjaśnić:

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

Oto link do odniesienia wizualnego

Szczerze mówiąc, próbowałem wielu rzeczy i jestem tutaj zagubiony. Nie jestem ekspertem od Linuksa, używam go od około 4 lat jako mojego jedynego systemu operacyjnego.

Ponieważ obsługa KDE jest Waylandgotowa spróbować, jednak ze względu na liczbę problemów, które miałem w przeszłości z Optimusem, nie chcę tego wypróbowywać, ponieważ wszystko działa tak płynnie i niewiele jest informacji o kompatybilności Optimus / Nvidia / Wayland .

Czy jest coś, co mógłbym przeoczyć, zanim zrobię coś tak radykalnego, jak zmiana stabilnego menedżera wyświetlania na nowy? A może jedno uproszczone polecenie z terminala do uruchamiania aplikacji, które całkowicie mi brakowało.

Każda pomoc jest mile widziana.

Dodatkowe informacje:

xorg.conf, xorg.conf.d jest pusty.

Section "Module"
    Load "modesetting"
EndSection

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

Poproś o więcej informacji w razie potrzeby w komentarzach.


obecnie Wayland nie nadaje się do użytku z własnymi sterownikami NVIDIA (ale działa dobrze z Nouveau). Nie wiem, jak Optimus na to wpływa.
donkiszotyczny

@ Quixotic Little, potrzebuję przyzwoitości, aby port HDMI działał na dyskretnej karcie graficznej. Trzmiel posuwa się tylko tak daleko, jak tylko włączenie portu dla określonej aplikacji. Czy to prawda, że ​​to, co mówisz, nie będzie w stanie obsłużyć wielu monitorów. Ale czytałem, że nvidiapracowałem miri waylandwspierałem, ale to było kilka miesięcy temu.
Xorifelse,

Odpowiedzi:


1

Od kilku lat korzystam z niektórych skryptów,xrandr aby skonfigurować równoległe i (obecnie) teowe pulpity w Arch Linux. Dostosowanie side-by-side.sh do twoich potrzeb powinno być prostym zadaniem :

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

skrypt pomocniczy 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

Uruchom side-by-side.shlokalnie .xprofilelub w inny sposób tuż po uruchomieniu X, i powinieneś być gotowy.

Ta konfiguracja działa zarówno z kartami graficznymi AMD, jak i nVidia, przy użyciu zarówno zastrzeżonych, jak i otwartych sterowników. Nie sądzę, żebym kiedykolwiek próbował z Waylandem zamiast X, ale podejrzewam, że powinno działać, jeśli iff xrandrdziała z Waylandem.


Testowałem, modyfikowałem i próbowałem wielu rzeczy z tym kodem i nie mogłem go uruchomić, powodując zrywanie ekranu, brak ekranu lub że ekran po prostu się nie odświeżał (z wyjątkiem mojej myszy) (na drugim monitorze podłączonym do nvidii żeton). Naprawdę to panoramowanie to rozwiązuje, ale jednocześnie prawdopodobna przyczyna samego problemu.
Xorifelse

Przykro mi to słyszeć. Obawiam się, że jest to granica mojej własnej wiedzy, ponieważ dochodzenia zatrzymały się, gdy miałem działającą konfigurację.
l0b0
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.