Aplikasi layar penuh pada pengaturan dua monitor

9

Optimus di Linux masih jauh dari sempurna, tetapi menggunakan nVidiadriver asli sebagian besar masalah yang saya miliki di masa lalu terutama diselesaikan kecuali satu.

Setiap kali saya menjalankan aplikasi layar penuh, seperti Kodiatau beberapa Steampermainan, posisi dimatikan, layar terpusat tepat di tengah-tengah 2 layar pada 1080p tepat atau ditampilkan hanya menampilkan setengah kiri pada layar apa pun.

Saya rasa ini adalah karena pada bagaimana saya membuat multi setup monitor bekerja dengan menggunakan xrandr. Ketika sddmmenginisialisasi itu menjalankan perintah berikut:

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

Namun berfungsi dengan baik karena Anda mungkin melihat wadahnya 3x1080p karena ini disebabkan memiliki 3 layar (semuanya 1080p), menonaktifkan tampilan internal saya dan menggunakan panning saya dapat menggeser output untuk 2 monitor tepat di samping satu sama lain.

Tampaknya saya tidak bisa mengendalikan perilaku layar penuh, noor dalam KDEatau dengan menggunakan put. Bermain-main dalam pengaturan aplikasi saya dapat memilih monitor mana untuk membuatnya, tapi itu membuat di tengah.

Untuk memperjelas:

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

Berikut ini tautan untuk referensi visual

Sejujurnya, saya sudah mencoba banyak hal dan saya bingung di sini. Saya bukan ahli Linux, saya telah menggunakannya selama sekitar 4 tahun sebagai satu-satunya sistem operasi saya.

Karena KDE mendukung, Waylandsaya bersedia mencoba ini namun karena jumlah masalah yang saya miliki dengan Optimus di masa lalu saya enggan untuk mencobanya karena semuanya berjalan begitu lancar dan ada sedikit informasi tentang kompatibilitas Optimus / Nvidia / Wayland. .

Apakah ada sesuatu yang mungkin saya lewatkan sebelum melakukan sesuatu yang radikal seperti mengubah manajer tampilan yang stabil untuk yang baru? Atau mungkin satu perintah sederhana dari terminal untuk menjalankan aplikasi yang saya lewatkan sepenuhnya.

Bantuan apa pun dihargai.

Informasi tambahan:

xorg.conf, xorg.conf.d kosong

Section "Module"
    Load "modesetting"
EndSection

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

Minta informasi lebih lanjut jika diperlukan dalam komentar.

Xorifelse
sumber
di wayland saat ini tidak dapat digunakan dengan driver berpemilik nvidia (tetapi berfungsi baik dengan nouveau). tidak tahu bagaimana optimus mempengaruhi ini.
quixotic
@quixotic Little, saya perlu kesopanan untuk bisa mendapatkan port HDMI bekerja pada kartu video diskrit. Bumblebee hanya bertindak sejauh memungkinkan port untuk aplikasi tertentu. Berarti jika itu benar apa yang Anda katakan nouveau tidak akan dapat mendukung banyak monitor. Tapi saya sudah baca nvidiasedang mengerjakan mirdan waylandmendukung, tapi itu beberapa bulan yang lalu.
Xorifelse

Jawaban:

1

Saya telah menggunakan beberapa skrip di atas xrandrselama beberapa tahun sekarang untuk mengatur berdampingan dan (saat ini) desktop berbentuk tee di Arch Linux. Seharusnya itu pekerjaan sederhana untuk menyesuaikan side-by-side.sh dengan kebutuhan Anda:

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

Jalankan side-by-side.shdi lokal Anda .xprofileatau setelah mulai X, dan Anda harus siap.

Pengaturan ini telah bekerja dengan kartu video AMD dan nVidia, menggunakan driver proprietary dan open source. Saya tidak berpikir saya pernah mencoba dengan Wayland, bukan X, tapi saya curiga itu akan berhasil jika xrandrbekerja dengan Wayland.

l0b0
sumber
Saya telah menguji, memodifikasi, dan mencoba banyak hal dengan kode ini dan tidak dapat membuatnya bekerja sehingga layar sobek, tidak ada layar atau layar tidak me-refresh (kecuali mouse saya) (pada monitor kedua yang terhubung ke nvidia chip). Ini adalah panning yang memperbaiki ini, tetapi pada saat yang sama kemungkinan menjadi penyebab masalah itu sendiri.
Xorifelse
Turut sedih. Saya khawatir ini adalah batas pengetahuan saya sendiri, karena investigasi berhenti begitu saya memiliki pengaturan yang berfungsi.
l0b0