Não há GLX na placa Intel com vários assentos e placa nVidia adicional

10

Eu tenho multiseat configurado e meu Xorg tem 2 layouts de servidor. Um é para placa nVidia e outro é para placa Intel. Ambos funcionam, mas o servidor de vídeo atribuído à placa Intel não possui aceleração de hardware, pois o módulo DRI e GLX usado é do driver da nVidia.

Portanto, minha pergunta é: posso configurar layouts de alguma forma para usar o DRI e GLX corretos em cada placa?

Meu Xorg.conf:

Section "ServerLayout"
    Identifier     "Default"
    Screen      0  "Screen0" 0 0
    Option         "Xinerama" "0"
EndSection

Section "ServerLayout"
    Identifier     "TV"
    Screen      0  "Screen1" 0 0
    Option         "Xinerama" "0"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "DELL E198WFP"
    HorizSync       30.0 - 83.0
    VertRefresh     56.0 - 75.0
    Option         "DPMS"
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Unknown"
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GT 610"
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "intel"
    BusID          "PCI:0:2:0"
    Option         "AccelMethod" "uxa"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-1"
    Option         "metamodes" "DFP-0: nvidia-auto-select +1440+0, DFP-1: nvidia-auto-select +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "Device1"
    Monitor        "Monitor1"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Arquivo de log para Intel:

