FWIW, I’ve been able to start X (stuck at the blank screen) and see the 2 providers by issuing xrandr from a virtual console:
$ xrandr -d :0 --listproviders
Providers: number : 2
Provider 0: id: 0x2a6 cap: 0x1, Source Output crtcs: 0 outputs: 0 associated providers: 0 name:NVIDIA-0
Provider 1: id: 0x45 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 2 outputs: 4 associated providers: 0 name:Intel
I’ve determined that the command
xrandr --setprovideroutputsource Intel NVIDIA-0
or
xrandr --setprovideroutputsource modesetting NVIDIA-0
causes my X server to crash. The backtrace wasn’t very useful so I set out to get the relevant debugging symbols but then I couldn’t get X to start at all. For some reason it didn’t like the combination of nvidia driver 319.12 and the server I was using at the time (1.14.0 or 1.14.1) or whatnot.
After hours downgrading packages and putting my system back into a functional state, I’m not going to try it again. But here’s the backtrace I was able to get anyway. It doesn’t look that useful to me but whatever
Program received signal SIGSEGV, Segmentation fault.
0x00007f56dbed4b84 in ?? () from /usr/lib/x86_64-linux-gnu/xorg/extra-modules/nvidia_drv.so
(gdb) backtrace full
#0 0x00007f56dbed4b84 in ?? () from /usr/lib/x86_64-linux-gnu/xorg/extra-modules/nvidia_drv.so
No symbol table info available.
#1 0x00007f56db7ba583 in wfbBlt (srcLine=0x7f56e3b90ad0, srcStride=<optimized out>, srcStride@entry=40, srcX=-32, dstLine=0x40, dstStride=<optimized out>,
dstStride@entry=16, dstX=32, width=256, height=<optimized out>, alu=alu@entry=3, pm=pm@entry=4294967295, bpp=bpp@entry=32, reverse=reverse@entry=0,
upsidedown=upsidedown@entry=0) at ../../fb/fbblt.c:178
src = 0x7f56e3b90a34
dst = 0x4
leftShift = <optimized out>
rightShift = <optimized out>
startmask = 0
endmask = 0
bits = <optimized out>
bits1 = <optimized out>
n = <optimized out>
nmiddle = 8
destInvarient = 1
startbyte = 0
endbyte = 0
careful = <optimized out>
_ca1 = 0
_cx1 = 0
_ca2 = 4294967295
_cx2 = 0
#2 0x00007f56db7bdfe0 in wfbCopyNtoN (pSrcDrawable=0x7f56e3a35690, pDstDrawable=0x7f56e392df00, pGC=<optimized out>, pbox=0x7ffffce069d0, nbox=<optimized out>, dx=8,
dy=5, reverse=0, upsidedown=0, bitplane=0, closure=0x0) at ../../fb/fbcopy.c:96
alu = <optimized out>
pm = 4294967295
src = 0x7f56e3b906f0
srcStride = 40
srcBpp = 32
srcXoff = 0
srcYoff = 0
dst = 0x0
dstStride = 16
dstBpp = 32
dstXoff = 0
dstYoff = 0
#3 0x00007f56e2ceaf35 in miCopyRegion (pSrcDrawable=pSrcDrawable@entry=0x7f56e3a35690, pDstDrawable=pDstDrawable@entry=0x7f56e392df00, pGC=pGC@entry=0x7f56e39fc120,
pDstRegion=pDstRegion@entry=0x7ffffce069d0, dx=dx@entry=8, dy=dy@entry=5, copyProc=copyProc@entry=0x7f56db7bdca0 <wfbCopyNtoN>, bitPlane=bitPlane@entry=0,
closure=closure@entry=0x0) at ../../mi/micopy.c:121
careful = <optimized out>
reverse = 0
upsidedown = <optimized out>
pbox = 0x7ffffce069d0
nbox = 1
pboxNew1 = <optimized out>
pboxNew2 = <optimized out>
pboxBase = <optimized out>
pboxNext = <optimized out>
pboxTmp = <optimized out>
#4 0x00007f56e2ceb4d6 in miDoCopy (pSrcDrawable=0x7f56e3a35690, pDstDrawable=0x7f56e392df00, pGC=0x7f56e39fc120, xIn=0, yIn=0, widthSrc=40,
heightSrc=heightSrc@entry=40, xOut=xOut@entry=-8, yOut=yOut@entry=-5, copyProc=0x7f56db7bdca0 <wfbCopyNtoN>, bitPlane=bitPlane@entry=0, closure=closure@entry=0x0)
at ../../mi/micopy.c:297
prgnSrcClip = 0x0
freeSrcClip = 0
prgnExposed = 0x0
rgnDst = {extents = {x1 = 0, y1 = 0, x2 = 8, y2 = 8}, data = 0x0}
dx = 8
dy = 5
box_x1 = <optimized out>
box_y1 = <optimized out>
box_x2 = <optimized out>
box_y2 = <optimized out>
fastSrc = <optimized out>
fastDst = <optimized out>
fastExpose = <optimized out>
#5 0x00007f56db7be916 in wfbCopyArea (pSrcDrawable=<optimized out>, pDstDrawable=<optimized out>, pGC=<optimized out>, xIn=<optimized out>, yIn=<optimized out>,
widthSrc=<optimized out>, heightSrc=40, xOut=-8, yOut=-5) at ../../fb/fbcopy.c:277
copy = <optimized out>
#6 0x00007f56dc30fff9 in ?? () from /usr/lib/x86_64-linux-gnu/xorg/extra-modules/nvidia_drv.so
No symbol table info available.
#7 0x00007f56e2c975ed in damageCopyArea (pSrc=0x7f56e3a35690, pDst=0x7f56e392df00, pGC=0x7f56e39fc120, srcx=0, srcy=<optimized out>, width=40, height=40, dstx=-8,
dsty=-5) at ../../../miext/damage/damage.c:825
ret = <optimized out>
pGCPriv = 0x7f56e39fc1c0
oldFuncs = 0x7f56e2f8c400 <damageGCFuncs>
#8 0x00007f56e2cec437 in miDCRestoreUnderCursor (pDev=pDev@entry=0x7f56e39f9840, pScreen=pScreen@entry=0x7f56e38e9e10, x=-8, y=-5, w=40, h=40)
at ../../mi/midispcur.c:451
pBuffer = <optimized out>
pSave = <optimized out>
pWin = 0x7f56e392df00
pGC = 0x7f56e39fc120
#9 0x00007f56e2cfb59a in miSpriteRemoveCursor (pScreen=0x7f56e38e9e10, pDev=0x7f56e39f9840) at ../../mi/misprite.c:852
pScreenPriv = 0x7f56e38ecda0
pCursorInfo = 0x7f56e39f9bd8
#10 miSpriteRemoveCursor (pDev=0x7f56e39f9840, pScreen=0x7f56e38e9e10) at ../../mi/misprite.c:836
No locals.
#11 0x00007f56e2cfc21b in miSpriteReportDamage (pDamage=<optimized out>, pRegion=0x7ffffce06c90, closure=0x7f56e38e9e10) at ../../mi/misprite.c:276
pScreen = 0x7f56e38e9e10
pCursorInfo = <optimized out>
pDev = 0x7f56e39f9840
#12 0x00007f56e2c93784 in DamageReportDamage (pDamage=pDamage@entry=0x7f56e38ee300, pDamageRegion=pDamageRegion@entry=0x7ffffce06c90)
at ../../../miext/damage/damage.c:2015
tmpBox = <optimized out>
tmpRegion = {extents = {x1 = 0, y1 = 0, x2 = 0, y2 = 0}, data = 0x7f56e392df00}
was_empty = <optimized out>
#13 0x00007f56e2c93ad6 in damageRegionAppend (pDrawable=0x7f56e392df00, pRegion=pRegion@entry=0x7ffffce06cf0, clip=clip@entry=1, subWindowMode=<optimized out>)
at ../../../miext/damage/damage.c:313
pScreen = <optimized out>
pScrPriv = 0x7f56e38ecd20
pDamage = 0x7f56e38ee300
pNext = 0x7f56e4138f80
clippedRec = {extents = {x1 = 0, y1 = 0, x2 = 8, y2 = 8}, data = 0x0}
pDamageRegion = 0x7ffffce06c90
pixClip = {extents = {x1 = 0, y1 = 0, x2 = 8, y2 = 8}, data = 0x0}
draw_x = 0
draw_y = 0
screen_x = <optimized out>
screen_y = <optimized out>
#14 0x00007f56e2c93c68 in damageDamageBox (pDrawable=<optimized out>, pBox=pBox@entry=0x7ffffce06d70, subWindowMode=<optimized out>)
at ../../../miext/damage/damage.c:377
region = {extents = {x1 = 0, y1 = 0, x2 = 8, y2 = 8}, data = 0x0}
#15 0x00007f56e2c94600 in damageComposite (op=<optimized out>, pSrc=0x7f56e3e2e4a0, pMask=0x0, pDst=0x7f56e3be80b0, xSrc=<optimized out>, ySrc=<optimized out>, xMask=0,
yMask=0, xDst=0, yDst=-27, width=8, height=35) at ../../../miext/damage/damage.c:560
box = {x1 = 0, y1 = 0, x2 = 8, y2 = 8}
pScreen = <optimized out>
ps = 0x7f56e38ed850
pScrPriv = 0x7f56e38ecd20
#16 0x00007f56e2c43d40 in compWindowUpdateAutomatic (pWin=<optimized out>) at ../../composite/compwindow.c:682
pScreen = <optimized out>
subwindowMode = 1
pRegion = 0x7f56e3ef7ab0
pSrcPicture = 0x7f56e3e2e4a0
cw = 0x7f56e3ef7810
pParent = 0x7f56e392df00
pSrcPixmap = <optimized out>
pSrcFormat = <optimized out>
pDstFormat = <optimized out>
error = 0
pDstPicture = 0x7f56e3be80b0
#17 compPaintWindowToParent (pWin=0x7f56e3ef78e0) at ../../composite/compwindow.c:706
No locals.
#18 compPaintChildrenToWindow (pWin=0x7f56e392df00) at ../../composite/compwindow.c:721
pChild = 0x7f56e3ef78e0
#19 0x00007f56e2c44399 in compScreenUpdate (pScreen=<optimized out>) at ../../composite/compalloc.c:54
No locals.
#20 compBlockHandler (pScreen=0x7f56e38e9e10, pTimeout=0x7ffffce06ed8, pReadmask=0x7f56e2f9d440 <LastSelectMask>) at ../../composite/compalloc.c:63
cs = 0x7f56e3928550
#21 0x00007f56e2bb8b54 in BlockHandler (pTimeout=pTimeout@entry=0x7ffffce06ed8, pReadmask=pReadmask@entry=0x7f56e2f9d440 <LastSelectMask>) at ../../dix/dixutils.c:387
i = <optimized out>
j = <optimized out>
#22 0x00007f56e2d08fc4 in WaitForSomething (pClientsReady=pClientsReady@entry=0x7f56e3afd720) at ../../os/WaitFor.c:210
i = <optimized out>
waittime = {tv_sec = 13, tv_usec = 585000}
wt = 0x7ffffce06ee0
timeout = <optimized out>
clientsReadable = {fds_bits = {0 <repeats 16 times>}}
clientsWritable = {fds_bits = {1, 1, 1, 140011161968384, 140007343915008, 140011161530592, 140011161706560, 140011149259087, 140737435955168, 140737435955160,
2251834173554690, 206158430224, 140737435955376, 140737435955168, 140737435955476, 140011170518736}}
selecterr = <optimized out>
nready = 0
devicesReadable = {fds_bits = {57, 140011170565488, 140737435955328, 1, 140011170500048, 140011149277302, 44, 140011147232912, 44, 140011149257725,
72057594037927937, 44, 0, 0, 140011170400112, 0}}
now = <optimized out>
someReady = <optimized out>
#23 0x00007f56e2bb4831 in Dispatch () at ../../dix/dispatch.c:361
clientReady = 0x7f56e3afd720
result = <optimized out>
client = <optimized out>
nready = <optimized out>
icheck = 0x7f56e2f96410 <checkForInput>
start_tick = <optimized out>
#24 0x00007f56e2ba347a in main (argc=6, argv=0x7ffffce072e8, envp=<optimized out>) at ../../dix/main.c:298
i = <optimized out>
alwaysCheckForInput = {0, 1}
(gdb) cont
Continuing.
Program received signal SIGABRT, Aborted.
0x00007f56e08c2037 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.