No hay GLX en la tarjeta Intel con multiseat con tarjeta nVidia adicional

10

Tengo varios asientos configurados y mi Xorg tiene 2 diseños de servidor. Una es para la tarjeta nVidia y otra para la tarjeta Intel. Ambos funcionan, pero el servidor de visualización asignado a la tarjeta Intel no tiene aceleración de hardware, ya que el módulo DRI y GLX que se utiliza es del controlador nVidia.

Entonces, mi pregunta es, ¿puedo configurar diseños de alguna manera para usar DRI y GLX correctos con cada tarjeta?

Mi 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

Archivo de registro 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
fuente
1
Si está en 18.04, ahora debería funcionar con Just Work (TM) gracias al soporte glvnd. En versiones anteriores, tenía que meterse con las variables de entorno LD_PRELOAD para hacer que los programas usaran el libGL correcto, pero esto ahora es innecesario: D
Léo Lam
1
@ LéoLam tardó solo 5 años. Mejor tarde que nunca, supongo.
MeanEYE

Respuestas:

7

Bien, encontré una solución, pero hay un error que impide que la aceleración de hardware funcione en las GPU de Intel en este momento en Ubuntu 12.10 con la nueva biblioteca Mesa 9.0.1.

En resumen, el problema era cargar GLX. nVidia empujaría su propio módulo GLX y pisaría los pies de Intel.

Encontré una solución al notar esta línea:

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

Es decir, los módulos ubicados en /usr/lib/x86_64-linux-gnu/xorg/extra-modulestodos son nVidia específicos. Así que configuré LightDM para usar dos xorg.confarchivos. En Intel one, configuré manualmente ModulePathexcluyendo el directorio nVidia. Esto dio como resultado la carga del módulo GLX adecuado.

Mi /etc/lightdm/lightdm.confarchivo se ve así:

[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

Líneas agregadas a xorg.conf.intel:

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

Por mi parte, con Ubuntu 14.04, los caminos son diferentes y Nvidia driver propietario de anulación libglx.soen /usr/lib/xorg/modules/extensions/libglx.so.

Para resolver el problema, duplico /usr/lib/xorg/modulesen /usr/lib/xorg/modules-nvidia y volver a instalar el procesador Intel amigable libglx.socon:

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

Esto restaura el original libglx.so. En el xorg.conf.nvidia, agrego la ruta a los módulos válidos:

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

Además, en /etc/lightdm/lightdm.conftengo que agregar: xserver-command=/usr/bin/X -sharevtsen la [Seat:1]sección. Este consejo se ha encontrado aquí .

Muchas gracias a MeanEYE que me señala el camino correcto.

antoine
fuente
1

Así que hice un poco de investigación y descubrí que hay varias maneras diferentes de lograr configuraciones de múltiples asientos (múltiples estaciones, múltiples terminales, etc.).

1) El método que recomendaría, ya que utiliza su Xorg estándar y un controlador de kernel incorporado, está utilizando evdev . Aquí hay una guía sobre cómo configurar una configuración de múltiples asientos de 4 GPU y 4 monitores usando evdev. La guía está diseñada para las GPU Debian Sarge y SiS, pero creo que se puede inferir mucha información muy útil de esta guía: https://en.wikibooks.org/wiki/Multiterminal_with_evdev

2) Otro método es usar Xypher , un servidor X Windows diferente basado en KDrive. No estoy seguro de que esta sea la ruta que desea seguir, sin embargo, aquí está esa guía de todos modos: https://en.wikibooks.org/wiki/en:Multiterminal_with_Xephyr

3) Otra opción es usar una herramienta llamada Multiseat Display Manager (MDM) que promete automatizar todo el proceso de configuración para usted, sin embargo, no parece estar actualizado, por lo que no lo recomiendo. Sin embargo, puede encontrarlo fácilmente con Google como último recurso.

No estoy al tanto de lo que ha hecho o no en su configuración, por lo que su mejor opción es leer la guía evdev e intentar identificar los pasos que aún no ha hecho. Las mayores diferencias que estoy viendo es

A) En el ejemplo xorg.conf, solo hay 1 sección Screen y ServerLayout. Las pantallas adicionales y ServerLayout se definen en una configuración separada todos juntos: xorg.conf.probe