[    18.239] 
X.Org X Server 1.13.0
Release Date: 2012-09-05
[    18.239] X Protocol Version 11, Revision 0
[    18.239] Build Operating System: Linux 2.6.24-32-xen x86_64 Ubuntu
[    18.239] Current Operating System: Linux bytewiper 3.5.0-18-generic #29-Ubuntu SMP Fri Oct 19 10:26:51 UTC 2012 x86_64
[    18.239] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.5.0-18-generic root=UUID=fc0616fd-f212-4846-9241-ba4a492f0513 ro quiet splash
[    18.239] Build Date: 20 September 2012  11:55:20AM
[    18.239] xorg-server 2:1.13.0+git20120920.70e57668-0ubuntu0ricotz (For technical support please see http://www.ubuntu.com/support) 
[    18.239] Current version of pixman: 0.26.0
[    18.239]    Before reporting problems, check http://wiki.x.org
    to make sure that you have the latest version.
[    18.239] Markers: (--) probed, (**) from config file, (==) default setting,
    (++) from command line, (!!) notice, (II) informational,
    (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[    18.239] (==) Log file: "/var/log/Xorg.1.log", Time: Wed Nov 21 18:32:14 2012
[    18.239] (==) Using config file: "/etc/X11/xorg.conf"
[    18.239] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
[    18.239] (++) ServerLayout "TV"
[    18.239] (**) |-->Screen "Screen1" (0)
[    18.239] (**) |   |-->Monitor "Monitor1"
[    18.240] (**) |   |-->Device "Device1"
[    18.240] (**) Option "Xinerama" "0"
[    18.240] (==) Automatically adding devices
[    18.240] (==) Automatically enabling devices
[    18.240] (==) Automatically adding GPU devices
[    18.240] (WW) The directory "/usr/share/fonts/X11/cyrillic" does not exist.
[    18.240]    Entry deleted from font path.
[    18.240] (WW) The directory "/usr/share/fonts/X11/100dpi/" does not exist.
[    18.240]    Entry deleted from font path.
[    18.240] (WW) The directory "/usr/share/fonts/X11/75dpi/" does not exist.
[    18.240]    Entry deleted from font path.
[    18.240] (WW) The directory "/usr/share/fonts/X11/100dpi" does not exist.
[    18.240]    Entry deleted from font path.
[    18.240] (WW) The directory "/usr/share/fonts/X11/75dpi" does not exist.
[    18.240]    Entry deleted from font path.
[    18.240] (WW) The directory "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" does not exist.
[    18.240]    Entry deleted from font path.
[    18.240] (==) FontPath set to:
    /usr/share/fonts/X11/misc,
    /usr/share/fonts/X11/Type1,
    built-ins
[    18.240] (==) ModulePath set to "/usr/lib/x86_64-linux-gnu/xorg/extra-modules,/usr/lib/xorg/extra-modules,/usr/lib/xorg/modules"
[    18.240] (II) The server relies on udev to provide the list of input devices.
    If no devices become available, reconfigure udev or disable AutoAddDevices.
[    18.240] (II) Loader magic: 0x7f6917944c40
[    18.240] (II) Module ABI versions:
[    18.240]    X.Org ANSI C Emulation: 0.4
[    18.240]    X.Org Video Driver: 13.0
[    18.240]    X.Org XInput driver : 18.0
[    18.240]    X.Org Server Extension : 7.0
[    18.240] (II) config/udev: Adding drm device (/dev/dri/card0)
[    18.241] (--) PCI: (0:0:2:0) 8086:0152:1043:84ca rev 9, Mem @ 0xf7400000/4194304, 0xd0000000/268435456, I/O @ 0x0000f000/64
[    18.241] (--) PCI:*(0:1:0:0) 10de:104a:1458:3546 rev 161, Mem @ 0xf6000000/16777216, 0xe0000000/134217728, 0xe8000000/33554432, I/O @ 0x0000e000/128, BIOS @ 0x????????/524288
[    18.241] (II) Open ACPI successful (/var/run/acpid.socket)
[    18.241] Initializing built-in extension Generic Event Extension
[    18.241] Initializing built-in extension SHAPE
[    18.241] Initializing built-in extension MIT-SHM
[    18.241] Initializing built-in extension XInputExtension
[    18.241] Initializing built-in extension XTEST
[    18.241] Initializing built-in extension BIG-REQUESTS
[    18.241] Initializing built-in extension SYNC
[    18.241] Initializing built-in extension XKEYBOARD
[    18.241] Initializing built-in extension XC-MISC
[    18.241] Initializing built-in extension SECURITY
[    18.241] Initializing built-in extension XINERAMA
[    18.241] Initializing built-in extension XFIXES
[    18.241] Initializing built-in extension RENDER
[    18.241] Initializing built-in extension RANDR
[    18.241] Initializing built-in extension COMPOSITE
[    18.241] Initializing built-in extension DAMAGE
[    18.241] Initializing built-in extension MIT-SCREEN-SAVER
[    18.241] Initializing built-in extension DOUBLE-BUFFER
[    18.241] Initializing built-in extension RECORD
[    18.241] Initializing built-in extension DPMS
[    18.241] Initializing built-in extension X-Resource
[    18.241] Initializing built-in extension XVideo
[    18.241] Initializing built-in extension XVideo-MotionCompensation
[    18.241] Initializing built-in extension XFree86-VidModeExtension
[    18.241] Initializing built-in extension XFree86-DGA
[    18.241] Initializing built-in extension XFree86-DRI
[    18.241] Initializing built-in extension DRI2
[    18.241] (II) LoadModule: "glx"
[    18.241] (II) Loading /usr/lib/x86_64-linux-gnu/xorg/extra-modules/libglx.so
[    18.247] (II) Module glx: vendor="NVIDIA Corporation"
[    18.247]    compiled for 4.0.2, module version = 1.0.0
[    18.247]    Module class: X.Org Server Extension
[    18.247] (II) NVIDIA GLX Module  310.19  Thu Nov  8 01:12:43 PST 2012
[    18.247] Loading extension GLX
[    18.247] (II) LoadModule: "intel"
[    18.248] (II) Loading /usr/lib/xorg/modules/drivers/intel_drv.so
[    18.248] (II) Module intel: vendor="X.Org Foundation"
[    18.248]    compiled for 1.13.0, module version = 2.20.13
[    18.248]    Module class: X.Org Video Driver
[    18.248]    ABI class: X.Org Video Driver, version 13.0
[    18.248] (II) intel: Driver for Intel Integrated Graphics Chipsets: i810,
    i810-dc100, i810e, i815, i830M, 845G, 854, 852GM/855GM, 865G, 915G,
    E7221 (i915), 915GM, 945G, 945GM, 945GME, Pineview GM, Pineview G,
    965G, G35, 965Q, 946GZ, 965GM, 965GME/GLE, G33, Q35, Q33, GM45,
    4 Series, G45/G43, Q45/Q43, G41, B43, B43, Clarkdale, Arrandale,
    Sandybridge Desktop (GT1), Sandybridge Desktop (GT2),
    Sandybridge Desktop (GT2+), Sandybridge Mobile (GT1),
    Sandybridge Mobile (GT2), Sandybridge Mobile (GT2+),
    Sandybridge Server, Ivybridge Mobile (GT1), Ivybridge Mobile (GT2),
    Ivybridge Desktop (GT1), Ivybridge Desktop (GT2), Ivybridge Server,
    Ivybridge Server (GT2), Haswell Desktop (GT1), Haswell Desktop (GT2),
    Haswell Desktop (GT2+), Haswell Mobile (GT1), Haswell Mobile (GT2),
    Haswell Mobile (GT2+), Haswell Server (GT1), Haswell Server (GT2),
    Haswell Server (GT2+), Haswell SDV Desktop (GT1),
    Haswell SDV Desktop (GT2), Haswell SDV Desktop (GT2+),
    Haswell SDV Mobile (GT1), Haswell SDV Mobile (GT2),
    Haswell SDV Mobile (GT2+), Haswell SDV Server (GT1),
    Haswell SDV Server (GT2), Haswell SDV Server (GT2+),
    Haswell ULT Desktop (GT1), Haswell ULT Desktop (GT2),
    Haswell ULT Desktop (GT2+), Haswell ULT Mobile (GT1),
    Haswell ULT Mobile (GT2), Haswell ULT Mobile (GT2+),
    Haswell ULT Server (GT1), Haswell ULT Server (GT2),
    Haswell ULT Server (GT2+), Haswell CRW Desktop (GT1),
    Haswell CRW Desktop (GT2), Haswell CRW Desktop (GT2+),
    Haswell CRW Mobile (GT1), Haswell CRW Mobile (GT2),
    Haswell CRW Mobile (GT2+), Haswell CRW Server (GT1),
    Haswell CRW Server (GT2), Haswell CRW Server (GT2+),
    ValleyView PO board
[    18.248] (++) using VT number 8

[    18.593] (II) intel(0): using device path '/dev/dri/card0'
[    18.593] (**) intel(0): Depth 24, (--) framebuffer bpp 32
[    18.593] (==) intel(0): RGB weight 888
[    18.593] (==) intel(0): Default visual is TrueColor
[    18.593] (**) intel(0): Option "AccelMethod" "uxa"
[    18.593] (--) intel(0): Integrated Graphics Chipset: Intel(R) Ivybridge Desktop (GT1)
[    18.593] (**) intel(0): Relaxed fencing enabled
[    18.593] (**) intel(0): Wait on SwapBuffers? enabled
[    18.593] (**) intel(0): Triple buffering? enabled
[    18.593] (**) intel(0): Framebuffer tiled
[    18.593] (**) intel(0): Pixmaps tiled
[    18.593] (**) intel(0): 3D buffers tiled
[    18.593] (**) intel(0): SwapBuffers wait enabled

...

[    20.312] (II) Module fb: vendor="X.Org Foundation"
[    20.312]    compiled for 1.13.0, module version = 1.0.0
[    20.312]    ABI class: X.Org ANSI C Emulation, version 0.4
[    20.312] (II) Loading sub module "dri2"
[    20.312] (II) LoadModule: "dri2"
[    20.312] (II) Module "dri2" already built-in
[    20.312] (==) Depth 24 pixmap format is 32 bpp
[    20.312] (II) intel(0): [DRI2] Setup complete
[    20.312] (II) intel(0): [DRI2]   DRI driver: i965
[    20.312] (II) intel(0): Allocated new frame buffer 1920x1080 stride 7680, tiled
[    20.312] (II) UXA(0): Driver registered support for the following operations:
[    20.312] (II)         solid
[    20.312] (II)         copy
[    20.312] (II)         composite (RENDER acceleration)
[    20.312] (II)         put_image
[    20.312] (II)         get_image
[    20.312] (==) intel(0): Backing store disabled
[    20.312] (==) intel(0): Silken mouse enabled
[    20.312] (II) intel(0): Initializing HW Cursor
[    20.312] (II) intel(0): RandR 1.2 enabled, ignore the following RandR disabled message.
[    20.313] (**) intel(0): DPMS enabled
[    20.313] (==) intel(0): Intel XvMC decoder enabled
[    20.313] (II) intel(0): Set up textured video
[    20.313] (II) intel(0): [XvMC] xvmc_vld driver initialized.
[    20.313] (II) intel(0): direct rendering: DRI2 Enabled
[    20.313] (==) intel(0): hotplug detection: "enabled"
[    20.332] (--) RandR disabled

[    20.335] (EE) Failed to initialize GLX extension (Compatible NVIDIA X driver not found)

[    20.335] (II) intel(0): Setting screen physical size to 508 x 285
[    20.338] (II) XKB: reuse xkmfile /var/lib/xkb/server-B20D7FC79C7F597315E3E501AEF10E0D866E8E92.xkm
[    20.340] (II) config/udev: Adding input device Power Button (/dev/input/event1)
[    20.340] (**) Power Button: Applying InputClass "evdev keyboard catchall"
[    20.340] (II) LoadModule: "evdev"
[    20.340] (II) Loading /usr/lib/xorg/modules/input/evdev_drv.so
MeanEYE
fonte
1
Se você está no 18.04, isso agora deve funcionar apenas com o TMG graças ao suporte ao glvnd. Em versões mais antigas, você precisava para mexer com variáveis de ambiente LD_PRELOAD para fazer programas usam o libGL direito, mas isso agora é desnecessária: D
Léo Lam
1
@ LéoLam levou apenas 5 anos. Antes tarde do que nunca, suponho.
precisa saber é o seguinte

Respostas:

7

Ok, encontrei uma solução, mas há um erro que impede a aceleração de hardware de funcionar nas GPUs da Intel no momento no Ubuntu 12.10 com a nova biblioteca Mesa 9.0.1.

Em suma, o problema estava no carregamento do GLX. A nVidia pressionaria seu próprio módulo GLX e pisaria nos dedos da Intel.

Encontrei uma solução observando esta linha:

[    18.240] (==) ModulePath set to "/usr/lib/x86_64-linux-gnu/xorg/extra-modules,/usr/lib/xorg/extra-modules,/usr/lib/xorg/modules"

Ou seja, os módulos localizados /usr/lib/x86_64-linux-gnu/xorg/extra-modulessão todos específicos da nVidia. Então eu configurei o LightDM para usar dois xorg.confarquivos. No Intel, eu configurei manualmente, ModulePathexcluindo o diretório nVidia. Isso resultou no carregamento do módulo GLX adequado.

Meu /etc/lightdm/lightdm.confarquivo fica assim:

[SeatDefaults]
user-session=ubuntu
greeter-session=unity-greeter
allow-guest=false

[Seat:0]
xserver-layout=Default
xserver-config=xorg.conf.nvidia

[Seat:1]
xserver-layout=TV
xserver-config=xorg.conf.intel

Linhas adicionadas a xorg.conf.intel:

Section "Files"
    ModulePath     "/usr/lib/xorg/extra-modules"
    ModulePath     "/usr/lib/xorg/modules"
EndSection
MeanEYE
fonte
1

Do meu lado, com o Ubuntu 14.04, os caminhos são diferentes e Nvidia override driver proprietário libglx.soem /usr/lib/xorg/modules/extensions/libglx.so.

Para resolver o problema, eu duplicar /usr/lib/xorg/modulesem /usr/lib/xorg/modules-nvidia e reinstalar o Intel amigável libglx.socom:

sudo apt-get install --reinstall xserver-xorg-core

Isso restaura o original libglx.so. No xorg.conf.nvidia, adiciono o caminho aos módulos válidos:

Section "Files" ModulePath "/usr/lib/xorg/modules-nvidia" EndSection

Além disso, em /etc/lightdm/lightdm.confeu tenho que adicionar: xserver-command=/usr/bin/X -sharevtsna [Seat:1]seção. Esta dica foi encontrada aqui .

Muito obrigado a MeanEYE, que me aponta da maneira certa.

antoine
fonte
1

Então, pesquisei um pouco e descobri que existem várias maneiras diferentes de obter as configurações Multisseat (Multi-estação, Multi-Terminal etc.).

1) O método que eu recomendaria, pois usa seu Xorg padrão e um driver de kernel embutido, está usando evdev . Aqui está um guia sobre como configurar uma configuração multiseat de 4 GPU e 4 monitores usando evdev. O guia é destinado às GPUs Debian Sarge e SiS, mas acho que você pode deduzir muitas informações muito úteis deste guia: https://en.wikibooks.org/wiki/Multiterminal_with_evdev

2) Outro método é usar o Xypher , um servidor X Windows diferente baseado no KDrive. Não sei se esse é o caminho que você deseja seguir, mas aqui está o guia: https://en.wikibooks.org/wiki/en:Multiterminal_with_Xephyr

