デュアルモニター設定での全画面アプリケーション


9

LinuxのOptimusは完璧とはほど遠いですが、ネイティブnVidiaドライバーを使用すると、私が過去に経験したほとんどの問題は主に1つを除いて解決されます。

Kodi一部のSteamゲームなどの全画面アプリケーションを実行すると、位置がずれているときは常に、画面が正確に1080pで2つの画面の真ん中の中央に配置されるか、任意のディスプレイに左半分のみが表示されるようにレンダリングされます。

これは、マルチモニタのセットアップをを使用してどのように機能させたかに起因するものだと思います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

3つの画面(すべて1080p)があり、内部ディスプレイが無効になっているため、コンテナが3x1080pであることに気付いたかもしれませんが、パンニングを使用すると、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の互換性に関する情報がほとんどないため、試してみたくありません。

安定したディスプレイマネージャーを新しいディスプレイマネージャーに変更するなど、根本的なことをする前に見逃していたことはありますか?あるいは、私が完全に見逃したアプリケーションを実行するための、ターミナルからの1つの単純なコマンド。

どんな助けでもありがたいです。

追加情報:

xorg.conf、xorg.conf.dは空です。

Section "Module"
    Load "modesetting"
EndSection

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

必要に応じて、コメントで詳細情報をリクエストしてください。


現在、waylandはnvidia独自のドライバーでは使用できません(ただしnouveauで正常に動作します)。楽天がこれにどのように影響するか分からない。
quixotic 2017

@quixotic Little、ディスクリートビデオカードでHDMIポートを機能させるには、妥当性が必要です。バンブルビーは、特定のアプリケーションのポートを有効にするだけです。あなたの言っていることが真実なら、ヌーボーはマルチモニターをサポートすることができません。しかし、私nvidiaは作業mirwaylandサポートについて読んだことがありますが、それは数ヶ月前でした。
Xorifelse

回答:


1

私は数年前からいくつかのスクリプトを使用してxrandr、Arch Linuxにサイドバイサイドと(現在)T字型のデスクトップをセットアップしています。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

Xを起動した直後にside-by-side.shローカルで実行する.xprofileか、そうでなければ実行できます。

このセットアップは、AMDとnVidiaの両方のビデオカードで、独自のドライバーとオープンソースドライバーの両方を使用して機能しました。Xの代わりにWaylandを試したことがないと思いますがxrandr、Waylandで動作すれば動作するはずです。


私はこのコードを使用して複数のことをテスト、変更、試してみましたが、機能せず、画面がティアリングしたり、画面が表示されなかったり、画面が更新されなかったり(マウスを除く)(nvidiaに接続されている2番目のモニターで)チップ)。これを修正するのは本当にパンニングですが、同時に問題自体の原因である可能性があります。
Xorifelse

申し訳ありません。これが私の知識の限界だと思います。実際にセットアップを行うと調査は停止します。
l0b0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.