双显示器设置上的全屏应用程序


9

Linux上的Optimus远非完美,但是使用本机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

如果需要,请在评论中索取更多信息。


目前,Wayland在nvidia专有驱动程序上无法使用(但在nouveau上可以正常使用)。不知道擎天柱如何影响这一点。
quixotic

@quixotic小小,我需要适当的权限才能使HDMI端口在分立视频卡上正常工作。Bumblebee只能为特定应用启用端口。如果您说的是真的话,那么nouveau将无法支持多台显示器。但是我已经读到了nvidia它的工作mirwayland支持,但这是几个月前的事。
Xorifelse

Answers:


1

我用了一些剧本上的顶xrandr好几年,现在成立并排侧,(目前)T形桌面上的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

在启动X之后side-by-side.sh在本地运行,.xprofile否则就可以运行了。

使用专有和开源驱动程序,此设置可用于AMD和nVidia视频卡。我认为我从未尝试过使用Wayland而不是X,但是我怀疑应该xrandr与Wayland一起使用才行。


我已经使用此代码测试,修改并尝试了多种操作,但无法正常工作,导致屏幕撕裂,无屏幕或仅刷新屏幕(鼠标除外)(在与nvidia连接的第二台显示器上)芯片)。解决此问题的确实是平移,但同时也可能是问题本身的原因。
Xorifelse

很抱歉听到这个消息。恐怕这是我自己的知识的极限,因为一旦我有了一个可行的设置,调查就会停止。
l0b0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.