3) Outra opção é usar uma ferramenta chamada Multiseat Display Manager (MDM), que promete automatizar todo o processo de instalação para você; no entanto, ela não parece ser atualizada, por isso não a recomendo. No entanto, você pode encontrá-lo facilmente com o Google como último recurso.

Não sei o que você fez ou ainda não fez na sua configuração. Portanto, sua melhor aposta é ler o guia evdev e tentar identificar as etapas que você ainda não fez. As maiores diferenças que estou vendo é

A) No exemplo xorg.conf, há apenas 1 seção Screen e ServerLayout. As telas adicionais e o ServerLayout são definidos em um conf separado, todos juntos: xorg.conf.probe

B) Além disso, todos os dispositivos são explicitamente referenciados por seus BusIDs, que foram obtidos usando lspci e

C) As interrupções estão desabilitadas na irq 10.

Espero que isso ajude você a começar a trabalhar, boa sorte!

michealPW
fonte
Ok, isso ajuda muito. Vou tentar com 2 xorg.confarquivos diferentes e espero que funcione.
precisa saber é o seguinte
Isso ainda não resolve o meu problema com o nVidia GLX sendo carregado no caso da placa Intel.
MeanEYE
0

No Ubuntu 16.04, eu precisava atualizar o /usr/local/bin/Xwrapper com:

