Ứng dụng toàn màn hình trên thiết lập màn hình kép


9

Optimus trên Linux không hoàn hảo tuy nhiên sử dụng nVidiatrình điều khiển gốc hầu hết các vấn đề tôi gặp phải trong quá khứ chủ yếu được giải quyết ngoại trừ một vấn đề.

Bất cứ khi nào tôi chạy một ứng dụng toàn màn hình, như Kodihoặc một số Steamtrò chơi, vị trí sẽ tắt, màn hình được đặt chính giữa ở giữa 2 màn hình trên 1080p chính xác hoặc được hiển thị chỉ hiển thị nửa bên trái trên bất kỳ màn hình nào.

Tôi nghĩ rằng điều này là do cách tôi thực hiện cài đặt đa màn hình hoạt động bằng cách sử dụng xrandr. Khi sddmkhởi tạo, nó chạy lệnh sau:

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

Tuy nhiên, nó hoạt động hoàn hảo vì bạn có thể nhận thấy container có 3x1080p vì điều này là do có 3 màn hình (tất cả đều là 1080p), vô hiệu hóa màn hình bên trong của tôi và sử dụng panning Tôi có thể thay đổi đầu ra cho 2 màn hình ngay cạnh nhau.

Dường như tôi không thể kiểm soát hành vi toàn màn hình, tiếng ồn trong KDEhoặc bằng cách sử dụng put. Chơi xung quanh trong cài đặt ứng dụng Tôi có thể chọn màn hình nào để hiển thị trên màn hình, nhưng nó sẽ hiển thị ở trung tâm.

Làm rõ:

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

Đây là một liên kết để tham khảo trực quan

Thành thật mà nói, tôi đã thử nhiều thứ và tôi bị thua ở đây. Tôi không phải là chuyên gia Linux, tôi đã sử dụng nó được khoảng 4 năm với tư cách là hệ điều hành duy nhất của tôi.

Vì KDE hỗ trợ Waylandnên tôi sẵn sàng dùng thử, tuy nhiên do số lượng sự cố tôi gặp phải với Optimus trong quá khứ, tôi không muốn dùng thử vì mọi thứ đều hoạt động trơn tru và có rất ít thông tin về khả năng tương thích Optimus / Nvidia / Wayland .

Có bất cứ điều gì có lẽ tôi đã bỏ lỡ trước khi làm bất cứ điều gì triệt để như thay đổi trình quản lý hiển thị ổn định cho một cái mới không? Hoặc có lẽ một lệnh đơn giản từ thiết bị đầu cuối để chạy các ứng dụng tôi đã bỏ lỡ hoàn toàn.

Bất kỳ trợ giúp được đánh giá cao.

Thông tin thêm:

xorg.conf, xorg.conf.d trống.

Section "Module"
    Load "modesetting"
EndSection

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

Yêu cầu thêm thông tin nếu cần trong ý kiến.


hiện tại wayland không thể sử dụng được với trình điều khiển độc quyền của nvidia (nhưng hoạt động tốt với nouveau). dunno làm thế nào tối ưu ảnh hưởng đến điều này.
quixotic

@quixotic Ít, tôi cần sự quan tâm để có thể làm cho cổng HDMI hoạt động trên card màn hình rời. Bumblebee chỉ đi xa đến mức cho phép cổng cho một ứng dụng cụ thể. Có nghĩa là nếu đúng như những gì bạn đang nói nouveau sẽ không thể hỗ trợ nhiều màn hình. Nhưng tôi đã đọc nvidiađang làm việc mirwaylandhỗ trợ, nhưng đó là một vài tháng trước.
Xorifelse

Câu trả lời:


1

Tôi đã sử dụng một số tập lệnh trên đầu trang trong xrandrmột số năm nay để thiết lập máy tính để bàn cạnh nhau và (hiện tại) trên Arch Linux. Nó sẽ là một công việc đơn giản để thích ứng side-by-side.sh với nhu cầu của bạn:

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

script_resolutions.sh helper script:

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

Chạy side-by-side.shtrong địa phương của bạn .xprofilehoặc nếu không ngay sau khi bắt đầu X, và bạn nên đi.

Thiết lập này đã hoạt động với cả thẻ video AMD và nVidia, sử dụng cả trình điều khiển nguồn mở và độc quyền. Tôi không nghĩ tôi đã từng thử với Wayland thay vì X, nhưng tôi nghi ngờ rằng nó nên hoạt động nếu tôi xrandrlàm việc với Wayland.


Tôi đã thử nghiệm, sửa đổi và thử nhiều thứ với mã này và không thể làm cho nó hoạt động dẫn đến rách màn hình, không có màn hình hoặc màn hình không làm mới (ngoại trừ chuột của tôi) (trên màn hình thứ hai được kết nối với nvidia Chip). Nó thực sự là panning khắc phục điều này, nhưng đồng thời có khả năng là nguyên nhân của vấn đề.
Xorifelse

Rất tiếc khi biết điều đó. Tôi e rằng đây là giới hạn kiến ​​thức của riêng tôi, vì các cuộc điều tra đã dừng lại khi tôi có một thiết lập hoạt động.
l0b0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.