Włączanie akceleracji sprzętowej i Xinerama dla wielu monitorów / wielu procesorów graficznych w systemie Linux

10

Moja obecna konfiguracja to trzy monitory podłączone w następujący sposób (monitory wymienione od lewej do prawej):

GPU0 (nVidia GTX 280):
- Dell 2405FPW (1920x1200)
- Dell U2410 (1920x1200)
GPU1 (nVidia 210):
- Dell 2405FPW (1920x1200)

Działa jak urok w Windows 7, nie tak bardzo w Linuksie. Wydaje mi się, że mam tylko trzy prawdziwe opcje:

  1. Uruchom wszystkie trzy monitory jako osobny ekran X, dostaję przyspieszenie sprzętowe, ale ponieważ wszystkie są niezależnymi sesjami X, nie mogę przenosić okien między nimi i mogę mieć firefox otwarty na jednym w danym momencie.
  2. Uruchom dwa na GPU0 w trybie TwinView i miej GPU1 jako osobny ekran X. To samo ograniczenie co 1, ale co najmniej dwa monitory działają razem. Miałem problem polegający na tym, że czasami Linux widział oba monitory na GPU0 jako pojedynczy duży monitor.
  3. Włącz Xinerama i spraw, aby wszystko działało tak, jak chcę, ale akceleracja sprzętowa zniknęła, a ekran jest niespokojny.

Moim idealnym rozwiązaniem byłoby, aby wszystkie ekrany działały tak, jak w Xineramie, bez ograniczenia wyłączania przyspieszenia sprzętowego. Nie dbam nawet o to, czy oznacza to renderowanie wszystkich trzech na GPU0 i jakoś wyeksponowanie wyświetlania trzeciego monitora na GPU1, cokolwiek działa.

Moje pytanie brzmi: czy jest jakiś sposób, aby to osiągnąć? Nie wydaje mi się, żeby mój przypadek użycia był tak duży, że nie powinna istnieć przynajmniej jakaś forma wsparcia (poza trzema ograniczonymi opcjami przedstawionymi powyżej), czy też moja najlepsza opcja to po prostu wyssać go i odebrać lepszej karty, która zastąpi oba, które same potrafią obsłużyć trzy wyjścia?

mynameiscoffey
źródło
1
Czy to odpowiada na twoje pytanie?
Naftuli Kay

Odpowiedzi:

1

To jest skrypt, który napisałem na Linux Mint za pomocą XFCE dla tego samego rodzaju instalacji. Nie korzystam z Xinerama. Moje ustawienie to 1. portret monitora, 2. i 3. krajobraz. Działa jak urok. 5 sekundowa przerwa na początku była spowodowana tym, że została ustawiona na rozpoczęcie sesji, a jeśli uruchomiono ją zbyt wcześnie, nie działała poprawnie.

Zauważ też, że w moim konkretnym przykładzie musiałem wyrównać ekrany na dole, ponieważ jeden był wyższy od drugiego. Wyrównywanie u góry nie dawało oczekiwanego zachowania.

W końcu użycie xrandr było jedynym sposobem, w jaki działałem tak, jak chciałem.

Spróbuj z własnymi ustawieniami

#!/bin/bash
sleep 5
xrandr --size 5040x1920 --output HDMI-0 --mode 1920x1080 --pos 1200x840 --primary \
--output DVI-1-1 --mode 1920x1080 --pos 3120x840 \
--output DVI-0 --mode 1920x1200 --pos 0x0 --rotate left

Napisałem artykuł na moim blogu, jednak jest on w języku francuskim: https://akim.sissaoui.com/linux-attitude/un-bureau-etendu-sur-trois-ecrans-avec-deux-cartes-graphiques/

Akim Sissaoui
źródło
0

Zasadniczo odpowiedziałeś sobie. W Linuksie nie jest to obecnie możliwe, ponieważ Linux nie ma odpowiedniej obsługi wielu procesorów graficznych.

Wiele projektów GPU dla Linuksa zostało zaproponowanych jako projekt na Google Summer of Code. Ale to bardzo mało prawdopodobne, aby w najbliższym czasie był gotowy na pierwszą porę, jeśli mnie o to poprosisz.

runeks
źródło