exec /usr/bin/Xorg -modulepath '/usr/lib/xorg/extra-modules,/usr/lib/xorg/modules' "$@"

/etc/X11/Xsession.d/00ldlibrarypode testar a $XDG_SEATvariável e os conjuntos export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa:/usr/lib/i386-linux-gnu/mesa/apenas para a placa Intel.

convidado
fonte
0

Na versão 18.04, o suporte ao glvnd permite que os usuários tenham os drivers Mesa e proprietários da Nvidia instalados com muita facilidade , sem ter que mexer no LD_PRELOAD! Todas as variáveis ​​de ambiente e os scripts do wrapper agora são desnecessários.


Como isso não está marcado com uma versão específica do Ubuntu e as respostas existentes não funcionaram totalmente com meu sistema (Ubuntu 15.10), estou postando esta resposta que é usada logind.

Basicamente, para que o GLX e o libGL funcionem, é necessário configurar o servidor X e a sessão do usuário para usar a implementação correta do libGL, dependendo do local.

Portanto, você precisa de um script de wrapper para que o LightDM inicie o X e um script do Xsession para configurar, LD_LIBRARY_PATHpara que a sessão use a libGL correta.


Em /etc/X11/Xsession.d/00ldlibrary:

#!/bin/bash

if ps aux | grep "/usr/local/bin/X $DISPLAY" | grep -q seat1; then
    export LD_LIBRARY_PATH=/usr/lib/nvidia-352:/usr/lib32/nvidia-352
