Eu tive problemas parecidos com você (Lubuntu 16.04).
Isso ocorre devido a drivers / módulos que ligam os dispositivos a eles antes que o pci-stub seja capaz de fazer isso.
Você tem pelo menos duas opções aqui:
O primeiro e mais fácil seria colocar na lista negra os módulos que reivindicam o dispositivo.
Digite lspci -knn | grep VGA -A 5
para ver todos os seus dispositivos VGA pci e seu número de dispositivo e seus módulos do kernel.
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:128b] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:8c93]
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] GK208 HDMI/DP Audio Controller [1462:8c93]
--
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. GM204 [GeForce GTX 970] [19da:1366]
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
02:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. GM204 High Definition Audio Controller [19da:1366]
Agora você precisa verificar qual driver está em uso. Por exemplo, nouveau pegou meu dispositivo VGA 02: 00.0 que eu quero usar para minha VM, então eu coloco essa lista em:
sudo nano /etc/modprobe.d/blacklist.conf
blacklist nouveau
e você está pronto.
No meu caso, isso causaria um problema, pois tenho duas VGAs da nVidia instaladas (01: 00.0 e 02: 00.0) sendo ambas executadas com o mesmo driver. No meu caso, eu não coloco o motorista na lista negra.
Desvinculo manualmente o nouveau do meu cartão VGA 02: 00.0, pois queria usar
esse cartão para meu VM-guest e o 01: 00.0 VGA para meu host Linux.
Graças a este guia, descobri como fazer isso: link
Digite sudo tree /sys/bus/pci/drivers/nouveau
. Exchange nouveau com qualquer módulo pegou seu dispositivo.
Você deve receber uma lista como esta:
/sys/bus/pci/drivers/nouveau
├── 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0
├── 0000:02:00.0 -> ../../../../devices/pci0000:00/0000:00:05.0/0000:02:00.0
├── bind
├── module -> ../../../../module/drm
├── new_id
├── remove_id
├── uevent
└── unbind
Vemos que o driver nouveau tem que vincular dispositivos a ele: 0000: 01: 00.0 e 0000: 02: 00.0
Para desvincular e vincular minha placa gráfica, primeiro preciso desativar o lightdm.service. Por isso eu abro o console fora do ambiente desktop com CTRL + ALT + F2 por exemplo.
Faça o login como root e digite systemctl stop lightdm.service
Agora posso desvincular o módulo da placa gráfica:
echo -n "0000:02:00.0" > /sys/bus/pci/drivers/nouveau/unbind
e ligá-lo a qualquer módulo que eu quiser (pci-stub ou vfio-pci). Eu usei vfio-pci.
echo -n "0000:02:00.0" > /sys/bus/pci/drivers/vfio-pci/bind
Depois disso, você pode iniciar seu gerenciador de área de trabalho novamente:
systemctl start lightdm.service
Se tudo funcionou, você deve encontrar o dispositivo vinculado ao módulo que você especificou pesquisando com lspci -knn | grep VGA -A 5
novamente.
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:128b] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:8c93]
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] GK208 HDMI/DP Audio Controller [1462:8c93]
--
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. GM204 [GeForce GTX 970] [19da:1366]
Kernel driver in use: vfio-pci
Kernel modules: nvidiafb, nouveau
02:00.1 Audio device [0403]: NVIDIA Corporation GM204 High Definition Audio Controller [10de:0fbb] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. GM204 High Definition Audio Controller [19da:1366]
Infelizmente, esta solução perde o efeito após a reinicialização. No entanto, não descobri como torná-lo persistente. Talvez mais alguém possa me dar uma dica. Algo parecido com um startcript seria possível, eu acho. Mas seria melhor poder vincular o dispositivo a um módulo específico sem precisar desvinculá-lo primeiro. Imagine que eu gostaria de usar o driver nvidia um dia. Nesse caso, desvincular-se do nouveau seria inútil, já que a placa gráfica seria ligada ao módulo nvidia.