B) Además, todos los dispositivos están referenciados explícitamente por sus BusID, que se obtuvieron utilizando lspci y

C) Las interrupciones están desactivadas en irq 10.

Con suerte, esto te ayudará a ponerte en marcha, ¡buena suerte!

michealPW
fuente
De acuerdo, esto ayuda mucho. Probaré con 2 xorg.confarchivos diferentes y espero que funcione.
MeanEYE
Esto todavía no resuelve mi problema con la carga de nVidia GLX en el caso de la tarjeta Intel.
MeanEYE
0

En Ubuntu 16.04 necesitaba actualizar el /usr/local/bin/Xcontenedor con:

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

/etc/X11/Xsession.d/00ldlibrarypuede probar la $XDG_SEATvariable y establece export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa:/usr/lib/i386-linux-gnu/mesa/solo para la tarjeta Intel.

huésped
fuente
0

En 18.04, el soporte glvnd permite a los usuarios instalar tanto Mesa como los controladores Nvidia patentados muy fácilmente , ¡sin tener que meterse con LD_PRELOAD! Todas las cosas variables de entorno y los scripts de envoltura ahora son innecesarios.


Como esto no está etiquetado con una versión específica de Ubuntu, y las respuestas existentes no funcionaban completamente con mi sistema (Ubuntu 15.10), estoy publicando esta respuesta que usa logind.

Básicamente, para que GLX y libGL funcionen, debe configurar tanto el servidor X como la sesión del usuario para usar la implementación correcta de libGL, dependiendo del puesto.

Por lo tanto, necesita una secuencia de comandos de envoltura para que LightDM inicie X y una secuencia de comandos de Xsession LD_LIBRARY_PATHpara que la sesión use la libGL correcta.


En /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

(suponiendo que seat1 usa nvidia y seat0 mesa)


Del mismo modo, debe envolver el 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 "$@"

Finalmente, deberá configurar LightDM para usarlos en /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 obtener más detalles, consulte mi repositorio multiseat-mesa-nvidia que tiene más detalles y tiene los archivos de configuración y scripts completos.

Léo Lam
fuente
-1

Estoy usando Arch Linux, pero esto me ayudó un poco a cargar mi funcionalidad Intel y mis controladores propietarios de Nvidia gl/vaapi/vdpau.

Todo lo que necesitas hacer (q & d):

Instalar propietario nvidia-utils.

Copiar /usr/lib/xorg/modulesa/usr/lib/xorg/modules_nvidia

Descarga y descomprima el más reciente libva-intel-driver, mesa-vdpau, mesa, mesa-libgl, y xorg-servercomo paquetes ajustados a su arquitectura en un directorio separado. Luego cp -r(como root / sudo) el contenido de "separate directory"/usr/libalgo así /usr/lib_intelcomo "separate directory"/usr/lib/xorg/modules/*a su /usr/lib/xorg/modulesdirectorio real (sobrescritura).

Y

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

Reiniciar X-Servers, intentarglxinfo

Esto se autodestruirá en las actualizaciones de nvidia, por supuesto.

Descubrí que esto no funciona al reiniciar.

Mucho mejor piratear:

No cree un archivo ld.so.conf.d /. En su lugar, agregue lo siguiente 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

cambie "vt7" a lo que sea que su administrador de pantalla use para iniciar su servidor x intel (: 0,: ​​2, vt7, vt8, isolatodevice = ...)

Por supuesto, también puede copiar / usr / bin / X a / usr / bin / Xintel y editar eso, apuntando su wm a este archivo (kdm 'ServerCmd').

Luego, edite o cree un nuevo archivo de sesión, es decir / usr / bin / startkde (¡sin verificar DISPLAY #!), Agregando:

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

De esa manera, ni siquiera necesita sobrescribir nada. Ejecutar el directorio / usr / lib_intel y restablecer los 2 archivos editados es todo lo que necesita hacer para eliminar este hack nuevamente.

arch4ever
fuente
Ubuntu es bastante diferente de Arch Linux, por lo que si bien la idea general es buena ( LD_LIBRARY_PATH), no funcionará en un sistema Ubuntu.
Léo Lam