fi
if ps aux | grep "/usr/local/bin/X $DISPLAY" | grep -q seat0; then
    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa:/usr/lib/i386-linux-gnu/mesa/
fi

(supondo que seat1 use nvidia e seat0 mesa)


Da mesma forma, você precisa agrupar o servidor X ( /usr/local/bin/X):

#!/bin/bash

if grep -q seat1 <<<$*; then
    export LD_LIBRARY_PATH=/usr/lib/nvidia-352
    echo "Detected seat1, using nvidia-352 libs"
fi
if grep -q seat0 <<<$*; then
    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa
    echo "Detected seat0, using mesa libs"
fi

exec /usr/bin/Xorg "$@"

Por fim, você precisará configurar o LightDM para usá-los em /etc/lightdm/lightdm.conf:

[Seat:*]
# needed to use the correct libraries for mesa/nvidia,
# along with a Xsession.d script (00ldlibrary)
xserver-command=/usr/local/bin/X
session-setup-script=/etc/X11/Xsession.d/00ldlibrary

Para obter mais detalhes, consulte meu repo multiseat-mesa-nvidia, que possui mais detalhes e possui os arquivos e scripts de configuração completos.

Léo Lam
fonte
-1

Estou usando o Arch linux, mas isso me ajudou um pouco a carregar os drivers proprietários da Intel e da Nvidia carregados com gl/vaapi/vdpaufuncionalidade.

Tudo o que você precisa fazer (perguntas e respostas):

Instale proprietário nvidia-utils.

Copiar /usr/lib/xorg/modulespara/usr/lib/xorg/modules_nvidia

Baixar e descompactar o mais recente libva-intel-driver, mesa-vdpau, mesa, mesa-libgl, e xorg-servercomo pacotes montagem sua arquitetura em um diretório separado. Então cp -r(como root / sudo) o conteúdo de "separate directory"/usr/libalgo como /usr/lib_intele "separate directory"/usr/lib/xorg/modules/*para o /usr/lib/xorg/modulesdiretório atual (sobrescrevendo).

E

echo "/usr/lib_intel" > /etc/ld.conf.d/intel_glx.conf
ldconfig

Reinicie X-Servers, tenteglxinfo

Isso se autodestruirá nas atualizações da nvidia, é claro.

Eu descobri que isso não está funcionando ao reiniciar.

Hack muito melhor:

Não crie um arquivo ld.so.conf.d /. Em vez disso, adicione o seguinte a / usr / bin / X:

PREV_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
if [[ "$@" == *"vt7"* ]]
then
export LD_LIBRARY_PATH=/usr/lib_intel;$PREV_LD_LIBRARY_PATH
export LD_PRELOAD=/usr/lib_intel/libGL.so
fi

mude "vt7" para o que o gerente de exibição usar para iniciar o servidor intel x (: 0,: ​​2, vt7, vt8, isolatodevice = ...)

Obviamente, você também pode copiar / usr / bin / X para / usr / bin / Xintel e editá-lo, apontando sua wm para esse arquivo (kdm 'ServerCmd').

Em seguida, edite ou crie um novo arquivo de sessão, por exemplo, / usr / bin / startkde (sem verificar o DISPLAY #!), Adicionando:

export LD_LIBRARY_PATH=/usr/lib_intel;$PREV_LD_LIBRARY_PATH
export LD_PRELOAD=/usr/lib_intel/libGL.so

Dessa forma, você nem precisa sobrescrever nada. Rm 'no diretório / usr / lib_intel e redefinindo os 2 arquivos editados é tudo o que você precisa fazer para remover esse hack novamente.

arch4ever
fonte
O Ubuntu é bem diferente do Arch Linux, portanto, embora a ideia geral seja boa ( LD_LIBRARY_PATH), não funcionará em um sistema Ubuntu.
Léo Lam